文章标题 原创 翻译 转载 文章内容 判断窗口是否置顶 ``` bool isWndTopMost(HWND hwnd) { return GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST; } ``` 设置和取消置顶 ``` void showWndTopMost(HWND hwnd){ RECT rect; GetWindowRect(hwnd, &rect); SetWindowPos(hwnd, HWND_TOPMOST, rect.left, rect.top, abs(rect.right - rect.left), abs(rect.bottom - rect.top), SWP_SHOWWINDOW); } void cancelTopMost(HWND hwnd){ RECT rect; GetWindowRect(hwnd, &rect); SetWindowPos(hwnd, HWND_NOTOPMOST, rect.left, rect.top, abs(rect.right - rect.left), abs(rect.bottom - rect.top), SWP_SHOWWINDOW); } ``` 设置窗口前景 ``` void showWndTop(HWND hWnd){ if (!::IsWindow(hWnd)) return; if (!::SetForegroundWindow(hWnd)) { WinParameter winParameter; ::SetForegroundWindow(hWnd) } } ``` > WinParameter是为了解决某些特殊情况下设置失败的问题 ``` #ifndef WINPARAMETER_H #define WINPARAMETER_H class WinParameter { public: WinParameter(); ~WinParameter(); private: unsigned long m_lockTimeOut; }; #endif // WINPARAMETER_H /////////////////////////////////////////////////////// #include "winparameter.h" #include <windows.h> WinParameter::WinParameter() { m_lockTimeOut = 0; HWND hCurrWnd = ::GetForegroundWindow(); unsigned long dwThisTID = ::GetCurrentThreadId(); unsigned long dwCurrTID = ::GetWindowThreadProcessId(hCurrWnd,0); //we need to bypass some limitations from Microsoft :) if(dwThisTID != dwCurrTID) { ::AttachThreadInput(dwThisTID, dwCurrTID, TRUE); ::SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,&m_lockTimeOut,0); ::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); ::AllowSetForegroundWindow(ASFW_ANY); } } WinParameter::~WinParameter() { HWND hCurrWnd = ::GetForegroundWindow(); unsigned long dwThisTID = ::GetCurrentThreadId(); unsigned long dwCurrTID = ::GetWindowThreadProcessId(hCurrWnd,0); if(dwThisTID != dwCurrTID) { ::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,(PVOID)m_lockTimeOut,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); ::AttachThreadInput(dwThisTID, dwCurrTID, FALSE); } } ``` 文章类别 Python Mobile Android Java Shell Life Database Bug Windows IOS Tools Boost Node.js Mac Product Tips C/C++ Golang Javascript React Qt MQ MongoDB Design Web Linux LLM ChatGPT RAG AI 提交