我已经运行了很多年的代码,一直回??到Windows95。双击应用程序系统任务栏图标时,我总是使用Win32 API函数(如BringWindowToTop和SetForegroundWindow)将应用程序窗口置于前台。这一切都在Windows 7上按预期停止了,在Windows 7上,我的输入窗口将最终位于其他窗口之后,并且窗口图标将在状态栏上闪烁。我想到的“解决方法”是这样。似乎可以在所有Windows版本上使用。
//-- show the window as you normally would, and bring window to foreground.
// for example;
::ShowWindow(hWnd,SW_SHOW);
::BringWindowToTop(hWnd);
::SetForegroundWindow(hWnd);
//-- on Windows 7, this workaround brings window to top
::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);