|
|
#include "pch.h"
#include "resource.h"
#include "main.h"
#include <stdio.h>
//-------------------------------------------------------------------------//
// 'General' page impl
//-------------------------------------------------------------------------//
// CreateIntance, DlgProc
HWND CALLBACK GeneralPage_CreateInstance( HWND hwndParent ); INT_PTR CALLBACK GeneralPage_DlgProc( HWND hwndPage, UINT, WPARAM , LPARAM ); // Message Handlers
LRESULT CALLBACK GeneralPage_OnThemeSelected( HWND hwndPage, UINT, WPARAM, HWND, BOOL&); LRESULT CALLBACK GeneralPage_OnColorSelected( HWND hwndPage, UINT, WPARAM, HWND, BOOL&); LRESULT CALLBACK GeneralPage_OnEdit( HWND hwndPage, UINT, WPARAM, HWND, BOOL&); LRESULT CALLBACK GeneralPage_OnInitDialog(HWND hwndPage, UINT, WPARAM, LPARAM, BOOL&); LRESULT CALLBACK GeneralPage_OnDestroy( HWND hwndPage, UINT, WPARAM, LPARAM, BOOL&);
// Misc
BOOL CALLBACK GeneralPage_AddProccessNamesCB( HWND hwnd, LPARAM lParam ); void GeneralPage_AddProcessNamesToCombos( HWND hwndPage );
// Utility Methods
void GeneralPage_RefreshThemeName( HWND hwndPage ); BOOL GeneralPage_EnumProc( enum THEMECALLBACK tcbType, LPCWSTR pszName, LPCWSTR pszDisplayName, LPCWSTR pszToolTip, int iIndex, LPARAM lParam ); void GeneralPage_AddProcessNamesToCombos( HWND hwndPage ); void GeneralPage_EnableDlgButtons( HWND hwndPage ); void GeneralPage_RebuildThemes(HWND hwndPage, LPCWSTR pszCurrentTheme);
HWND g_hwndGeneralPage = NULL; //-------------------------------------------------------------------------//
void ExpandDirIntoFullThemeFileName(LPCWSTR pszSubDir, LPWSTR pszFileName) { //---- turn this into a real theme file name ----
WCHAR szRelativeDir[_MAX_PATH+1]; StringCchPrintfW(szRelativeDir, ARRAYSIZE(szRelativeDir), L"%s\\%s.msstyles", pszSubDir, pszSubDir);
WCHAR *pszBaseName; GetFullPathName(szRelativeDir, MAX_PATH, pszFileName, &pszBaseName); } //-------------------------------------------------------------------------//
INT_PTR CALLBACK GeneralPage_DlgProc( HWND hwndPage, UINT uMsg, WPARAM wParam, LPARAM lParam ) { BOOL bHandled = TRUE; LRESULT lRet = 0L; switch( uMsg ) { case WM_INITDIALOG: lRet = GeneralPage_OnInitDialog( hwndPage, uMsg, wParam, lParam, bHandled ); break;
case WM_COMMAND: { HWND hwndCtl = (HWND)lParam; UINT uCode = HIWORD(wParam); switch( LOWORD(wParam) ) { case IDC_TESTBUTTON: lRet = GeneralPage_OnTestButton( hwndPage, uMsg, wParam, hwndCtl, bHandled ); break; case IDC_CLEARBUTTON: lRet = GeneralPage_OnClearButton( hwndPage, uMsg, wParam, hwndCtl, bHandled ); break;
case IDC_DIRNAME: lRet = GeneralPage_OnThemeSelected( hwndPage, uMsg, wParam, hwndCtl, bHandled ); break;
case IDC_COLORCOMBO: lRet = GeneralPage_OnColorSelected( hwndPage, uMsg, wParam, hwndCtl, bHandled ); break;
case IDC_EDIT_THEME: lRet = GeneralPage_OnEdit( hwndPage, uMsg, wParam, hwndCtl, bHandled ); break;
case IDC_TARGET: case IDC_UNTARGET: if( CBN_DROPDOWN == uCode ) { // Keep process names fresh.
GeneralPage_AddProcessNamesToCombos( hwndPage ); } break; } GeneralPage_EnableDlgButtons( hwndPage ); break; }
case WM_DESTROY: lRet = GeneralPage_OnDestroy( hwndPage, uMsg, wParam, lParam, bHandled ); break;
default: bHandled = FALSE; break; } return bHandled; }
//-------------------------------------------------------------------------//
HWND CALLBACK GeneralPage_CreateInstance( HWND hwndParent ) { g_hwndGeneralPage = CreateDialog( g_hInst, MAKEINTRESOURCE(IDD_PAGE_GENERAL), hwndParent, GeneralPage_DlgProc );
return g_hwndGeneralPage; }
//---------------------------------------------------------------------------
BOOL ThemeEnumerator(enum THEMECALLBACK tcbType, LPCWSTR pszName, LPCWSTR pszDisplayName, LPCWSTR pszToolTip, int iIndex, LPARAM lParam) { HWND combo = (HWND)lParam;
WCHAR szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szBase[_MAX_FNAME], szExt[_MAX_EXT]; WCHAR szBaseName[MAX_PATH]; _tsplitpath(pszName, szDrive, szDir, szBase, szExt); StringCchPrintfW(szBaseName, ARRAYSIZE(szBaseName), L".\\%s\\%s%s", szBase, szBase, szExt);
int index = (int)SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)szBaseName);
if (! index) // first one added
{ ::SetWindowText(combo, szBaseName); //---- simulate a selection change ----
::SendMessage(combo, CB_SETCURSEL, 0, 0); }
return TRUE; }
//---------------------------------------------------------------------------
void GeneralPage_RebuildThemes(HWND hwndPage, LPCWSTR pszCurrentTheme) { HWND hwndCombo = GetDlgItem(hwndPage, IDC_DIRNAME); SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
WCHAR szFullDir[_MAX_PATH+1]; WCHAR *pszBaseName; DWORD val = GetFullPathName(L".", ARRAYSIZE(szFullDir), szFullDir, &pszBaseName); if (! val) { MessageBox(NULL, L"GetFullPathName() failure", L"Error", MB_OK); return; }
//---- enum actual theme DLL's ----
HRESULT hr = EnumThemes(szFullDir, ThemeEnumerator, (LPARAM)hwndCombo); ATLASSERT(SUCCEEDED(hr));
//---- enum theme subdirs ----
HANDLE hFile = NULL; BOOL bFile = TRUE; WIN32_FIND_DATA wfd; hr = S_FALSE; // assume interrupted until we complete
bFile = TRUE;
for( hFile = FindFirstFile( TEXT("*.*"), &wfd ); hFile != INVALID_HANDLE_VALUE && bFile; bFile = FindNextFile( hFile, &wfd ) ) { WCHAR *p = wfd.cFileName;
if(! ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )) continue;
if ((lstrcmp(wfd.cFileName, TEXT("."))==0) || (lstrcmp(wfd.cFileName, TEXT(".."))==0)) continue;
if (_tcsicmp(p, _TEXT("obj"))==0) // dev directory
continue;
SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)wfd.cFileName); }
//---- select the first theme ----
int index = (int)SendMessage(hwndCombo, CB_FINDSTRINGEXACT, 0, (LPARAM)pszCurrentTheme); if (index < 0) index = 0; SendMessage(hwndCombo, CB_SETCURSEL, index, NULL); } //---------------------------------------------------------------------------
LRESULT GeneralPage_OnInitDialog(HWND hwndPage, UINT, WPARAM wid, LPARAM, BOOL&) { GeneralPage_RefreshThemeName( hwndPage );
#if 0 // testing SetWindowTheme()
HWND hwndOK = GetDlgItem(hwndPage, IDC_TESTBUTTON); if (hwndOK) SetWindowTheme(hwndOK, L"themeok", NULL);
HWND hwndCancel = GetDlgItem(hwndPage, IDC_CLEARBUTTON); if (hwndCancel) SetWindowTheme(hwndCancel, NULL, L"CancelButton"); #endif
GeneralPage_RebuildThemes(hwndPage, DEFAULT_THEME);
//---- simulate a selection ----
BOOL mybool; GeneralPage_OnThemeSelected(hwndPage, 0, 0, 0, mybool); GeneralPage_AddProcessNamesToCombos( hwndPage );
CheckDlgButton( hwndPage, IDC_THEME_ALL, *g_options.szTargetApp == 0 ); CheckDlgButton( hwndPage, IDC_THEME_PROCESS, *g_options.szTargetApp != 0 && !g_options.fExceptTarget); CheckDlgButton( hwndPage, IDC_THEME_EXEMPT, *g_options.szTargetApp != 0 && g_options.fExceptTarget ); CheckDlgButton( hwndPage, IDC_THEME_PREVIEW, g_options.hwndPreviewTarget != 0 ); CheckDlgButton( hwndPage, IDC_ENABLE_FRAME, g_options.fEnableFrame ); CheckDlgButton( hwndPage, IDC_ENABLE_DLG, g_options.fEnableDialog ); CheckDlgButton( hwndPage, IDC_USERSWITCH, g_options.fUserSwitch ); GeneralPage_EnableDlgButtons( hwndPage );
//---- set preview edit text to hwndPage ----
WCHAR szBuff[_MAX_PATH+1]; StringCchPrintfW(szBuff, ARRAYSIZE(szBuff), L"%x", hwndPage); SetDlgItemText(hwndPage, IDC_PREVIEW, szBuff);
return 0; }
//---------------------------------------------------------------------------
void GeneralPage_EnableDlgButtons( HWND hwndPage ) { EnableWindow( GetDlgItem( hwndPage, IDC_TARGET ), IsDlgButtonChecked( hwndPage, IDC_THEME_PROCESS )!=0 ); EnableWindow( GetDlgItem( hwndPage, IDC_UNTARGET ), IsDlgButtonChecked( hwndPage, IDC_THEME_EXEMPT )!=0 ); EnableWindow( GetDlgItem( hwndPage, IDC_PREVIEW ), IsDlgButtonChecked( hwndPage, IDC_THEME_PREVIEW )!=0 ); }
//---------------------------------------------------------------------------
LRESULT GeneralPage_OnDumpTheme() { HTHEME hTheme = OpenThemeData(NULL, L"globals"); if (hTheme) { HTHEMEFILE hThemeFile; if (SUCCEEDED(OpenThemeFileFromData(hTheme, &hThemeFile))) { HRESULT hr = DumpLoadedThemeToTextFile(hThemeFile, L"theme.dmp", TRUE, TRUE); if (FAILED(hr)) MessageBox(NULL, L"DumpLoadedThemeToTextFile() Failed", L"Error", MB_OK);
CloseThemeFile(hThemeFile); }
CloseThemeData(hTheme); }
return 0; } //---------------------------------------------------------------------------
LRESULT GeneralPage_OnTestButton( HWND hwndPage, UINT, WPARAM, HWND, BOOL&) { //---- get theme szFileName ----
WCHAR szThemeFileName[_MAX_PATH+1]; GetDlgItemText(hwndPage, IDC_DIRNAME, szThemeFileName, ARRAYSIZE(szThemeFileName));
//---- is it a dir? ----
DWORD dwMask = GetFileAttributes(szThemeFileName); BOOL fDir = ((dwMask != 0xffffffff) && (dwMask & FILE_ATTRIBUTE_DIRECTORY));
if (fDir) // do auto convert to a .msstyles file
{ //---- run "packthem" against the dir ----
WCHAR szDirName[_MAX_PATH+1]; StringCchCopyW(szDirName, ARRAYSIZE(szDirName), szThemeFileName);
WCHAR szCmdLine[2*_MAX_PATH+1]; StringCchPrintfW(szCmdLine, ARRAYSIZE(szCmdLine), L"/e %s", szDirName);
HRESULT hr = SyncCmdLineRun(L"packthem.exe", szCmdLine); if (FAILED(hr)) { LPWSTR szErrMsg; hr = AllocateTextFile(L"packthem.err", &szErrMsg, NULL); if (FAILED(hr)) { MessageBox(NULL, L"Unknown Error", L"Error in packing Theme", MB_OK); return FALSE; }
MessageBox(NULL, szErrMsg, L"Error in packing Theme", MB_OK); LocalFree(szErrMsg);
return FALSE; }
GeneralPage_RebuildThemes(hwndPage, szDirName);
//---- convert into a DLL name ----
ExpandDirIntoFullThemeFileName(szDirName, szThemeFileName); }
WCHAR ColorParam[MAX_PATH+1]; WCHAR SizeParam[MAX_PATH+1];
*ColorParam = 0; *SizeParam = 0;
//---- extract ColorParam ----
HWND hwndCombo; hwndCombo = GetDlgItem(hwndPage, IDC_COLORCOMBO); int index; index = (int)SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); if (index > -1) SendMessage(hwndCombo, CB_GETLBTEXT, index, (LPARAM)ColorParam);
//---- extract SizeParam ----
hwndCombo = GetDlgItem(hwndPage, IDC_SIZECOMBO); index = (int)SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); if (index > -1) SendMessage(hwndCombo, CB_GETLBTEXT, index, (LPARAM)SizeParam);
g_options.fExceptTarget = IsDlgButtonChecked( hwndPage, IDC_THEME_EXEMPT ) != 0; if( g_options.fExceptTarget ) { GetDlgItemText( hwndPage, IDC_UNTARGET, g_options.szTargetApp, ARRAYSIZE(g_options.szTargetApp) ); } else if( IsDlgButtonChecked( hwndPage, IDC_THEME_PROCESS ) != 0 ) { GetDlgItemText( hwndPage, IDC_TARGET, g_options.szTargetApp, ARRAYSIZE(g_options.szTargetApp) ); } else *g_options.szTargetApp = 0;
//---- extract Preview info ----
g_options.hwndPreviewTarget = GetPreviewHwnd(hwndPage); g_options.fEnableFrame = IsDlgButtonChecked( hwndPage, IDC_ENABLE_FRAME ) != 0; g_options.fEnableDialog = IsDlgButtonChecked( hwndPage, IDC_ENABLE_DLG ) != 0; g_options.fUserSwitch = IsDlgButtonChecked( hwndPage, IDC_USERSWITCH ) != 0;
_ApplyTheme(szThemeFileName, ColorParam, SizeParam, NULL);
GeneralPage_RefreshThemeName( hwndPage );
return TRUE; }
//---------------------------------------------------------------------------
HWND GetPreviewHwnd(HWND hwndGeneralPage) { if (! hwndGeneralPage) return NULL;
BOOL fPreview = IsDlgButtonChecked( hwndGeneralPage, IDC_THEME_PREVIEW ) != 0; if (! fPreview) return NULL;
WCHAR szTempBuff[_MAX_PATH+1];
GetDlgItemText(hwndGeneralPage, IDC_PREVIEW, szTempBuff, ARRAYSIZE(szTempBuff));
LONG val; int cnt = swscanf(szTempBuff, L"%lx", &val); if (! cnt) val = 0;
return (HWND)IntToPtr(val); }
//---------------------------------------------------------------------------
LRESULT GeneralPage_OnClearButton(HWND hwndPage, UINT, WPARAM, HWND, BOOL&) { #if 0 // testing SetWindowTheme()
HWND hwndOK = GetDlgItem(hwndPage, IDC_TESTBUTTON); if (hwndOK) SetWindowTheme(hwndOK, NULL, NULL);
HWND hwndCancel = GetDlgItem(hwndPage, IDC_CLEARBUTTON); if (hwndCancel) SetWindowTheme(hwndCancel, NULL, NULL); #endif
_RestoreSystemSettings(hwndPage, TRUE); GeneralPage_RefreshThemeName( hwndPage ); return 0; }
//---------------------------------------------------------------------------
LRESULT GeneralPage_OnThemeSelected( HWND hwndPage, UINT, WPARAM, HWND, BOOL&) { //---- get theme szFileName ----
WCHAR szFileName[MAX_PATH+1]; WCHAR szSubDir[MAX_PATH+1];
HWND hwndCombo = GetDlgItem(hwndPage, IDC_DIRNAME); int index = (int)SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); if (index == -1) *szFileName = 0; else { ::SendMessage(hwndCombo, CB_GETLBTEXT, index, (LPARAM)szSubDir);
//---- turn this into a real theme file name ----
ExpandDirIntoFullThemeFileName(szSubDir, szFileName); }
//---- enum the theme colors ----
HWND hwnd = GetDlgItem(hwndPage, IDC_COLORCOMBO); ::SendMessage(hwnd, CB_RESETCONTENT, 0, 0);
for (DWORD c=0; ; c++) { THEMENAMEINFO names;
if (FAILED(EnumThemeColors(szFileName, NULL, c, &names))) break;
::SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)names.szName); }
//---- remove choices if only 1 entry ----
if (c < 2) { ::SendMessage(hwnd, CB_RESETCONTENT, 0, 0); ::EnableWindow(hwnd, FALSE); } else { ::EnableWindow(hwnd, TRUE); SendMessage(hwnd, CB_SETCURSEL, 0, 0); }
BOOL fDummy; GeneralPage_OnColorSelected(hwndPage, 0, 0, 0, fDummy);
WCHAR szBuff[MAX_PATH+1]; HRESULT hr;
//---- update DisplayName ----
hr = GetThemeDocumentationProperty(szFileName, L"DisplayName", szBuff, ARRAYSIZE(szBuff)); if (FAILED(hr)) StringCchCopyW(szBuff, ARRAYSIZE(szBuff), L"<not available>"); SetDlgItemText(hwndPage, IDC_DISPLAYNAME, szBuff);
//---- update ToolTip ----
hr = GetThemeDocumentationProperty(szFileName, L"Tooltip", szBuff, ARRAYSIZE(szBuff)); if (FAILED(hr)) StringCchCopyW(szBuff, ARRAYSIZE(szBuff), L"<not available>"); SetDlgItemText(hwndPage, IDC_TOOLTIP, szBuff);
//---- update Author ----
hr = GetThemeDocumentationProperty(szFileName, L"author", szBuff, ARRAYSIZE(szBuff)); if (FAILED(hr)) StringCchCopyW(szBuff, ARRAYSIZE(szBuff), L"<not available>"); SetDlgItemText(hwndPage, IDC_AUTHOR, szBuff);
return 1; }
//---------------------------------------------------------------------------
LRESULT GeneralPage_OnColorSelected( HWND hwndPage, UINT, WPARAM, HWND, BOOL&) { //---- get theme szFileName ----
WCHAR szFileName[MAX_PATH+1]; HWND hwndCombo = GetDlgItem(hwndPage, IDC_DIRNAME); int index = (int)SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); if (index == -1) *szFileName = 0; else ::SendMessage(hwndCombo, CB_GETLBTEXT, index, (LPARAM)szFileName);
//---- get the currently selected color ----
WCHAR szColor[_MAX_PATH+1]; HWND hwnd = GetDlgItem(hwndPage, IDC_COLORCOMBO); GetWindowText(hwnd, szColor, ARRAYSIZE(szColor));
//---- get the current size name ----
WCHAR szSizeName[MAX_PATH+1]; HWND hwndSize = GetDlgItem(hwndPage, IDC_SIZECOMBO); GetWindowText(hwndSize, szSizeName, ARRAYSIZE(szSizeName));
//---- enum the theme sizes for the specified color ----
hwnd = GetDlgItem(hwndPage, IDC_SIZECOMBO);
if (* szColor) // only set size if a color is set
{ ::SendMessage(hwnd, CB_RESETCONTENT, 0, 0);
for (DWORD s=0; ; s++) // enumerate sizes
{ THEMENAMEINFO names;
if (FAILED(EnumThemeSizes(szFileName, szColor, s, &names))) break;
::SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)names.szName); }
//---- remove choices if only 1 entry ----
if (s < 2) { ::SendMessage(hwnd, CB_RESETCONTENT, 0, 0); ::EnableWindow(hwnd, FALSE); } else { ::EnableWindow(hwnd, TRUE);
//---- try to select previously set size ----
int index = (int)SendMessage(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)szSizeName); if (index == -1) index = 0; SendMessage(hwnd, CB_SETCURSEL, index, 0); } } else { ::SendMessage(hwnd, CB_RESETCONTENT, 0, 0); ::EnableWindow(hwnd, FALSE); }
return 1; }
//---------------------------------------------------------------------------
LRESULT GeneralPage_OnEdit( HWND hwndPage, UINT, WPARAM, HWND, BOOL&) { //---- get theme szFileName ----
WCHAR szBuff[1024]; WCHAR szFileName[MAX_PATH+1];
HWND hwndCombo = GetDlgItem(hwndPage, IDC_DIRNAME); int index = (int)SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); if (index == -1) *szFileName = 0; else { ::SendMessage(hwndCombo, CB_GETLBTEXT, index, (LPARAM)szBuff); WCHAR *p = wcschr(szBuff, L'.'); if (p) *p = 0; // remove file extension of DLL name
WCHAR *pStart = wcsrchr(szBuff, L'\\'); if (pStart) pStart++; else pStart = szBuff;
//---- try for classdata file; fallback onto container file ----
StringCchPrintfW(szFileName, ARRAYSIZE(szFileName), L"%s\\%s", pStart, USUAL_CLASSDATA_NAME); if (! FileExists(szFileName)) StringCchPrintfW(szFileName, ARRAYSIZE(szFileName), L"%s\\%s", pStart, CONTAINER_NAME); }
HANDLE hInst = CmdLineRun(L"notepad.exe", szFileName, FALSE); CloseHandle(hInst);
return 1; }
//---------------------------------------------------------------------------
LRESULT GeneralPage_OnDestroy( HWND hwndPage, UINT, WPARAM wid, LPARAM, BOOL&) { return 0; }
//---------------------------------------------------------------------------
void GeneralPage_RefreshThemeName( HWND hwndPage ) { WCHAR szName[MAX_PATH+1]; WCHAR szColor[MAX_PATH+1]; WCHAR szSize[MAX_PATH+1]; WCHAR szTitle[1024];
BOOL fThemeActive = IsThemeActive();
if (fThemeActive) { HRESULT hr = GetCurrentThemeName(szName, ARRAYSIZE(szName), szColor, ARRAYSIZE(szColor), szSize, ARRAYSIZE(szSize));
if (FAILED(hr)) StringCchCopyW(szName, ARRAYSIZE(szName), L"<unavailable>"); else if (! *szName) StringCchCopyW(szTitle, ARRAYSIZE(szTitle), g_szAppTitle); else { //---- remove all dirs preceeding last backslash ----
WCHAR *p = wcsrchr(szName, L'\\'); if (p) StringCchPrintfW(szTitle, ARRAYSIZE(szTitle), L"%s - %s", p+1, g_szAppTitle); else StringCchPrintfW(szTitle, ARRAYSIZE(szTitle), L"%s - %s", szName, g_szAppTitle); } } else StringCchCopyW(szTitle, ARRAYSIZE(szTitle), g_szAppTitle);
HWND hMain = GetParent(GetParent(hwndPage)); SetWindowText(hMain, szTitle); }
//---------------------------------------------------------------------------
BOOL GeneralPage_EnumProc( enum THEMECALLBACK tcbType, LPCWSTR pszName, LPCWSTR pszDisplayName, LPCWSTR pszToolTip, int iIndex, LPARAM lParam ) { HWND hwnd = (HWND)lParam; ::SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)pszName);
return TRUE; }
//---------------------------------------------------------------------------
BOOL CALLBACK GeneralPage_AddProccessNamesCB( HWND hwnd, LPARAM lParam ) { HWND hwndPage = (HWND)lParam; _ASSERTE( IsWindow(hwndPage) );
DWORD dwProcessID = 0; if( !GetWindowThreadProcessId( hwnd, &dwProcessID ) ) return TRUE; HANDLE hProcess = OpenProcess( PROCESS_VM_READ|PROCESS_QUERY_INFORMATION, FALSE, dwProcessID ); if( NULL == hProcess ) return TRUE;
HMODULE rghModules[64]; DWORD cbRet1 = 0; if( EnumProcessModules( hProcess, rghModules, sizeof(rghModules), &cbRet1 ) ) { for( UINT j = 0; j < (min( cbRet1, sizeof(rghModules) ))/sizeof(DWORD); j++ ) { TCHAR szModule[MAX_PATH]; if( GetModuleFileNameEx( hProcess, rghModules[j], szModule, ARRAYSIZE(szModule) ) ) { CharLower( szModule ); TCHAR szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szApp[_MAX_FNAME], szExt[_MAX_EXT]; _tsplitpath(szModule, szDrive, szDir, szApp, szExt);
if( 0 == lstrcmp( szExt, TEXT(".exe") ) ) { if( SendDlgItemMessage( hwndPage, IDC_TARGET, CB_FINDSTRINGEXACT, -1, (LPARAM)szApp ) == CB_ERR ) { INT_PTR iSel = (INT_PTR)SendDlgItemMessage( hwndPage, IDC_TARGET, CB_ADDSTRING, -1, (LPARAM)szApp ); if( 0 == lstrcmpi( szApp, g_options.szTargetApp ) ) SendDlgItemMessage( hwndPage, IDC_TARGET, CB_SETCURSEL, iSel, 0L ); } if( SendDlgItemMessage( hwndPage, IDC_UNTARGET, CB_FINDSTRINGEXACT, -1, (LPARAM)szApp ) == CB_ERR ) { INT_PTR iSel = (INT_PTR)SendDlgItemMessage( hwndPage, IDC_UNTARGET, CB_ADDSTRING, -1, (LPARAM)szApp ); if( 0 == lstrcmpi( szApp, g_options.szTargetApp ) ) SendDlgItemMessage( hwndPage, IDC_UNTARGET, CB_SETCURSEL, iSel, 0L ); } }
} } } CloseHandle( hProcess ); return TRUE; }
//---------------------------------------------------------------------------
void GeneralPage_AddProcessNamesToCombos( HWND hwndPage ) { //---- this will enum all windows (top level & all child levels) ----
EnumChildWindows( GetDesktopWindow(), GeneralPage_AddProccessNamesCB, (LPARAM)hwndPage ); if( *g_options.szTargetApp ) { if( CB_ERR == SendDlgItemMessage( hwndPage, IDC_TARGET, CB_GETCURSEL, 0, 0L ) ) { INT_PTR iSel = SendDlgItemMessage( hwndPage, IDC_TARGET, CB_ADDSTRING, -1, (LPARAM)g_options.szTargetApp ); SendDlgItemMessage( hwndPage, IDC_TARGET, CB_SETCURSEL, iSel, 0L ); }
if( CB_ERR == SendDlgItemMessage( hwndPage, IDC_UNTARGET, CB_GETCURSEL, 0, 0L ) ) { INT_PTR iSel = SendDlgItemMessage( hwndPage, IDC_UNTARGET, CB_ADDSTRING, -1, (LPARAM)g_options.szTargetApp ); SendDlgItemMessage( hwndPage, IDC_UNTARGET, CB_SETCURSEL, iSel, 0L ); } } }
|