簡體   English   中英

以編程方式更改Windows控制面板的大小和/或位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM