Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / input.cs / 1 / 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. //---------------------------------------------------------------------------- // //// 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
- CalendarButton.cs
- WindowsFormsSynchronizationContext.cs
- WindowsGraphicsCacheManager.cs
- PagerSettings.cs
- SqlDataSourceParameterParser.cs
- GroupBoxAutomationPeer.cs
- StaticSiteMapProvider.cs
- HttpListenerPrefixCollection.cs
- SubpageParagraph.cs
- SubMenuStyleCollection.cs
- ListInitExpression.cs
- MetricEntry.cs
- Table.cs
- SqlUdtInfo.cs
- TableParaClient.cs
- TagPrefixAttribute.cs
- BaseParaClient.cs
- WeakReferenceEnumerator.cs
- OnOperation.cs
- DocumentAutomationPeer.cs
- SQLCharsStorage.cs
- WindowsStatic.cs
- HTTPNotFoundHandler.cs
- Geometry3D.cs
- EventData.cs
- TreeViewImageIndexConverter.cs
- WebPartCollection.cs
- HtmlInputFile.cs
- WebBrowserProgressChangedEventHandler.cs
- PersistenceTypeAttribute.cs
- StatusBarItemAutomationPeer.cs
- UriTemplateDispatchFormatter.cs
- DataControlFieldCell.cs
- PointUtil.cs
- NavigationProgressEventArgs.cs
- AssemblyAttributes.cs
- ComponentChangedEvent.cs
- ListViewUpdateEventArgs.cs
- DataControlFieldCollection.cs
- MarshalDirectiveException.cs
- DbBuffer.cs
- IODescriptionAttribute.cs
- CollectionConverter.cs
- MenuRendererStandards.cs
- ObjectToken.cs
- AnnotationStore.cs
- DefaultPrintController.cs
- BamlRecordWriter.cs
- BrowserCapabilitiesCodeGenerator.cs
- BamlWriter.cs
- ZipIOExtraFieldPaddingElement.cs
- DataPagerFieldCollection.cs
- PublisherMembershipCondition.cs
- ToolStripPanel.cs
- XmlSchemaAnyAttribute.cs
- Point3DCollectionValueSerializer.cs
- FormsAuthenticationConfiguration.cs
- ICspAsymmetricAlgorithm.cs
- SelectedCellsCollection.cs
- NativeMethods.cs
- HttpHeaderCollection.cs
- ISFTagAndGuidCache.cs
- ImpersonateTokenRef.cs
- DataTablePropertyDescriptor.cs
- EdmComplexPropertyAttribute.cs
- FileStream.cs
- ToolStripSeparatorRenderEventArgs.cs
- GridViewCommandEventArgs.cs
- BuildProviderInstallComponent.cs
- ConstraintStruct.cs
- XamlTypeMapper.cs
- ConstraintManager.cs
- TileBrush.cs
- Object.cs
- ShutDownListener.cs
- XmlReflectionImporter.cs
- DataServiceContext.cs
- SqlCommandSet.cs
- TreeViewBindingsEditor.cs
- DesignerToolboxInfo.cs
- PageParserFilter.cs
- UpdateProgress.cs
- InstanceDescriptor.cs
- LinkedResource.cs
- NamespaceCollection.cs
- FocusChangedEventArgs.cs
- XmlSchemaException.cs
- InheritanceContextHelper.cs
- WebResourceUtil.cs
- CatalogUtil.cs
- HttpHandlerActionCollection.cs
- AssertFilter.cs
- RemoteEndpointMessageProperty.cs
- WS2007HttpBindingElement.cs
- TdsParserSafeHandles.cs
- VScrollProperties.cs
- HebrewCalendar.cs
- MenuAdapter.cs
- ScalarConstant.cs
- Timer.cs