// ---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // ---------------------------------------------------------------------------- #if ENABLE_INTEROP using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; namespace Windows { static class User32 { [DllImport(User32DllName, CharSet=CharSet.Unicode, ExactSpelling=true, SetLastError=true)] public static extern bool PostThreadMessageW(uint threadId, uint message, IntPtr wParam, IntPtr lParam); [DllImport(User32DllName, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] public static extern unsafe bool TranslateMessage(MSG* msg); [DllImport(User32DllName, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] public static extern unsafe bool GetMessageW([Out]MSG* msg, IntPtr hwnd, uint wMsgFilterMin, uint wMsgFilterMax); [DllImport(User32DllName, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] public static extern unsafe bool PeekMessageW([Out]MSG* msg, IntPtr hwnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg); public const uint PM_REMOVE = 1; [DllImport(User32DllName, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] public static extern unsafe IntPtr DispatchMessageW([Out]MSG* msg); [DllImport(User32DllName, SetLastError = true)] public static extern uint RegisterWindowMessage(string name); [DllImport(User32DllName, SetLastError = true)] public unsafe static extern Kernel32.WaitResult MsgWaitForMultipleObjects( int nCount, IntPtr* pHandles, bool bWaitAll, uint dwMilliseconds, uint dwWakeMask ); /// /// Event mask for MsgWaitForMultipleObjects. /// public static uint QS_ALLEVENTS = 0x04bf; public const uint InfiniteTimeout = ~0u; const string User32DllName = "USER32.DLL"; public const uint WM_NULL = 0; } static class Kernel32 { [DllImport(DllName)] public static extern uint GetCurrentThreadId(); /// /// Results for WaitFor functions (including MsgWaitForMultipleObjects) /// public enum WaitResult : uint { Object0 = 0, Object1 = 1, Object2 = 2, // ... up to 63 Timeout = 258, Failed = ~0u } const string DllName = "KERNEL32.DLL"; } [StructLayout(LayoutKind.Sequential)] struct MSG { public IntPtr hwnd; public uint message; public IntPtr wParam; public IntPtr lParam; public uint time; public POINT pt; } [StructLayout(LayoutKind.Sequential)] struct POINT { public int x; public int y; } } #endif