Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / AccessibleTech / longhorn / Automation / 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 : [....] 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
- XmlComment.cs
- SafeHandle.cs
- ConcurrentStack.cs
- AxHostDesigner.cs
- XmlObjectSerializer.cs
- Graphics.cs
- BaseParser.cs
- ByteFacetDescriptionElement.cs
- DictionaryItemsCollection.cs
- NonBatchDirectoryCompiler.cs
- EntityModelBuildProvider.cs
- MSG.cs
- CssTextWriter.cs
- ResourceLoader.cs
- AuthorizationRuleCollection.cs
- ServicePointManager.cs
- TableAdapterManagerNameHandler.cs
- PageStatePersister.cs
- CaretElement.cs
- AxDesigner.cs
- XmlSchemaAnnotation.cs
- BooleanProjectedSlot.cs
- HttpConfigurationContext.cs
- TagPrefixCollection.cs
- SiteOfOriginPart.cs
- ConfigurationStrings.cs
- TdsParserSessionPool.cs
- JsonDataContract.cs
- CredentialCache.cs
- TransformerInfo.cs
- HashCryptoHandle.cs
- WindowsSolidBrush.cs
- SchemaLookupTable.cs
- CellTreeNodeVisitors.cs
- XamlReaderHelper.cs
- TextServicesPropertyRanges.cs
- Oci.cs
- EditorBrowsableAttribute.cs
- TypeListConverter.cs
- HttpStreamFormatter.cs
- TextLineBreak.cs
- ImageFormatConverter.cs
- Soap11ServerProtocol.cs
- PageParserFilter.cs
- SafeFindHandle.cs
- StylusCollection.cs
- BamlLocalizer.cs
- BaseParser.cs
- FtpRequestCacheValidator.cs
- Rectangle.cs
- ExpressionBuilder.cs
- OpenTypeLayoutCache.cs
- EditCommandColumn.cs
- InkCanvasInnerCanvas.cs
- FileNotFoundException.cs
- LicenseException.cs
- HybridDictionary.cs
- IndexerNameAttribute.cs
- StringDictionaryWithComparer.cs
- ModelItemCollection.cs
- OutputCacheProfile.cs
- DesignerForm.cs
- SelectionEditor.cs
- MeasurementDCInfo.cs
- EntityDataSourceStatementEditorForm.cs
- DateTimeConstantAttribute.cs
- ClientSection.cs
- DispatcherSynchronizationContext.cs
- CodeEventReferenceExpression.cs
- GC.cs
- AsynchronousChannel.cs
- ActionMismatchAddressingException.cs
- DesignerCommandAdapter.cs
- TreeView.cs
- MetadataWorkspace.cs
- SharedStatics.cs
- TableLayoutStyle.cs
- Thread.cs
- PerformanceCounterPermission.cs
- TypeSystem.cs
- DataStorage.cs
- ConsoleCancelEventArgs.cs
- CompilerInfo.cs
- HMACSHA384.cs
- CompModSwitches.cs
- HMACSHA1.cs
- Repeater.cs
- _emptywebproxy.cs
- UInt32Converter.cs
- HtmlEncodedRawTextWriter.cs
- WinFormsUtils.cs
- VectorAnimationBase.cs
- AuthenticationService.cs
- printdlgexmarshaler.cs
- DataGrid.cs
- EncryptedXml.cs
- DbConnectionStringBuilder.cs
- QueryRewriter.cs
- TransformProviderWrapper.cs
- ReadOnlyPropertyMetadata.cs