private void InvokeKeyPress(KeyPressEventArgsExt e) { KeyPressEventHandler handler = KeyPress; if (handler == null || e.Handled || e.IsNonChar) { return; } handler(this, e); }
/// <summary> /// Creates <see cref="KeyPressEventArgsExt"/> from Windows Message parameters, /// based upon a system-wide hook. /// </summary> /// <param name="wParam">The first Windows Message parameter.</param> /// <param name="lParam">The second Windows Message parameter.</param> /// <returns>A new KeyPressEventArgsExt object.</returns> internal static KeyPressEventArgsExt FromRawDataGlobal( int wParam, IntPtr lParam ) { if ( wParam != Messages.WM_KEYDOWN ) { return new KeyPressEventArgsExt( ( char )0 ); } KeyboardHookStruct keyboardHookStruct = ( KeyboardHookStruct )Marshal.PtrToStructure( lParam, typeof( KeyboardHookStruct ) ); int virtualKeyCode = keyboardHookStruct.VirtualKeyCode; int scanCode = keyboardHookStruct.ScanCode; int fuState = keyboardHookStruct.Flags; char ch; if ( virtualKeyCode == KeyboardNativeMethods.VK_PACKET ) { ch = ( char )scanCode; } else { bool isSuccessfull = KeyboardNativeMethods.TryGetCharFromKeyboardState( virtualKeyCode, scanCode, fuState, out ch ); if ( !isSuccessfull ) { return new KeyPressEventArgsExt( ( char )0 ); } } KeyPressEventArgsExt e = new KeyPressEventArgsExt( ch, keyboardHookStruct.Time ); return e; }