BOOL ShellFunctions::RunRegistryCommand(HKEY hKey,LPCWSTR szFile) { if (!IsUnicodeSystem()) return RunRegistryCommand(hKey,W2A(szFile)); PROCESS_INFORMATION pi; STARTUPINFOW si; CRegKey CommandKey; CStringW ExecuteStr; CStringW CommandLine; int i; if (CommandKey.OpenKey(hKey,"command",CRegKey::openExist|CRegKey::samAll)!=ERROR_SUCCESS) return FALSE; if (CommandKey.QueryValue(L"",ExecuteStr)<2) return FALSE; i=ExecuteStr.FindFirst(L'%'); while (i!=-1) { if (ExecuteStr[i+1]==L'1') { CommandLine.Copy(ExecuteStr,i); CommandLine<<szFile; CommandLine<<((LPCWSTR)ExecuteStr+i+2); break; } i=ExecuteStr.FindNext(L'%',i); } if (i==-1) CommandLine=ExecuteStr; if (!ExpandEnvironmentStringsW(CommandLine,ExecuteStr.GetBuffer(1000),1000)) ExecuteStr.Swap(CommandLine); si.cb=sizeof(STARTUPINFOW); si.lpReserved=NULL; si.cbReserved2=0; si.lpReserved2=NULL; si.lpDesktop=NULL; si.lpTitle=NULL; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOWDEFAULT; if (!CreateProcessW(NULL,ExecuteStr.GetBuffer(),NULL, NULL,FALSE,CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL,NULL,&si,&pi)) { CommandKey.CloseKey(); return FALSE; } CloseHandle(pi.hThread); CloseHandle(pi.hProcess); CommandKey.CloseKey(); return TRUE; }
BOOL SetLanguageSpecifigHandles(LPCWSTR szAppPath) { CRegKey RegKey; CStringW LangFile; if (RegKey.OpenKey(HKCU,g_szRegKey, CRegKey::openExist|CRegKey::samRead)==ERROR_SUCCESS) { RegKey.QueryValue(L"Language",LangFile); RegKey.CloseKey(); } if (LangFile.IsEmpty()) LangFile=L"lan_en.dll"; CStringW Path(szAppPath,LastCharIndex(szAppPath,L'\\')+1); HINSTANCE hLib=FileSystem::LoadLibrary(Path+LangFile); if (hLib==NULL) { hLib=FileSystem::LoadLibrary(Path+"lan_en.dll"); if (hLib==NULL) { fwprintf(stderr,L"Cannot load language file '%s'\n",(LPCWSTR)Path); return FALSE; } fwprintf(stderr,L"Cannot load language file '%s', using 'lan_en.dll'\n",(LPCWSTR)LangFile); } SetResourceHandle(hLib,LanguageSpecificResource); return TRUE; }
BOOL CListCtrl::SaveColumnsState(HKEY hRootKey,LPCSTR lpKey,LPCSTR lpSubKey) const { CRegKey RegKey; if (lpKey==NULL) RegKey.m_hKey=hRootKey; else if (RegKey.OpenKey(hRootKey,lpKey,CRegKey::createNew|CRegKey::samAll)!=ERROR_SUCCESS) return FALSE; LVCOLUMN lc; fMemSet(&lc,0,sizeof(LVCOLUMN)); lc.mask=LVCF_WIDTH; int nColumns=GetColumnCount(); if (nColumns==0) { if (lpKey==NULL) RegKey.m_hKey=NULL; return FALSE; } int* pData=new int[1+2*nColumns]; if (pData==NULL) { if (lpKey==NULL) RegKey.m_hKey=NULL; return FALSE; } pData[0]=nColumns; for (int i=0;i<nColumns;i++) { if (::SendMessage(m_hWnd,LVM_GETCOLUMN,i,LPARAM(&lc))) pData[1+i]=lc.cx; else pData[1+i]=100; } if (!::SendMessage(m_hWnd,LVM_GETCOLUMNORDERARRAY,nColumns,LPARAM(pData+1+nColumns))) { for (int i=0;i<nColumns;i++) pData[1+nColumns+i]=i; } BOOL bRet=RegKey.SetValue(lpSubKey,(LPSTR)pData,sizeof(int)*(1+2*nColumns),REG_BINARY)==ERROR_SUCCESS; RegKey.CloseKey(); delete[] pData; if (lpKey==NULL) RegKey.m_hKey=NULL; return bRet; }
BOOL CALLBACK CSubAction::EnumExplorerChilds(HWND hWnd,LPARAM lParam) { char szClass[100]=""; GetClassName(hWnd,szClass,100); if (strcmp(szClass,"ComboBoxEx32")!=0) return TRUE; if (::SendMessageW(hWnd,WM_GETTEXT,MAX_PATH,lParam)==0) return TRUE; if (FileSystem::IsDirectory((LPCWSTR)lParam)) return FALSE; // Path is OK // Check wheter lParam is Desktop LPITEMIDLIST idl; SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&idl); SHFILEINFOW fi; if (ShellFunctions::GetFileInfo(idl,0,&fi,SHGFI_DISPLAYNAME)) { if (wcscmp(fi.szDisplayName,(LPCWSTR)lParam)==0) { ((LPWSTR)lParam)[0]=L'2'; ((LPWSTR)lParam)[1]=L'\0'; CoTaskMemFree(idl); return FALSE; } CoTaskMemFree(idl); } // Check wheter lParam is My Computer SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES,&idl); if (ShellFunctions::GetFileInfo(idl,0,&fi,SHGFI_DISPLAYNAME)) { if (wcscmp(fi.szDisplayName,(LPCWSTR)lParam)==0) { ((LPWSTR)lParam)[0]=L'4'; ((LPWSTR)lParam)[1]=L'\0'; CoTaskMemFree(idl); return FALSE; } CoTaskMemFree(idl); } // Check wheter lParam is My Documents CRegKey RegKey; if (RegKey.OpenKey(HKCU,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",CRegKey::openExist|CRegKey::samRead)==ERROR_SUCCESS) { WCHAR temp[MAX_PATH]; RegKey.QueryValue(L"Personal",temp,MAX_PATH); RegKey.CloseKey(); if (FileSystem::IsDirectory(temp)) { if (ShellFunctions::GetFileInfo(temp,0,&fi,SHGFI_DISPLAYNAME)) { if (wcscmp(fi.szDisplayName,(LPCWSTR)lParam)==0) { ((LPWSTR)lParam)[0]=L'3'; ((LPWSTR)lParam)[1]=L'\0'; return FALSE; } } } } ((LPWSTR)lParam)[0]='\0'; return TRUE; }
BOOL CCpuUsage::EnablePerformaceCounters(BOOL bEnable) { if (m_nPlatform!= WIN2K_XP) return TRUE; CRegKey regKey; if (regKey.OpenKey(HKLM, "SYSTEM\\CurrentControlSet\\Services\\PerfOS\\Performance",CRegKey::defWrite) != ERROR_SUCCESS) return FALSE; regKey.SetValue("Disable Performance Counters",(DWORD)!bEnable); regKey.CloseKey(); if (regKey.OpenKey(HKLM, "SYSTEM\\CurrentControlSet\\Services\\PerfProc\\Performance",CRegKey::defWrite) != ERROR_SUCCESS) return FALSE; regKey.SetValue("Disable Performance Counters",(DWORD)!bEnable); regKey.CloseKey(); return TRUE; }