⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winapiwrapper.cpp

📁 JDesktop Integration Components (JDIC)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is * subject to license terms. *  * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. */ #include <afx.h>#include <afxdisp.h>#include <stdio.h>#include <comdef.h>#include <atlbase.h>#include <ExDisp.h>#include <mapi.h>#include <stdlib.h>#include <string.h>#include <atlconv.h>#include <shlwapi.h>#include "WinAPIWrapper.h"#ifdef __cplusplusextern "C" {#endifconst int MAX_VALUE_LENGTH = 4096;const int MAX_MIME_DATA_LENGTH = 256;const char *EXCEPTION_CLASS = "org/jdesktop/jdic/desktop/internal/LaunchFailedException";// Native code for WinBrowserService// Global IWebBrowser2 object.CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2;JNIEXPORT void JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_shutDown  (JNIEnv *, jclass) {    m_spWebBrowser2.Release();    CoUninitialize();}JNIEXPORT jboolean JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_nativeBrowseURLInIE(JNIEnv *env, jobject obj, jstring url, jstring target) {    const char* urlStr = env->GetStringUTFChars(url, JNI_FALSE);    const char* targetStr = env->GetStringUTFChars(target, JNI_FALSE);    HRESULT hr;    if(!m_spWebBrowser2) {        hr = m_spWebBrowser2.CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_ALL);    }    CComVariant vDummy;    CComVariant vURL((char*)urlStr);    CComVariant vTarget((char*)targetStr);    hr = m_spWebBrowser2->Navigate2(&vURL, &vDummy, &vTarget, &vDummy, &vDummy);	    env->ReleaseStringUTFChars(url, urlStr);    env->ReleaseStringUTFChars(target, targetStr);    return (hr == S_OK) ? true : false;}JNIEXPORT jintArray JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_RegOpenKey  (JNIEnv* env, jclass cl, jint hKey, jbyteArray lpSubKey, jint securityMask) {    HKEY handle;    const char* str;    jint tmp[2];    int errorCode=-1;    jintArray result;    //Windows API invocation    str = (const char*)env->GetByteArrayElements(lpSubKey, NULL);    errorCode =  RegOpenKeyEx((HKEY)hKey, str, 0, securityMask, &handle);    env->ReleaseByteArrayElements(lpSubKey, (signed char*)str, 0);    //constructs return value    tmp[0]= (int) handle;    tmp[1]= errorCode;    result = env->NewIntArray(2);    if (result != NULL) {	    env->SetIntArrayRegion(result, 0, 2, tmp);    }    return result;} JNIEXPORT jint JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_RegCloseKey  (JNIEnv* env, jclass cl, jint hKey) {    return (jint) RegCloseKey((HKEY) hKey);        };     JNIEXPORT jbyteArray JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_RegQueryValueEx       (JNIEnv* env, jclass cl, jint hKey, jbyteArray valueName) {    const char* valueNameStr;    unsigned char buffer[MAX_VALUE_LENGTH];    jbyteArray result = NULL;    DWORD valueType;    DWORD valueSize = MAX_VALUE_LENGTH;      valueNameStr = (const char*)env->GetByteArrayElements(valueName, NULL);    if (RegQueryValueEx((HKEY)hKey, valueNameStr, NULL, &valueType, buffer,          &valueSize) == ERROR_SUCCESS) {        if (valueSize > 0) {            if ((valueType == REG_SZ)||(valueType == REG_EXPAND_SZ)) {                result = env->NewByteArray(valueSize);                if (result != NULL) {	                env->SetByteArrayRegion(result, 0, valueSize, 	               	                (jbyte*)buffer);	            }            }        } else {            result = NULL;        }    }    env->ReleaseByteArrayElements(valueName, (signed char*)valueNameStr, 0);    return result;} JNIEXPORT jbyteArray JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_AssocQueryString  (JNIEnv * env, jclass cl, jbyteArray fileOrProtocal, jbyteArray verb) {    const TCHAR* fileOrProtocalStr;    const TCHAR* verbStr;    jbyteArray result = NULL;    fileOrProtocalStr = (const char*)env->GetByteArrayElements(fileOrProtocal, NULL);    verbStr = (const char*)env->GetByteArrayElements(verb, NULL);    TCHAR pszOut[MAX_VALUE_LENGTH] = "\n";    DWORD pcchout = MAX_VALUE_LENGTH;    HRESULT rc = AssocQueryString(ASSOCF_NOTRUNCATE, ASSOCSTR_COMMAND, fileOrProtocalStr, verbStr, pszOut, &pcchout);    if (rc != S_OK) {        result = NULL;       } else {        result = env->NewByteArray(pcchout + 1);        if (result != NULL) {            env->SetByteArrayRegion(result, 0, pcchout + 1, (jbyte*)pszOut);           }        }    return result;}JNIEXPORT jbyteArray JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_ExpandEnvironmentStrings  (JNIEnv *env, jclass cl, jbyteArray envVariable) {    const char* envVariableStr;    jbyteArray result;    int resultInt;    jbyte buffer[MAX_VALUE_LENGTH];    envVariableStr = (const char*)env->GetByteArrayElements(envVariable, NULL);     // If the function succeeds, the return value is the number of TCHARs stored in the buffer.    // Or else, the return value is zero.     if((resultInt = ExpandEnvironmentStrings(envVariableStr, (LPTSTR)buffer, MAX_VALUE_LENGTH)) == ERROR_SUCCESS) {        result = envVariable;    } else {        result = env->NewByteArray(sizeof(TCHAR)*resultInt);        if (result != NULL) {	        env->SetByteArrayRegion(result, 0, sizeof(TCHAR)*resultInt, (jbyte*)buffer);        }    }    env->ReleaseByteArrayElements(envVariable, (signed char*)envVariableStr, 0);    return result;}  JNIEXPORT jstring JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_resolveLinkFile  (JNIEnv *env, jclass cl, jbyteArray filePath) {    const char* filePathStr = (const char*)env->GetByteArrayElements(filePath, NULL);    HRESULT hr;    IShellLink *psl = NULL;             IPersistFile *ppf = NULL;    char szGotPath[MAX_PATH];    hr = CoInitialize(NULL);    if (SUCCEEDED(hr))    {        hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,                               IID_IShellLink, (LPVOID *)&psl);        if (SUCCEEDED(hr))        {            hr = psl->QueryInterface(IID_IPersistFile, (LPVOID *)&ppf);            if (SUCCEEDED(hr))            {                WORD wsz[MAX_PATH];                // Ensure string is Unicode.                MultiByteToWideChar(CP_ACP, 0, filePathStr, -1, wsz, MAX_PATH);                hr = ppf->Load(wsz, STGM_READ);                if (SUCCEEDED(hr))                {                    hr = psl->Resolve(0, SLR_ANY_MATCH);                    if (SUCCEEDED(hr))                    {                        WIN32_FIND_DATA wfd;                        strcpy(szGotPath, filePathStr);                        hr = psl->GetPath(szGotPath, MAX_PATH,                                (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH );                    }                 }             }         } // CoCreateInstance() succeeds.    } // CoInitialize(NULL) succeeds.    if (ppf != NULL)         ppf->Release();    if (psl != NULL)         psl->Release();    CoUninitialize();    env->ReleaseByteArrayElements(filePath, (signed char*)filePathStr, 0);        if (SUCCEEDED(hr))    {        jstring targetFilePath = env->NewStringUTF(szGotPath);        return targetFilePath;    }     else         return NULL;}  JNIEXPORT jint JNICALL Java_org_jdesktop_jdic_desktop_internal_impl_WinAPIWrapper_shellExecute  (JNIEnv *env, jclass cl, jbyteArray filePath, jbyteArray verb) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -