我正在使用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完成了这项工作吗?
答案 0 :(得分:0)
如果建议的副本不起作用,则可以使用FindWindow
功能。
请注意,控制面板可能有几个名称,具体取决于其视图,因此您必须检查不同的选项。
HWND cp = FindWindow(0, "Control Panel");
if(!cp){
cp = FindWindow(0, "All Control Panel Items");
}
if(!cp){
// Control Panel not open
}
请注意,如果您打开名为“控制面板”的文件夹,则此方法可能会失败。
答案 1 :(得分:0)
最后使用所有窗口的枚举找到了正确的方法:
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-&gt; getWndName()返回一个取决于你的国家或地区的字符串。