標籤:
在用寫一個案頭軟體的過程中,用到webbrowser實現介面。這時有一個禁止webbrowser通過f5按鍵進行重新整理的要求。本著邊做邊學的原則,本菜查了一下百度,原來這麼簡單,代碼如下:
this.webBrowser1.WebBrowserShortcutsEnabled = false;
哈哈,成功了。繼續完成接下來的任務,寫著寫著,發現不對,很不對勁。剛剛那一句代碼,不僅把F5這個快速鍵禁用了,而且連ctrl+c、ctrl+v這些快速鍵一併禁止了。這該如何是好。這時本菜第一反映:鍵盤鉤子。可是轉念一想,用了C#還要動用鉤子,明顯是姿勢不對啊。嗯,不到最後萬不得已,絕不動用鉤子寶典。接下來,本菜已在不歸路上越走越遠。
走遍了大街,串遍了小巷,翻遍了百度,查遍了google,最後連msdn和open stack都查了個遍。看到各國網友的答案是:很難做到,幾乎不可能。(看到坑爹隊友不局限在我們身旁)。正當本菜要拿起鉤子寶典之時,抱著最後一絲掙紮的希望,翻了一翻webbrowser的函數列表,翻著翻著,頓時眼前一亮,鏘鏘鏘鏘:
public class WebBroswer : System.Windows.Forms.WebBrowser{ public WebBroswer() : base() { } public override bool PreProcessMessage(ref Message msg) { switch (msg.Msg) { case ApiCaller.WM_KEYDOWN: int vk = Ptr.PtrToInt(msg.WParam); if (vk == 116) return false; //鉤掉f5 break; } return base.PreProcessMessage(ref msg); }}
本次大法的主要思路是,重載WebBrowser,處理掉F5的鍵盤訊息。(上面代碼中的ApiCaller類是一個自訂類,只要判斷WM_KEYDOWN即可)
其實在此之前,本菜在WndProc和DefWndProc這兩個函數之間折騰很久。一直沒轉過彎來,WebBrowser的鍵盤訊息WM_KEYDOWN、WM_KEYUP壓根兒不會經過這兩個函數。因為在這兩個函數之前,就分發到內部子控制項了。好在及時醒悟,這次完全是吃了沒文化的虧,希望這些經曆小結,能給大家帶來協助。如果這個知識點對您有用,請繼續傳播下去。
C# WebBrowser禁止F5重新整理