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

问题描述 投票:0回答:4

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

c++ c windows winapi always-on-top
4个回答
10
投票
SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

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


6
投票

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

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


4
投票

如果您想将应用程序窗口从后面(或最小化)移到前面,BringWindowToTop() 不起作用。下面的代码可靠地完成了这个技巧:

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

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 );
}
© www.soinside.com 2019 - 2024. All rights reserved.