Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / UIAutomationClient / MS / Win32 / UnsafeNativeMethods.cs / 1305600 / UnsafeNativeMethods.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Unsafe P/Invokes used by UIAutomation // // History: // 05/29/2003 : BrendanM removed commented out code which wasn't very // useful. Will instead add in as-needed from our old Win32.cs // file. // //--------------------------------------------------------------------------- using System.Threading; using System; using System.Runtime.InteropServices; using System.Collections; using System.IO; using System.Text; using Accessibility; using Microsoft.Win32.SafeHandles; namespace MS.Win32 { // This class *MUST* be internal for security purposes internal static class UnsafeNativeMethods { public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); // // CloseHandle // [DllImport("kernel32.dll", SetLastError = true)] public static extern bool CloseHandle(IntPtr handle); // // OpenProcess // public const int PROCESS_VM_READ = 0x0010; public const int PROCESS_DUP_HANDLE = 0x0040; public const int PROCESS_QUERY_INFORMATION = 0x0400; [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr OpenProcess( int dwDesiredAccess, bool fInherit, int dwProcessId ); [DllImport("kernel32.dll")] public static extern void SetLastError(int dwErrCode); // // SendInput related // public const int VK_SHIFT = 0x10; public const int VK_CONTROL = 0x11; public const int VK_MENU = 0x12; public const int KEYEVENTF_EXTENDEDKEY = 0x0001; public const int KEYEVENTF_KEYUP = 0x0002; public const int KEYEVENTF_UNICODE = 0x0004; public const int KEYEVENTF_SCANCODE = 0x0008; public const int MOUSEEVENTF_VIRTUALDESK = 0x4000; [StructLayout(LayoutKind.Sequential)] public struct INPUT { public int type; public INPUTUNION union; }; [StructLayout(LayoutKind.Explicit)] public struct INPUTUNION { [FieldOffset(0)] public MOUSEINPUT mouseInput; [FieldOffset(0)] public KEYBDINPUT keyboardInput; }; [StructLayout(LayoutKind.Sequential)] public struct MOUSEINPUT { public int dx; public int dy; public int mouseData; public int dwFlags; public int time; public IntPtr dwExtraInfo; }; [StructLayout(LayoutKind.Sequential)] public struct KEYBDINPUT { public short wVk; public short wScan; public int dwFlags; public int time; public IntPtr dwExtraInfo; }; public const int INPUT_MOUSE = 0; public const int INPUT_KEYBOARD = 1; [DllImport("user32.dll", SetLastError = true)] public static extern int SendInput( int nInputs, ref INPUT mi, int cbSize ); [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern int MapVirtualKey(int nVirtKey, int nMapType); [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern short GetAsyncKeyState(int nVirtKey); // // Hotkeys // [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool RegisterHotKey( NativeMethods.HWND hWnd, int id, int fsModifiers, int vk ); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool UnregisterHotKey( NativeMethods.HWND hWnd, int id ); // // Foreground window // [DllImport("user32.dll")] public static extern void SwitchToThisWindow(NativeMethods.HWND hwnd, bool fAltTab); // // IAccessible / OLEACC / WinEvents // public const int CHILDID_SELF = 0; public const int STATE_SYSTEM_UNAVAILABLE = 0x00000001; public const int STATE_SYSTEM_FOCUSED = 0x00000004; public const int OBJID_CARET = -8; public const int OBJID_CLIENT = -4; public const int OBJID_MENU = -3; public const int OBJID_SYSMENU = -1; public const int OBJID_WINDOW = 0; [DllImport("oleacc.dll")] public static extern int AccessibleObjectFromEvent ( IntPtr hwnd, int idObject, int idChild, ref IAccessible ppvObject, ref Object varChild ); [DllImport("oleacc.dll")] public static extern int WindowFromAccessibleObject ( IAccessible acc, ref IntPtr hwnd ); [DllImport("oleacc.dll", SetLastError = true)] internal static extern IntPtr GetProcessHandleFromHwnd(IntPtr hwnd); [DllImport("user32.dll")] internal static extern IntPtr SetWinEventHook(int eventMin, int eventMax, IntPtr hmodWinEventProc, NativeMethods.WinEventProcDef WinEventReentrancyFilter, uint idProcess, uint idThread, int dwFlags); [DllImport("user32.dll")] internal static extern bool UnhookWinEvent(IntPtr winEventHook); private struct POINTSTRUCT { public int x; public int y; public POINTSTRUCT(int x, int y) { this.x = x; this.y = y; } } [DllImport("user32.dll", EntryPoint = "WindowFromPoint", ExactSpelling = true, CharSet = CharSet.Auto)] private static extern IntPtr IntWindowFromPoint(POINTSTRUCT pt); [DllImport("user32.dll", EntryPoint = "WindowFromPhysicalPoint", ExactSpelling = true, CharSet = CharSet.Auto)] private static extern IntPtr IntWindowFromPhysicalPoint(POINTSTRUCT pt); public static IntPtr WindowFromPhysicalPoint(int x, int y) { POINTSTRUCT ps = new POINTSTRUCT(x, y); if (System.Environment.OSVersion.Version.Major >= 6) return IntWindowFromPhysicalPoint(ps); else return IntWindowFromPoint(ps); } // // SendMessage and related // public const int SMTO_ABORTIFHUNG = 2; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr SendMessageTimeout( NativeMethods.HWND hwnd, int Msg, IntPtr wParam, IntPtr lParam, int flags, int uTimeout, out IntPtr pResult ); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr SendMessageTimeout( NativeMethods.HWND hwnd, int Msg, IntPtr wParam, ref MINMAXINFO lParam, int flags, int uTimeout, out IntPtr pResult ); // Overload for use with WM_GETTEXT. StringBuilder is the type that P/Invoke maps to an output TCHAR*, see // see MSDN .Net docs on P/Invoke for more details. [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr SendMessageTimeout( NativeMethods.HWND hwnd, int Msg, IntPtr wParam, StringBuilder lParam, int flags, int uTimeout, out IntPtr pResult); public const int PM_REMOVE = 0x0001; [StructLayout(LayoutKind.Sequential)] public struct MSG { public NativeMethods.HWND hwnd; public int message; public IntPtr wParam; public IntPtr lParam; public int time; public int pt_x; public int pt_y; } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern int GetMessage( ref MSG msg, NativeMethods.HWND hwnd, int nMsgFilterMin, int nMsgFilterMax); [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern bool PeekMessage( ref MSG msg, NativeMethods.HWND hwnd, int nMsgFilterMin, int nMsgFilterMax, int wRemoveMsg); [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern bool TranslateMessage( ref MSG msg); [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern IntPtr DispatchMessage( ref MSG msg); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool PostMessage( NativeMethods.HWND hWnd, int nMsg, IntPtr wParam, IntPtr lParam); // // Messages and related structs / constants // public const int WM_NULL = 0x0000; public const int WM_GETTEXT = 0x000D; public const int WM_GETTEXTLENGTH = 0x000E; public const int WM_QUIT = 0x0012; public const int WM_GETMINMAXINFO = 0x0024; [StructLayout(LayoutKind.Sequential)] public struct MINMAXINFO { public NativeMethods.POINT ptReserved; public NativeMethods.POINT ptMaxSize; public NativeMethods.POINT ptMaxPosition; public NativeMethods.POINT ptMinTrackSize; public NativeMethods.POINT ptMaxTrackSize; }; public const int WM_GETOBJECT = 0x003D; public const int WM_NCHITTEST = 0x0084; public static readonly IntPtr HTTRANSPARENT = new IntPtr(-1); public static readonly IntPtr HTCLIENT = new IntPtr(1); public const int WM_SYSCOMMAND = 0x0112; public const int WM_MDIACTIVATE = 0x0222; public const int SC_SIZE = 0xF000; public const int SC_MOVE = 0xF010; public const int SC_MINIMIZE = 0xF020; public const int SC_MAXIMIZE = 0xF030; public const int SC_CLOSE = 0xF060; public const int SC_RESTORE = 0xF120; public const int WM_HOTKEY = 0x0312; public const int LB_GETCURSEL = 0x0188; // // MsgWaitForMultipleObjects... // public const int QS_KEY = 0x0001, QS_MOUSEMOVE = 0x0002, QS_MOUSEBUTTON = 0x0004, QS_POSTMESSAGE = 0x0008, QS_TIMER = 0x0010, QS_PAINT = 0x0020, QS_SENDMESSAGE = 0x0040, QS_HOTKEY = 0x0080, QS_ALLPOSTMESSAGE = 0x0100, QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON, QS_INPUT = QS_MOUSE | QS_KEY, QS_ALLEVENTS = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY, QS_ALLINPUT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE; public const int INFINITE = unchecked((int)0xFFFFFFFF); [DllImport("user32.dll", SetLastError = true)] public static extern int MsgWaitForMultipleObjects(int nCount, IntPtr[] handles, bool fWaitAll, int dwMilliseconds, int dwWakeMask); public const int WAIT_FAILED = unchecked((int)0xFFFFFFFF); public const int WAIT_TIMEOUT = 0x00000102; // // Window Placement // public const int WPF_SETMINPOSITION = 0x0001; public const int SW_RESTORE = 0x0009; public const int SWP_NOACTIVATE = 0x0010; [StructLayout(LayoutKind.Sequential)] public struct WINDOWPLACEMENT { public int length; public int flags; public int showCmd; public NativeMethods.POINT ptMinPosition; public NativeMethods.POINT ptMaxPosition; public NativeMethods.RECT rcNormalPosition; }; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetWindowPlacement( NativeMethods.HWND hwnd, ref WINDOWPLACEMENT wp ); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool GetWindowPlacement( NativeMethods.HWND hwnd, ref WINDOWPLACEMENT wp ); public const int SWP_NOSIZE = 0x0001; public const int SWP_NOZORDER = 0x0004; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern bool SetWindowPos(NativeMethods.HWND hWnd, NativeMethods.HWND hWndInsertAfter, int x, int y, int cx, int cy, int flags); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern int MapWindowPoints(NativeMethods.HWND hWndFrom, NativeMethods.HWND hWndTo, [In, Out] ref NativeMethods.POINT pt, int cPoints); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern int MapWindowPoints(NativeMethods.HWND hWndFrom, NativeMethods.HWND hWndTo, [In, Out] ref NativeMethods.RECT rc, int cPoints); [DllImport("user32.dll", SetLastError = true)] public static extern bool GetMenuBarInfo(IntPtr hwnd, int idObject, uint idItem, ref MENUBARINFO mbi); [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)] internal static extern int GetMenuState(IntPtr hMenu, int uId, int uFlags); internal const int MF_BYCOMMAND = 0x00000000; internal const int MF_BYPOSITION = 0x00000400; internal const int MF_GRAYED = 0x00000001; internal const int MF_DISABLED = 0x00000002; [StructLayout(LayoutKind.Sequential)] internal struct MENUBARINFO { internal int cbSize; internal NativeMethods.RECT rcBar; internal IntPtr hMenu; internal NativeMethods.HWND hwndMenu; internal int focusFlags; } // // GDI // [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern bool DeleteObject(IntPtr hrgn); } } // 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
- TextEndOfParagraph.cs
- Type.cs
- CatalogPart.cs
- Animatable.cs
- Enlistment.cs
- BitmapEffectInput.cs
- ListSortDescription.cs
- TextSearch.cs
- RegexTypeEditor.cs
- ApplicationId.cs
- Rect3DConverter.cs
- BaseAppDomainProtocolHandler.cs
- RoleGroup.cs
- ManifestSignatureInformation.cs
- StyleXamlTreeBuilder.cs
- EdmToObjectNamespaceMap.cs
- InlinedAggregationOperatorEnumerator.cs
- IItemProperties.cs
- ParenExpr.cs
- SqlClientWrapperSmiStreamChars.cs
- NestPullup.cs
- ComponentRenameEvent.cs
- DateTimeConverter.cs
- SetterBaseCollection.cs
- InkCanvasFeedbackAdorner.cs
- TreeViewDesigner.cs
- PolyQuadraticBezierSegment.cs
- DoubleAnimationClockResource.cs
- ConfigurationPermission.cs
- TraceContext.cs
- EntityFunctions.cs
- TableLayoutRowStyleCollection.cs
- CrossAppDomainChannel.cs
- SafeProcessHandle.cs
- FrameworkTemplate.cs
- GcSettings.cs
- XsltSettings.cs
- IPAddressCollection.cs
- XslException.cs
- DefaultSection.cs
- CodeFieldReferenceExpression.cs
- HttpAsyncResult.cs
- ComplexBindingPropertiesAttribute.cs
- HttpValueCollection.cs
- serverconfig.cs
- ClaimTypes.cs
- XmlSchemaExporter.cs
- DataTableExtensions.cs
- Monitor.cs
- DataGridViewTopRowAccessibleObject.cs
- UnmanagedMemoryStream.cs
- TraceRecord.cs
- DataContract.cs
- Nullable.cs
- SqlHelper.cs
- Error.cs
- DirectoryInfo.cs
- BitmapEffectOutputConnector.cs
- CmsUtils.cs
- AuthorizationRuleCollection.cs
- PersonalizationDictionary.cs
- DirectionalLight.cs
- ActivityCodeDomSerializationManager.cs
- HyperlinkAutomationPeer.cs
- RawStylusActions.cs
- ApplyHostConfigurationBehavior.cs
- UICuesEvent.cs
- OracleBFile.cs
- Update.cs
- EllipseGeometry.cs
- ImageMap.cs
- DataGridViewColumnTypePicker.cs
- DataBindingList.cs
- MsmqReceiveHelper.cs
- TypeElementCollection.cs
- GenerateTemporaryTargetAssembly.cs
- DecoderReplacementFallback.cs
- StringStorage.cs
- GACMembershipCondition.cs
- SrgsElementList.cs
- ProfileEventArgs.cs
- MustUnderstandSoapException.cs
- MenuAdapter.cs
- ObjectReaderCompiler.cs
- WindowsHyperlink.cs
- SqlDataSourceCommandEventArgs.cs
- CompiledRegexRunnerFactory.cs
- BamlReader.cs
- BaseUriHelper.cs
- Tile.cs
- PopupRoot.cs
- MediaSystem.cs
- InternalCache.cs
- ConnectionInterfaceCollection.cs
- EmptyStringExpandableObjectConverter.cs
- DesignerDeviceConfig.cs
- Misc.cs
- FloaterBaseParagraph.cs
- smtpconnection.cs
- ObjectDataSourceChooseTypePanel.cs