2014-02-27 62 views
1

我知道如何檢測已經運行的瀏覽器。現在,我想知道如何檢測當前正在執行的瀏覽器,並且我也想知道如何檢測c#winforms中某些瀏覽器是否打開了新的選項卡/窗口。檢測當前正在執行的瀏覽器和標籤頁/窗口

e-g

如果用戶點擊x瀏覽器;我的程序應該告訴x瀏覽器正在運行。現在,如果用戶在該瀏覽器中打開一個新標籤,那麼我的程序應該告訴「在X瀏覽器中打開標籤」。

我做了研究,但找不到確切! 感謝

+0

如果你想有,比方說,當前前臺窗口的工作,並希望以檢測用戶界面的變化,那麼你或許應該在下降的[UI自動化(http://msdn.microsoft .com/en-us/library/ms747327(v = vs.110).aspx)路由。 –

回答

2

有兩種方法可以做到這一點,他們都使用P/Invoke因爲有這樣的事情沒有託管代碼:

  1. 投票:
    你的程序應該叫GetForegroundWindow定期然後GetWindowText和測試,如果開放的焦點窗口是一個瀏覽器或不是,這也是活動標籤標題(頁面標題)。
  2. 事件偵聽:
    您應該在系統級事件上檢測到SetWinEventHook:EVENT_SYSTEM_FOREGROUND以檢測新的聚焦窗口。然後,您可以在每個瀏覽器窗口的對象級別EVENT_OBJECT_NAMECHANGE或EVENT_OBJECT_CREATE上設置SetWinEventHook,以檢測選項卡更改。

提示:

  • 調用SetWinEventHook必須有消息循環,以便接收事件的客戶端線程。
  • 對於超出上下文的事件,事件在調用SetWinEventHook的同一線程上傳遞。
  • 當您使用SetWinEventHook在託管代碼中設置回調時,[您應該明確告訴]垃圾收集器不要移動回調。
  • 雖然掛鉤函數處理一個事件,但可能會觸發附加事件,這可能會導致掛鉤函數在原始事件處理完成之前重新進入。鉤函數中的重入問題在於,事件不按順序完成,除非鉤函數處理這種情況。有關更多信息,請參閱Guarding Against Reentrancy
相關問題