2012-04-05 25 views
0

私はサードパーティのサービスによって返されるHTMLを表示する必要があるプロジェクトを開発しています。私は現在、この出力を表示するためにWPF WebBrowserを使用しています。しかし、これは私の顧客の目に潜むセキュリティ上の問題を引き起こします。フォーカスがこのコントロールに設定されている場合、あなたははCtrl +Nを使用してCTRL +OまたはオープンInternet Explorerを使用して、任意のWebページを開くことができます。私のアプリケーションは、キオスクのような環境(ターミナルサービス)を対象としています。WebBrowser COMイベントを書き込む際の問題

以前はWinForms WebBrowserコントロールを使用していましたが、COMを介してイベントにシンクできましたが、これらの方法はWPFバージョンでは動作しません。私の開発パートナーは、WinFormsオプションで混合するのではなく、純粋なWPFアプリケーションを開発することを断言しています。

誰もWPF WebBrowserIWebBrowserEvets2 COMインターフェイスに成功しましたか?私はWebBrowser.DocumentIWebBrowserにキャストすることができましたが、私が必要とするところには達していません。

私のクライアントの "セキュリティ"問題を引き起こす可能性のある新しいウィンドウやその他のイベントの作成をユーザーが止めることができるように、イベントに参加してください。または、HTMLと基本的なナビゲーションのレンダリングを行うための優れたコントロールがありますか?事前に

おかげで、
Jerod

+0

これは不可能ではなく、WPFではちょっと醜いです。 Googleクエリで「wpf newwindow2」と入力し、最初のヒットを取得します。 –

答えて

0

あなたはここで、Windowsのフックを使用しようとすることができます。ブラウザウィンドウを見つけ、適切なキーボードフックをインストールします。この外観はあなたのための助けになるはずです:

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] 
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, IntPtr windowTitle); 
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
private static extern IntPtr SetWindowsHookEx(Int32 idHook, HookProc lpfn, IntPtr hInstance, Int32 threadId); 

そして、ここではそれらを使用する方法のサンプルですが、あなたのニーズに応じてKeyboardHookProcedure実装する必要があります。

private IntPtr FindExplorerWindow() 
{ 
    IntPtr wnd = Browser.Handle; 
    if (wnd != IntPtr.Zero) 
    { 
     wnd = FindWindowEx(wnd, IntPtr.Zero, "Shell DocObject View", IntPtr.Zero); 
     if (wnd != IntPtr.Zero) 
     { 
      wnd = FindWindowEx(wnd, IntPtr.Zero, "Internet Explorer_Server", IntPtr.Zero); 
      return wnd; 
     } 
    } 
    return IntPtr.Zero; 
} 

private void InstallHook() 
{ 
    if (_hHook.ToInt32() > 0) return; 

    IntPtr wnd = FindExplorerWindow(); 
    if (wnd != IntPtr.Zero) 
    { 
     if (_hookProc == null) 
     { 
      _hookProc = new HookProc(KeyboardHookProcedure); 
     } 
     _hHook = SetWindowsHookEx(WH_KEYBOARD, _hookProc, (IntPtr)0, GetCurrentThreadId()); 
    } 
} 

幸運!