2013-07-04 72 views
1

當用戶按下網頁上的按鈕時,我有一個由瀏覽器插件調用的dll。這個dll包含創建一個窗口(在一個新的UI線程中)的本地代碼,我需要這個窗口來獲得鍵盤上的焦點來創建它(用戶期望的行爲)。我不是試圖在用戶的臉上推出一個不想要的彈出窗口。我試圖使用SetForegroundWindow(),SetFocus(),BringWindowToTop(),AttachThreadInput(),最小化/恢復窗口,你的名字,我試過了。我所取得的最大進展是讓新窗口在任務欄中閃爍。WinApi:在新線程中給予鍵盤焦點到新窗口

我需要能夠做到這一點的原因是因爲我需要考慮鍵盤輔助功能,並允許用戶使用我的新窗口而不必使用alt-tab鍵。

有沒有人有關於如何獲得鍵盤焦點的任何建議?

+0

可能與IE作爲低完整性進程運行有關。 –

回答

3

如果窗口閃爍任務欄上,然後你的代碼不符合在SetForegroundWindow() documentation列出的要求:

進程可以設置前臺窗口只有當以下 條件之一是:

該過程是前臺過程。

該過程由前臺進程啓動。

該進程收到最後一個輸入事件。

沒有前臺進程。

正在調試前臺進程。

前景未鎖定(請參閱LockSetForegroundWindow)。

前臺鎖定超時已過期(請參閱SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。

沒有菜單處於活動狀態。

當用戶使用另一個窗口時,應用程序無法強制窗口前景 。相反,Windows 會閃爍窗口的任務欄按鈕以通知用戶。