[英]How to programatically change a project's product version as displayed in Control Panel
[英]change size and/or position of Windows Control Panel programatically
我正在使用ShellExecute()以編程方式打開Windows控制面板:
TCHAR strParameter[MAX_PATH];
wsprintf(strParameter, _T("shell32.dll, Control_RunDLL \"%ws\""), strApp);
HINSTANCE result = ShellExecute(NULL, _T("open"), _T("rundll32.exe"), strParameter, NULL, SW_SHOWNORMAL) ;
現在,我想通過更改其大小或位置來操作“控制面板”窗口。
我知道一旦你得到一個窗口句柄,你可以使用SetWindowPos() 。
問題是,在控制面板的情況下,我找不到任何方法來獲取該句柄。 我無法根據Window Title或Window Class進行枚舉,因為我既不知道也不知道。
有人已經使用Windows 7完成了這項工作嗎?
如果建議的副本不起作用,則可以使用FindWindow
函數。
請注意,控制面板可能有幾個名稱,具體取決於它的視圖,因此您必須檢查不同的選項。
HWND cp = FindWindow(0, "Control Panel");
if(!cp){
cp = FindWindow(0, "All Control Panel Items");
}
if(!cp){
// Control Panel not open
}
請注意,如果您打開一個名為“控制面板”的文件夾,則此方法可能會失敗。
最后使用所有窗口的枚舉找到了正確的方法:
BOOL CALLBACK FindWindowsByTitle(HWND hwnd,LPARAM lParam)
{
LaunchApplication * thisClass = reinterpret_cast<LaunchApplication *>(lParam);
TCHAR windowName[MAX_PATH] = {0};
int windowNameLength = 0;
LRESULT result = SendMessage(hwnd, WM_GETTEXT, MAX_PATH, LPARAM(windowName));
windowNameLength = _tcslen(windowName);
if(windowNameLength)
{
if (StrStrI(windowName, (TCHAR *)thisClass->getWndName()))
{
// found window name containing BT value
return FALSE;
}
}
return TRUE;
}
然后主要問題是windows標題的本地化:如果你需要讓代碼適用於控制面板,你需要thisClass-> getWndName()返回一個取決於你的國家或地區的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.