【发布时间】:2010-12-24 20:39:04
【问题描述】:
有没有办法强制 另一个 窗口位于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows、C/C++/C#)
【问题讨论】:
标签: c++ c windows winapi always-on-top
有没有办法强制 另一个 窗口位于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows、C/C++/C#)
【问题讨论】:
标签: c++ c windows winapi always-on-top
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 );
}
【讨论】:
如果您想将应用程序窗口从后面(或最小化)带到前面,则BringWindowToTop() 无效。以下代码使这个技巧可靠:
ShowWindow(hwnd, SW_MINIMIZE);
ShowWindow(hwnd, SW_RESTORE);
【讨论】:
SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
BringWindowToTop 将窗口移动到 Z 顺序的顶部(目前),但 不 使其成为最顶部的窗口。
【讨论】:
that_window_handle替换为您想要的窗口句柄即可。
您可以使用 Win32 API BringWindowToTop。它需要一个 HWND。
您还可以使用 Win32 API SetWindowPos,它还允许您将窗口设为顶级窗口。
【讨论】: