將后台窗口激活到前台的方法(使用AttachThreadInput和SetForegroundWindow兩個API)


下面這種方法是我見到的最理想的,還有一些其他的方法,像通過SetWindowsPos這個API設置窗口的Z-oder到最頂層,再設置回去。還有通過把當前窗口設置到底層,然后激活目標窗口等等方法。

  1. HWND hCurWnd = NULL;   
  2. DWORD dwMyID;   
  3. DWORD   dwCurID;   
  4. hCurWnd = ::GetForegroundWindow();   
  5. dwMyID = ::GetCurrentThreadId();   
  6. dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);   
  7. ::AttachThreadInput(dwCurID, dwMyID, TRUE);   
  8. ::SetForegroundWindow(m_hWnd);   
  9. ::AttachThreadInput(dwCurID, dwMyID, FALSE);

關鍵API的使用::AttachThreadInput,這個API是連接兩個線程的,使其共享輸入焦點,鍵盤狀態等等。

 

下面這段COPY自百度百科:

通常,系統內的每個線程都有自己的輸入隊列。本函數(既“連接線程輸入函數”)允許線程和進程共享輸入隊列。連接了線程后,輸入焦點、窗口激活、鼠標捕獲、鍵盤狀態以及輸入隊列狀態都會進入共享狀態 返回值 Long,非零表示成功,零表示失敗,會設置會GetLastError 參數表 參數 類型及說明 idAttach Long,欲連接線程的標識符(ID) idAttachTo Long,與idAttach線程連接的另一個線程的標識符 fAttach Long,TRUE(非零)連接,FALSE撤消連接。

調用這個函數時,會重設鍵盤狀態。參數類型前的IN表示這個參數是輸入參數,可以當它沒有。

 

http://blog.csdn.net/magictong/article/details/3595408

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM