如何實現IE9雙擊關閉當前標簽頁(Tab選項卡頁面)的功能,實現這個功能的基本原理如下:
1、建立全局鼠標鉤子,獲取雙擊選項卡時候的消息,觸發選項卡被雙擊的事件。
2、發送Ctrl+W鍵盤消息,觸發快捷鍵功能關閉當前選項卡頁面。
這里有幾個問題需要解決:
如何獲取鼠標雙擊事件:
通過spy++檢測后發現,發現Tab欄是一個類型為DirectUIHWND的類,它是一個TabControl,本身并不支持鼠標雙擊消息,因此,需要自己根據MouseUP消息判斷是否為雙擊消息(通過兩次MouseUp的時間間隔來判斷)。
如何判斷是否雙擊的標簽頁:
由于創建的是全局鉤子,所有的鼠標消息都會被截取到,因此這里要進行過濾。具體的條件為:鼠標觸發點的控件類為DirectUIHWND,并且其進程為IE。
如何關閉當前標簽頁:
這個比較簡單,直接調用keybd_event發送Ctrl+W即可。
實現這個功能并不困難,但我想把它集成到BHO中時,卻遇到了一個問題——當IE開啟了保護模式時,是無法收到全局鼠標鉤子的消息的。
解決這個問題的方法有兩種:
關閉保護模式
新寫一個Hook程序實現鼠標消息的截取,然后在BHO中啟動該進程。
方法1的方法降低了瀏覽器的安全性,自然不可取。方法2雖然可以解決這個問題,但是卻多了一個附加進程,雖然可以把它隱藏起來,用戶感知不到,但始終不大爽。權衡再三,最終還是選擇了方法2。(我對windows編程不熟,如果有更好的方法請告知)
使用環境:Win 7+IE9+.net 4.0,其它環境無法執行。Win 7用戶需安裝.net 4.0后才能啟動該程序。
使用方法:
打開IE9之后在手動啟動該程序即可,啟動后它便自動隱藏在后臺(通過進程管理器可以查看到該程序,就不要不停的點了),然后就有了雙擊IE9標簽頁按鈕關閉當前選項卡頁面的功能了。當IE9關閉后,該程序也會自動關閉。
再介紹一個快速關閉選項卡的方法:在選項卡(標簽)中點擊鼠標中間的滾輪鍵,便可以關閉選項卡。小編感覺這個方法要比雙擊關閉的方法更快速吧。
新聞熱點
疑難解答