2011-08-03 7 views
0

WebブラウザでF5を無効にしたいとします。このために私はApplication.OnMessageを使うことができます。 しかし、私はWBに焦点を当てたときにこのルールを強制したいと思います。Delphi:WebブラウザがフォーカスされているかWebbrowsersが実際に処理されていますか?

しかし、すべての種類が失敗しています

1.)WBのHWNDを取得する - Msg.hwnd

2を比較すること)WBの合焦状態を取得し、またはそれがあるときに表示フォーカスされた

この問題のすべてのアイデアありがとう!

DD

+0

AアプリケーションでTWebBrowser(Internet Explorerなど)や外部ブラウザ? –

+0

私のアプリケーションで。 – durumdara

+0

F5ウィンドウのメッセージを傍受する必要はありません。「ブラウザにフォーカスがあるときはF5を無効にする」必要はありません。 Windowsではキーボードを制御しません。あなたは傍受して「処理済みとしてマークする」というメッセージを受け取ります。これは同じように機能しますが、あなたが何をしているのかを理解すれば、それをよりよく理解することができます。 F5をグローバルにフックする必要はありませんが、実際には問題があります。 –

答えて

1

私はあなたの本当の目標は、(通常はF5キーを押して発行)現在表示されているWebページのリロードまたはリフレッシュを無効にされているとします。さらに、組み込みのInternet Explorerについて話しているとすれば、TEmbeddedWBbsalsaから使用することをお勧めします。 OnRefreshというイベントがあり、Cancel:= Trueに設定してリフレッシュをキャンセルできます。したがって、手動でキーをキャッチする必要はありません。

TEmbeddedWBを選択する選択肢がなく、TWebBrowserがついている場合は、OnRefreshの実装を見てもわかります。

+1

+1。これは知的なアプローチです。 –

+0

それは非常に良いコンポーネントの外に見える、それはIE9のために更新されていないようだ...彼のフォーラムを見て、それを自分でテストする前に。 – EMBarbosa

-2

私が考えているのは、hwndのClassNameを確認して、Application.Onmessageの内容を確認することです。

これは、「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

@ウォーレン - それは長い時間の現象です。 –

+0

例を使って答えを拡張しました。 – durumdara

関連する問題