我寫了一個匹配C++工具的圖像,它是一個通知區域工具(不可見窗口)。它獲得了另一個窗口的句柄並將其聚焦,然後完成了它保存的圖像匹配。現在這個工具正在完善,但是這個程序的製作者(不是我寫的)我把重點放在了更新上,這個更新改變了他們的程序。程序更新後SetForgroundWindow()失敗
因此,我似乎無法設置程序的重點(把它帶到所有窗口的頂部)。我試圖以管理員身份運行,但沒有運氣。我可以看到任務欄中的圖標閃爍橙色表示其活動,但窗口不會到達前景。
這是我爲我的工具無形HWND:
hwnd = CreateWindowEx (0, className,
TEXT(""),
WS_OVERLAPPEDWINDOW,
0, 0,
0, 0,
NULL, NULL,
hInstance, NULL);
這是我在這做的圖像匹配函數的頂部代碼:
ShowWindow(handle, SW_SHOWDEFAULT); //maximize handle
SetForegroundWindow(handle); //bring to foreground
我用SW_SHOWDEFAULT相SW_SHOW與showWindow,因爲這固定的問題,我曾經在哪裏,如果工具被最小化,它將無法匹配的圖像,因爲窗口被隱藏。
看起來像SetForegroundWindow()返回0(失敗),現在它工作之前。我沒有找到可以工作的在線解決方案。
只有工作(那種)事情是這樣的:
ShowWindow(handle, SW_MINIMIZE);
ShowWindow(handle, SW_SHOWDEFAULT);
這似乎將窗口最小化,並把它帶回來了,導致其集中但這不是一個解決方案作爲圖像匹配過程中應只要用戶想要,就繼續下去。
任何幫助表示讚賞!
什麼價值由歸國'GetLastError函數()''時失敗SetForegroundWindow'?你有沒有讀過http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539.aspx中的'Remarks'? – manuell
我似乎無法從GetLastError()獲取任何內容,但SetForegroundWindow的返回肯定是0(失敗)。我已經看過評論,不知道我是否會失敗。 'Windows閃爍任務欄'是我所暗示的我不符合條件。我只是試圖在通知區域中雙擊我的圖標,而該工具嘗試在循環中設置前景窗口並且它工作,它設法設置它(因爲我發送了最後一個事件?)。有任何想法嗎? – Mohammad
此頁面上的Alt-Tab方法似乎適用於我:http://www.codeproject.com/Tips/76427/How-to-bring-window-to-top-with-SetForegroundWindo 什麼是使用這種'黑客'的含義。如果我找不到其他選擇,我很想使用它。 – Mohammad