0

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

過去に WinForms WebBrowser コントロールを使用し、COM を介してイベントにシンクすることができましたが、これらの戦術は WPF バージョンでは機能しないようです。私の開発パートナーは、WinForms オプションを混在させるのではなく、純粋な WPF アプリケーションを開発することに固執しています。

IWebBrowserEvets2WPF の COM インターフェイスに成功した人はいWebBrowserますか? を にキャストできましたWebBrowser.Documentが、IWebBrowser必要な場所に到達できませんでした。

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

前もって感謝します、
ジェロッド

4

1 に答える 1

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());
    }
}

幸運を!

于 2012-04-05T21:25:22.690 に答える