Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / input.cs / 1305600 / input.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Provides mouse and keyboard input functionality // // History: // 05/29/2003 : BrendanM ported to WCP // //--------------------------------------------------------------------------- using System.Windows.Input; using System.ComponentModel; using System.Runtime.InteropServices; using MS.Win32; using System; namespace MS.Internal.Automation { // // Provides internal methods for sending keyboard input // internal sealed class Input { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors // Static class - Private to prevent creation Input() { } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods // // Inject keyboard input into the system // internal static void SendKeyboardInput( Key key, bool press ) { UnsafeNativeMethods.INPUT ki = new UnsafeNativeMethods.INPUT(); ki.type = UnsafeNativeMethods.INPUT_KEYBOARD; ki.union.keyboardInput.wVk = (short) KeyInterop.VirtualKeyFromKey( key ); ki.union.keyboardInput.wScan = (short) UnsafeNativeMethods.MapVirtualKey( ki.union.keyboardInput.wVk, 0 ); int dwFlags = 0; if( ki.union.keyboardInput.wScan > 0 ) dwFlags |= UnsafeNativeMethods.KEYEVENTF_SCANCODE; if( !press ) dwFlags |= UnsafeNativeMethods.KEYEVENTF_KEYUP; ki.union.keyboardInput.dwFlags = dwFlags; if( IsExtendedKey( key ) ) { ki.union.keyboardInput.dwFlags |= UnsafeNativeMethods.KEYEVENTF_EXTENDEDKEY; } ki.union.keyboardInput.time = 0; ki.union.keyboardInput.dwExtraInfo = new IntPtr( 0 ); Misc.SendInput(1, ref ki, Marshal.SizeOf(ki)); } // Used internally by the HWND SetFocus code - it sends a hotkey to // itself - because it uses a VK that's not on the keyboard, it needs // to send the VK directly, not the scan code, which regular // SendKeyboardInput does. internal static void SendKeyboardInputVK( byte vk, bool press ) { UnsafeNativeMethods.INPUT ki = new UnsafeNativeMethods.INPUT(); ki.type = UnsafeNativeMethods.INPUT_KEYBOARD; ki.union.keyboardInput.wVk = vk; ki.union.keyboardInput.wScan = 0; ki.union.keyboardInput.dwFlags = press ? 0 : UnsafeNativeMethods.KEYEVENTF_KEYUP; ki.union.keyboardInput.time = 0; ki.union.keyboardInput.dwExtraInfo = new IntPtr( 0 ); Misc.SendInput(1, ref ki, Marshal.SizeOf(ki)); } #endregion Internal Methods //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods private static bool IsExtendedKey( Key key ) { // From the SDK: // The extended-key flag indicates whether the keystroke message originated from one of // the additional keys on the enhanced keyboard. The extended keys consist of the ALT and // CTRL keys on the right-hand side of the keyboard; the INS, DEL, HOME, END, PAGE UP, // PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad; the NUM LOCK // key; the BREAK (CTRL+PAUSE) key; the PRINT SCRN key; and the divide (/) and ENTER keys in // the numeric keypad. The extended-key flag is set if the key is an extended key. // // - docs appear to be incorrect. Use of Spy++ indicates that break is not an extended key. // Also, menu key and windows keys also appear to be extended. return key == Key.RightAlt || key == Key.RightCtrl || key == Key.NumLock || key == Key.Insert || key == Key.Delete || key == Key.Home || key == Key.End || key == Key.Prior || key == Key.Next || key == Key.Up || key == Key.Down || key == Key.Left || key == Key.Right || key == Key.Apps || key == Key.RWin || key == Key.LWin; // Note that there are no distinct values for the following keys: // numpad divide // numpad enter } #endregion Private Methods //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Fields // Stateless object, has no private fields #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AdapterUtil.cs
- FrameworkTextComposition.cs
- PointCollection.cs
- RuntimeUtils.cs
- WebPartVerb.cs
- Queue.cs
- InteropTrackingRecord.cs
- ListArgumentProvider.cs
- UniqueConstraint.cs
- XamlBrushSerializer.cs
- TextStore.cs
- HtmlForm.cs
- WebPartHelpVerb.cs
- BitmapVisualManager.cs
- DescendantBaseQuery.cs
- NameValuePermission.cs
- DataTemplateSelector.cs
- XmlLanguageConverter.cs
- ObjectHandle.cs
- WebPartPersonalization.cs
- ListQueryResults.cs
- WsdlWriter.cs
- EventEntry.cs
- DocumentPageTextView.cs
- GridPatternIdentifiers.cs
- ComponentDispatcher.cs
- SafeProcessHandle.cs
- EmptyEnumerator.cs
- ToolStripDropDown.cs
- QualifiedCellIdBoolean.cs
- ThreadInterruptedException.cs
- DataSetMappper.cs
- ExportOptions.cs
- XmlNodeChangedEventManager.cs
- LogicalExpr.cs
- PrintDocument.cs
- EditableTreeList.cs
- MouseGesture.cs
- AttributeSetAction.cs
- XmlStreamedByteStreamReader.cs
- NavigatorInput.cs
- wgx_commands.cs
- MessagePropertyDescriptionCollection.cs
- HandlerMappingMemo.cs
- WebPartConnection.cs
- SystemWebSectionGroup.cs
- Block.cs
- Odbc32.cs
- TabControl.cs
- MeshGeometry3D.cs
- GenericRootAutomationPeer.cs
- TemplatePagerField.cs
- Empty.cs
- BaseProcessor.cs
- OrthographicCamera.cs
- VerticalAlignConverter.cs
- SystemGatewayIPAddressInformation.cs
- EnumMember.cs
- Border.cs
- XmlUnspecifiedAttribute.cs
- TdsParserStateObject.cs
- PerformanceCounterManager.cs
- LeafCellTreeNode.cs
- XmlAttributeCollection.cs
- XmlCharCheckingReader.cs
- ContentPlaceHolder.cs
- RuntimeHandles.cs
- MachineKey.cs
- GlyphRunDrawing.cs
- ChangesetResponse.cs
- FixedPageProcessor.cs
- MouseActionConverter.cs
- HtmlInputRadioButton.cs
- StringSorter.cs
- LineSegment.cs
- DbDataReader.cs
- ClusterRegistryConfigurationProvider.cs
- EndCreateSecurityTokenRequest.cs
- ListItemParagraph.cs
- ViewEvent.cs
- DataRecordInternal.cs
- COM2PropertyDescriptor.cs
- NullExtension.cs
- EditorPartCollection.cs
- XamlGridLengthSerializer.cs
- ISAPIWorkerRequest.cs
- DragEventArgs.cs
- DesignerEditorPartChrome.cs
- KerberosReceiverSecurityToken.cs
- basenumberconverter.cs
- ListDataHelper.cs
- GeneralTransform.cs
- DataServiceClientException.cs
- OleDbFactory.cs
- StringBuilder.cs
- ButtonChrome.cs
- EntityClassGenerator.cs
- odbcmetadatafactory.cs
- StreamSecurityUpgradeAcceptor.cs
- PackUriHelper.cs