WinForms에서 Chromium 브라우저 구성 요소 (CefSharp)를 사용해보십시오.

15137 단어 CefSharpVB. 네 tC#

소개



이것은 Visual Basic Advent Calendar 2018의 25 일째 기사입니다.
  • WinForms에서 Chromium 브라우저 구성 요소 (CefSharp)를 사용해보십시오.
  • WinForms에서 Chromium 브라우저 구성 요소 (CefSharp)를 사용해보십시오.

  • 원래 WinForms 에 표준(IE)의 웹 브라우저 컨트롤을 작성한 어플리케이션은, 바코드 리더를 사용해 바코드를 입력하는 타입의 것입니다.
    따라서 사이트를 표시한 단계에서 입력 항목에 포커스가 있어 입력할 수 있는 상태여야 합니다.

    포커스 세트



    초기 표시시에는 포커스가 설정되어 있지 않습니다.


    읽기 완료 이벤트에서, _webBrowser.Focus() 로서 포커스가 세트 하도록(듯이) 합니다.
    UI 스레드이므로 Invoke 메서드를 사용하고 있습니다.

    VB 버전
    Private Sub OnLoadingStateChanged(sender As Object, e As LoadingStateChangedEventArgs)
        If Not e.IsLoading Then
            Invoke(New MethodInvoker(
                    Sub()
                        _webBrowser.Focus()
                    End Sub))
    
    

    C# 버전
    private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
    {
        if (!e.IsLoading)
        {
            this.Invoke((MethodInvoker)delegate { _webBrowser.Focus(); });
    
    

    직장에서 만든 것은 _webBrowser.Focus() 에서는 왠지 포커스가 설정되지 않았기 때문에 Win32 API의 SetFocus를 사용했습니다.

    VB 버전
    Private Declare Function SetFocus Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr
    
    SetFocus(_webBrowser.Handle)
    

    C# 버전
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetFocus(IntPtr hWnd);
    
    SetFocus(_webBrowser.Handle);
    

    포커스가 설정되어 입력 가능합니다.


    키 누름 처리



    바코드 리더로 자동으로 Enter 키가 세트되도록 하고 있으므로, 그 때에 이벤트가 동작하도록(듯이) 하고 싶다.
    IE의 웹 브라우저 구성 요소에 있던 previewkeydown 이벤트 대신입니다.

    이를 위해서는 KeyboardHandle 클래스를 정의해야 합니다.
  • How to implement keyboard handler cefSharp for shortcut keys - stackoverflow
  • cefsharp 实现 谷歌 F12 우진 Focus 공능
  • NativeHost.cs

  • VB 버전
    ' キーイベント処理登録
    _webBrowser.KeyboardHandler = New KeyboardHandler(Me)
    
    Public Sub OnMyPreviewKeyDown(ByVal windowsKeyCode As Integer, ByVal modifiers As CefEventFlags)
        If windowsKeyCode <> CInt(Keys.[Return]) Then Return
    
        ' Enterキー押下時の処理を記述する。
        MessageBox.Show("KeyDown")
    End Sub
    
    ' KeyboardHandleクラス
    Public Class KeyboardHandler
        Implements IKeyboardHandler
    
        Private _frm As frmMain
    
        Public Sub New(ByVal frm As frmMain)
            _frm = frm
        End Sub
    
        Private Function OnPreKeyEvent(chromiumWebBrowser As IWebBrowser, browser As IBrowser, type As KeyType, windowsKeyCode As Integer, nativeKeyCode As Integer, modifiers As CefEventFlags, isSystemKey As Boolean, ByRef isKeyboardShortcut As Boolean) As Boolean Implements IKeyboardHandler.OnPreKeyEvent
            Return False
        End Function
    
        Private Function OnKeyEvent(chromiumWebBrowser As IWebBrowser, browser As IBrowser, type As KeyType, windowsKeyCode As Integer, nativeKeyCode As Integer, modifiers As CefEventFlags, isSystemKey As Boolean) As Boolean Implements IKeyboardHandler.OnKeyEvent
            _frm.OnMyPreviewKeyDown(windowsKeyCode, modifiers)
            Return False
        End Function
    End Class
    

    C# 버전
    // キーイベント処理登録
    _webBrowser.KeyboardHandler = new KeyboardHandler(this);
    
    public void OnMyPreviewKeyDown(int windowsKeyCode, CefEventFlags modifiers)
    {
        if (windowsKeyCode != (int)Keys.Return) return;
    
        // Enterキー押下時の処理を記述する。
        MessageBox.Show("KeyDown")
    } 
    
    // KeyboardHandleクラス
    public class KeyboardHandler : IKeyboardHandler
    {
        private frmMain _frm;
    
        public KeyboardHandler(frmMain frm)
        {
            _frm = frm;
        }
    
        public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
        {
            return false;
        }
    
        public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
        {
            _frm.OnMyPreviewKeyDown(windowsKeyCode, modifiers);
    
            return false;
        }
    }
    

    Enter 키를 누르면 메시지 상자가 표시됩니다.



    마지막으로



    Visual Basic Advent Calendar 2018의 마지막 기사였습니다.
    참가해 주신 여러분 감사합니다.

    좋은 웹페이지 즐겨찾기