4

CtrlWPF XBAPアプリケーションでキーボードショートカット(「開く」の+など)をサポートしたいのですがO、ブラウザーの組み込みのキーボードショートカットを無効にして、自分のものに置き換えるにはどうすればよいですか?

4

3 に答える 3

1

ブラウザに組み込まれているキーの処理を無効にすることはできません。ブラウザ自体のショートカットキーを上書きするのは、ブラウザコンテンツとしてのあなたの場所ではありません。

于 2008-09-24T15:48:29.493 に答える
1

どうしてもやりたい場合は、Windows フックを追加して、関心のあるキーストロークをインターセプトしてみてください。

IEヘルプが開かないようにするために、それをしなければなりませんでした(神が私の魂を憐れんでくださいますように)。

参照: http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndsource.addhook(VS.85).aspx

そして、これが役立つかもしれないいくつかのコードです(app.xaml.vbから切り取ったものです)(VB、申し訳ありません):

Private Shared m_handle As IntPtr
Private Shared m_hook As Interop.HwndSourceHook
Private Shared m_hookCreated As Boolean = False

'Call on application start
Public Shared Sub SetWindowHook(ByVal visualSource As Visual)
    'Add in a Win32 hook to stop the browser app from loading
    If Not m_hookCreated Then
        m_handle = DirectCast(PresentationSource.FromVisual(visualSource), Interop.HwndSource).Handle
        m_hook = New Interop.HwndSourceHook(AddressOf WindowProc)
        Interop.HwndSource.FromHwnd(m_handle).AddHook(m_hook)
        m_hookCreated = True
    End If
End Sub

'Call on application exit
Public Shared Sub RemoveWindowHook()
   'Remove the win32 hook
    If m_hookCreated AndAlso Not m_hook Is Nothing Then
        If Not Interop.HwndSource.FromHwnd(m_handle) Is Nothing Then
            Interop.HwndSource.FromHwnd(m_handle).RemoveHook(m_hook)
        End If
        m_hook = Nothing
        m_handle = IntPtr.Zero
    End If
End Sub

'Intercept key presses
Private Shared Function WindowProc(ByVal hwnd As System.IntPtr, ByVal msg As Integer, ByVal wParam As System.IntPtr, ByVal lParam As System.IntPtr, ByRef handled As Boolean) As System.IntPtr
    'Stop the OS from handling help
    If msg = WM_HELP Then
        handled = True
    End If
    Return IntPtr.Zero
End Function
于 2009-06-29T14:26:42.993 に答える
0

回答ではなく、コメントです。XBAP で Backspace キーの動作を無効にすると便利です。要素内にないときに Backspace キーを押すと、ブラウザーが前の Web ページに移動することほど面倒なことはありません。

于 2008-09-24T21:23:53.400 に答える