以编程方式更改 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 一个依赖于的字符串您所在的国家或地区。