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