C / C ++ / C#强制窗口位于顶部

时间:2009-12-09 14:28:07

标签: c++ c windows winapi always-on-top

有没有办法强制 另一个 窗口位于顶部? 应用程序的窗口,但另一个已经在系统上运行。 (Windows,C / C ++ / C#)

4 个答案:

答案 0 :(得分:10)

SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

BringWindowToTop将窗口移动到Z顺序的顶部(现在),但使其成为最顶层的窗口。

答案 1 :(得分:6)

您可以使用Win32 API BringWindowToTop。这需要一个HWND。

您还可以使用Win32 API SetWindowPos,它还允许您执行使窗口成为顶级窗口的操作。

答案 2 :(得分:3)

如果要将应用程序窗口从后面(或最小化)带到前面,

BringWindowToTop()无效。以下代码使这个技巧可靠:

ShowWindow(hwnd, SW_MINIMIZE);
ShowWindow(hwnd, SW_RESTORE);

答案 3 :(得分:0)

BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
     wchar_t buff[255];

    if (IsWindowVisible(hWnd)) {
        GetWindowText(hWnd, (LPWSTR) buff, 254);
        //wprintf(L"%s\n", buff);
        wstring ws = buff;
        if (ws.find(L"Firefox") != ws.npos)
        {
            ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
        }
    }
    return TRUE;
}

int main(){
    BOOL enumeratingWindowsSucceeded = ::EnumWindows( EnumWindowsProc, NULL );
}