下面這種方法是我見到的最理想的,還有一些其他的方法,像通過SetWindowsPos這個(gè)API設(shè)置窗口的Z-oder到最頂層,再設(shè)置回去。還有通過把當(dāng)前窗口設(shè)置到底層,然后激活目標(biāo)窗口等等方法。
HWND hCurWnd = NULL;
DWORD dwMyID;
DWORD dwCurID;
hCurWnd = ::GetForegroundWindow();
dwMyID = ::GetCurrentThreadId();
dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
::AttachThreadInput(dwCurID, dwMyID, TRUE);
::SetForegroundWindow(m_hWnd);
::AttachThreadInput(dwCurID, dwMyID, FALSE);
關(guān)鍵API的使用::AttachThreadInput,這個(gè)API是連接兩個(gè)線程的,使其共享輸入焦點(diǎn),鍵盤狀態(tài)等等。
下面這段COPY自百度百科:
通常,系統(tǒng)內(nèi)的每個(gè)線程都有自己的輸入隊(duì)列。本函數(shù)(既“連接線程輸入函數(shù)”)允許線程和進(jìn)程共享輸入隊(duì)列。連接了線程后,輸入焦點(diǎn)、窗口激活、鼠標(biāo)捕獲、鍵盤狀態(tài)以及輸入隊(duì)列狀態(tài)都會(huì)進(jìn)入共享狀態(tài) 返回值 Long,非零表示成功,零表示失敗,會(huì)設(shè)置會(huì)GetLastError 參數(shù)表 參數(shù) 類型及說明 idAttach Long,欲連接線程的標(biāo)識(shí)符(ID) idAttachTo Long,與idAttach線程連接的另一個(gè)線程的標(biāo)識(shí)符 fAttach Long,TRUE(非零)連接,F(xiàn)ALSE撤消連接。
調(diào)用這個(gè)函數(shù)時(shí),會(huì)重設(shè)鍵盤狀態(tài)。參數(shù)類型前的IN表示這個(gè)參數(shù)是輸入?yún)?shù),可以當(dāng)它沒有。
HWND hCurWnd = NULL;
DWORD dwMyID;
DWORD dwCurID;
hCurWnd = ::GetForegroundWindow();
dwMyID = ::GetCurrentThreadId();
dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
::AttachThreadInput(dwCurID, dwMyID, TRUE);
::SetForegroundWindow(m_hWnd);
::AttachThreadInput(dwCurID, dwMyID, FALSE);
關(guān)鍵API的使用::AttachThreadInput,這個(gè)API是連接兩個(gè)線程的,使其共享輸入焦點(diǎn),鍵盤狀態(tài)等等。
下面這段COPY自百度百科:
通常,系統(tǒng)內(nèi)的每個(gè)線程都有自己的輸入隊(duì)列。本函數(shù)(既“連接線程輸入函數(shù)”)允許線程和進(jìn)程共享輸入隊(duì)列。連接了線程后,輸入焦點(diǎn)、窗口激活、鼠標(biāo)捕獲、鍵盤狀態(tài)以及輸入隊(duì)列狀態(tài)都會(huì)進(jìn)入共享狀態(tài) 返回值 Long,非零表示成功,零表示失敗,會(huì)設(shè)置會(huì)GetLastError 參數(shù)表 參數(shù) 類型及說明 idAttach Long,欲連接線程的標(biāo)識(shí)符(ID) idAttachTo Long,與idAttach線程連接的另一個(gè)線程的標(biāo)識(shí)符 fAttach Long,TRUE(非零)連接,F(xiàn)ALSE撤消連接。
調(diào)用這個(gè)函數(shù)時(shí),會(huì)重設(shè)鍵盤狀態(tài)。參數(shù)類型前的IN表示這個(gè)參數(shù)是輸入?yún)?shù),可以當(dāng)它沒有。