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
- ErrorRuntimeConfig.cs
- MouseButtonEventArgs.cs
- SQLSingle.cs
- Keywords.cs
- KeyedPriorityQueue.cs
- XamlPathDataSerializer.cs
- IteratorFilter.cs
- LockCookie.cs
- DataTemplateKey.cs
- PasswordDeriveBytes.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- XPathDescendantIterator.cs
- SafeArchiveContext.cs
- TimeSpanStorage.cs
- RtType.cs
- EventWaitHandleSecurity.cs
- BaseValidator.cs
- _Semaphore.cs
- Tablet.cs
- XmlSchemaSimpleTypeUnion.cs
- ParameterCollection.cs
- DetailsViewInsertEventArgs.cs
- PrePrepareMethodAttribute.cs
- Line.cs
- DataGridColumn.cs
- Directory.cs
- DataSourceCache.cs
- ReadOnlyMetadataCollection.cs
- HtmlButton.cs
- Accessible.cs
- remotingproxy.cs
- OrderedDictionary.cs
- DebugController.cs
- EncoderBestFitFallback.cs
- TreeNodeCollection.cs
- WebPartDescriptionCollection.cs
- TextHidden.cs
- RuntimeCompatibilityAttribute.cs
- Wizard.cs
- MatrixValueSerializer.cs
- RightsManagementPermission.cs
- RequestCachePolicyConverter.cs
- WebFormDesignerActionService.cs
- MDIClient.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- SimplePropertyEntry.cs
- ProcessInputEventArgs.cs
- RichTextBoxAutomationPeer.cs
- XPathSelfQuery.cs
- _emptywebproxy.cs
- FaultCallbackWrapper.cs
- MergeLocalizationDirectives.cs
- WebRequestModulesSection.cs
- ApplicationInfo.cs
- PostBackTrigger.cs
- WebCodeGenerator.cs
- DynamicActivityXamlReader.cs
- ColorKeyFrameCollection.cs
- ReliableSessionBindingElement.cs
- SelectorAutomationPeer.cs
- ReliabilityContractAttribute.cs
- TextProviderWrapper.cs
- TableLayoutPanelBehavior.cs
- MetadataWorkspace.cs
- Span.cs
- XmlIterators.cs
- TextStore.cs
- APCustomTypeDescriptor.cs
- EventLogPermissionAttribute.cs
- RemotingConfigParser.cs
- ManagedFilter.cs
- HostingEnvironmentSection.cs
- EdmProperty.cs
- SectionRecord.cs
- CompilerTypeWithParams.cs
- DataChangedEventManager.cs
- SmiMetaData.cs
- processwaithandle.cs
- FastEncoderWindow.cs
- ManipulationDeltaEventArgs.cs
- EnterpriseServicesHelper.cs
- IntSecurity.cs
- SqlParameter.cs
- XmlChoiceIdentifierAttribute.cs
- GeneralTransformGroup.cs
- OptimalBreakSession.cs
- ColumnMap.cs
- TransformProviderWrapper.cs
- AliasedSlot.cs
- COM2ExtendedUITypeEditor.cs
- MaskDescriptor.cs
- RequestSecurityTokenSerializer.cs
- StaticSiteMapProvider.cs
- ConfigDefinitionUpdates.cs
- RefreshEventArgs.cs
- ModulesEntry.cs
- TargetException.cs
- AssemblyCacheEntry.cs
- InputProviderSite.cs
- RuntimeConfig.cs