以编程方式更改 Windows 控制面板的大小 and/or 位置
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) ;
现在我想通过改变大小或位置来操纵控制面板window。
我知道一旦你得到一个 window 句柄你就可以使用 SetWindowPos().
问题是在控制面板的情况下,我找不到任何方法来获取该句柄。我无法根据 Window 标题或 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
}
请注意,如果您打开了一个名为 "Control Panel" 的文件夹,此方法可能会失败。
终于找到了使用所有枚举的正确方法 windows:
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() 到 return 一个依赖于的字符串您所在的国家或地区。
我正在使用 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) ;
现在我想通过改变大小或位置来操纵控制面板window。
我知道一旦你得到一个 window 句柄你就可以使用 SetWindowPos().
问题是在控制面板的情况下,我找不到任何方法来获取该句柄。我无法根据 Window 标题或 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
}
请注意,如果您打开了一个名为 "Control Panel" 的文件夹,此方法可能会失败。
终于找到了使用所有枚举的正确方法 windows:
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() 到 return 一个依赖于的字符串您所在的国家或地区。