2011-08-03 27 views
0

我想在Web瀏覽器上禁用F5。爲此,我可以使用Application.OnMessage。 但是我想強制這個規則,當世界銀行集中。德爾福:是webbrowser專注/或得到webbrowsers真正處理

但每樣都失敗:

1)獲取WB的HWND - 比較Msg.hwnd

2)獲取WB的聚焦狀態,或者查看時,它是專注

感謝您對此問題的每一個想法!

DD

+0

一個TWebBrowser器(Internet Explorer)在您的應用程序或外部瀏覽器? –

+0

在我的應用程序中。 – durumdara

+0

您不需要在瀏覽器關注時禁用F5,而是需要攔截F5窗口消息。你不控制Windows中的鍵盤。您會收到郵件,您可以攔截郵件,然後「標記爲已處理」。這也是一樣的,但如果你明白你在做什麼,你就能更好地理解它。你不需要全局掛鉤F5,事實上這樣做是有問題的。 –

回答

1

我假設你真正的目標是禁用當前顯示的網頁(通常按F5發行)的重載或刷新。進一步假設你在談論一個嵌入式Internet Explorer,我會建議使用TEmbeddedWBbsalsa。它有一個事件OnRefresh它允許您通過設置Cancel:= True來取消刷新。所以不需要手動捕捉密鑰。

如果你沒有選擇的選擇TEmbeddedWB和被卡住TWebBrowser那麼來看看OnRefresh實現可能仍然是鼓舞人心的。

+1

+1。這是聰明的做法。 –

+0

旁邊它看起來是一個非常好的組件,似乎它沒有被更新爲IE9 ...看看他的論壇,並自己測試之前。 – EMBarbosa

-2

因爲我認爲最好的方法是檢查我在Application.Onmessage中得到的hwnd的ClassName。

這就像「禁用上下文菜單」基於「Internet_Explorer_Server」類名。

參見例如:

procedure TDDGoogleMapsObject.ApplicationEvents1Message(var Msg: tagMSG; 
    var Handled: Boolean); 
var 
    szClassName: array[0..255] of Char; 
const 
    ie_name = 'Internet Explorer_Server'; 
begin 
    if Msg.message = WM_KEYDOWN then 
     if Msg.wParam = VK_F5 then begin 
      GetClassName(Msg.HWND, szClassName, SizeOf(szClassName)); 
      if lstrcmp(@szClassName[0], @ie_name[1]) = 0 
       then Handled := True; 
      if not Handled 
       then beep; 
     end; 
end; 

這可以檢查VK_F5密鑰的源。如果它來自IE窗口,那麼我們禁用它。 我們允許它推另一個案例......

感謝您的幫助: DD

+0

-1。不是一個真正的答案。更多的聊天。 –

+0

@Warren - 這是一個很長的現象 – 2011-08-03 14:43:24

+0

我用一個例子擴展了答案。 – durumdara