【问题标题】:C/C++/C# Force window to be on topC/C++/C# 强制窗口位于顶部
【发布时间】:2010-12-24 20:39:04
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:
    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 );
    }
    

    【讨论】:

      【解决方案2】:

      如果您想将应用程序窗口从后面(或最小化)带到前面,则BringWindowToTop() 无效。以下代码使这个技巧可靠:

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

      【讨论】:

      • win XP下很慢。
      • 像魅力一样工作!
      【解决方案3】:
      SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
      

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

      【讨论】:

      • 你能举个例子吗?
      • @Levo:只需将上面sn-p中的that_window_handle替换为您想要的窗口句柄即可。
      【解决方案4】:

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

      您还可以使用 Win32 API SetWindowPos,它还允许您将窗口设为顶级窗口。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多