diff --git a/src/Shared/HandyControl_Shared/Controls/Attach/WindowAttach.cs b/src/Shared/HandyControl_Shared/Controls/Attach/WindowAttach.cs index 911f6fec..dd6a8db5 100644 --- a/src/Shared/HandyControl_Shared/Controls/Attach/WindowAttach.cs +++ b/src/Shared/HandyControl_Shared/Controls/Attach/WindowAttach.cs @@ -97,7 +97,7 @@ namespace HandyControl.Controls { var _ = new WindowInteropHelper(window) { - Owner = NativeMethods.GetDesktopWindow() + Owner = InteropMethods.GetDesktopWindow() }; } } diff --git a/src/Shared/HandyControl_Shared/Controls/ColorPicker/ColorDropper.cs b/src/Shared/HandyControl_Shared/Controls/ColorPicker/ColorDropper.cs index dc9ecf92..0aea9a99 100644 --- a/src/Shared/HandyControl_Shared/Controls/ColorPicker/ColorDropper.cs +++ b/src/Shared/HandyControl_Shared/Controls/ColorPicker/ColorDropper.cs @@ -96,10 +96,10 @@ namespace HandyControl.Controls public static Color GetColorAt(int x, int y) { - var desk = UnsafeNativeMethods.GetDesktopWindow(); - var dc = UnsafeNativeMethods.GetWindowDC(desk); - var a = (int)UnsafeNativeMethods.GetPixel(dc, x, y); - UnsafeNativeMethods.ReleaseDC(desk, dc); + var desk = InteropMethods.GetDesktopWindow(); + var dc = InteropMethods.GetWindowDC(desk); + var a = (int)InteropMethods.GetPixel(dc, x, y); + InteropMethods.ReleaseDC(desk, dc); return Color.FromArgb(255, (byte) ((a >> 0) & 0xff), (byte) ((a >> 8) & 0xff), (byte) ((a >> 16) & 0xff)); } } diff --git a/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs b/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs index 988b72c4..831d7f22 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs @@ -33,7 +33,7 @@ namespace HandyControl.Controls private IconHandle _iconHandle; - private const int WmTrayMouseMessage = NativeMethods.WM_USER + 1024; + private const int WmTrayMouseMessage = InteropValues.WM_USER + 1024; private string _windowClassName; @@ -41,7 +41,7 @@ namespace HandyControl.Controls private IntPtr _messageWindowHandle; - private readonly WndProc _callback; + private readonly InteropValues.WndProc _callback; private Popup _contextContent; @@ -165,9 +165,9 @@ namespace HandyControl.Controls { if (!_added || DesignerHelper.IsInDesignMode) return; - var data = new NOTIFYICONDATA + var data = new InteropValues.NOTIFYICONDATA { - uFlags = NativeMethods.NIF_INFO, + uFlags = InteropValues.NIF_INFO, hWnd = _messageWindowHandle, uID = _id, szInfoTitle = title ?? string.Empty, @@ -177,20 +177,20 @@ namespace HandyControl.Controls switch (infoType) { case NotifyIconInfoType.Info: - data.dwInfoFlags = NativeMethods.NIIF_INFO; + data.dwInfoFlags = InteropValues.NIIF_INFO; break; case NotifyIconInfoType.Warning: - data.dwInfoFlags = NativeMethods.NIIF_WARNING; + data.dwInfoFlags = InteropValues.NIIF_WARNING; break; case NotifyIconInfoType.Error: - data.dwInfoFlags = NativeMethods.NIIF_ERROR; + data.dwInfoFlags = InteropValues.NIIF_ERROR; break; case NotifyIconInfoType.None: - data.dwInfoFlags = NativeMethods.NIIF_NONE; + data.dwInfoFlags = InteropValues.NIIF_NONE; break; } - UnsafeNativeMethods.Shell_NotifyIcon(NativeMethods.NIM_MODIFY, data); + InteropMethods.Shell_NotifyIcon(InteropValues.NIM_MODIFY, data); } public void Dispose() @@ -330,7 +330,7 @@ namespace HandyControl.Controls { var isTrue = FindNotifyIcon(out var rectNotify); if (!isTrue) return false; - NativeMethods.GetCursorPos(out var point); + InteropMethods.GetCursorPos(out var point); if (point.X >= rectNotify.Left && point.X <= rectNotify.Right && point.Y >= rectNotify.Top && point.Y <= rectNotify.Bottom) { @@ -368,17 +368,17 @@ namespace HandyControl.Controls //referenced from http://www.cnblogs.com/sczmzx/p/5158127.html private IntPtr FindTrayToolbarWindow() { - var hWnd = NativeMethods.FindWindow("Shell_TrayWnd", null); + var hWnd = InteropMethods.FindWindow("Shell_TrayWnd", null); if (hWnd != IntPtr.Zero) { - hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "TrayNotifyWnd", null); + hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "TrayNotifyWnd", null); if (hWnd != IntPtr.Zero) { - hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "SysPager", null); + hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "SysPager", null); if (hWnd != IntPtr.Zero) { - hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null); + hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null); } } @@ -389,17 +389,17 @@ namespace HandyControl.Controls //referenced from http://www.cnblogs.com/sczmzx/p/5158127.html private IntPtr FindTrayToolbarOverFlowWindow() { - var hWnd = NativeMethods.FindWindow("NotifyIconOverflowWindow", null); + var hWnd = InteropMethods.FindWindow("NotifyIconOverflowWindow", null); if (hWnd != IntPtr.Zero) { - hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null); + hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null); } return hWnd; } - private bool FindNotifyIcon(out NativeMethods.RECT rect) + private bool FindNotifyIcon(out InteropValues.RECT rect) { - var rectNotify = new NativeMethods.RECT(); + var rectNotify = new InteropValues.RECT(); var hTrayWnd = FindTrayToolbarWindow(); var isTrue = FindNotifyIcon(hTrayWnd, ref rectNotify); if (!isTrue) @@ -412,48 +412,48 @@ namespace HandyControl.Controls } //referenced from http://www.cnblogs.com/sczmzx/p/5158127.html - private bool FindNotifyIcon(IntPtr hTrayWnd, ref NativeMethods.RECT rectNotify) + private bool FindNotifyIcon(IntPtr hTrayWnd, ref InteropValues.RECT rectNotify) { - NativeMethods.GetWindowRect(hTrayWnd, out var rectTray); - var count = (int)NativeMethods.SendMessage(hTrayWnd, NativeMethods.TB_BUTTONCOUNT, 0, IntPtr.Zero); + InteropMethods.GetWindowRect(hTrayWnd, out var rectTray); + var count = (int)InteropMethods.SendMessage(hTrayWnd, InteropValues.TB_BUTTONCOUNT, 0, IntPtr.Zero); var isFind = false; if (count > 0) { - NativeMethods.GetWindowThreadProcessId(hTrayWnd, out var trayPid); - var hProcess = NativeMethods.OpenProcess(NativeMethods.ProcessAccess.VMOperation | NativeMethods.ProcessAccess.VMRead | NativeMethods.ProcessAccess.VMWrite, false, trayPid); - var address = NativeMethods.VirtualAllocEx(hProcess, IntPtr.Zero, 1024, NativeMethods.AllocationType.Commit, NativeMethods.MemoryProtection.ReadWrite); + InteropMethods.GetWindowThreadProcessId(hTrayWnd, out var trayPid); + var hProcess = InteropMethods.OpenProcess(InteropValues.ProcessAccess.VMOperation | InteropValues.ProcessAccess.VMRead | InteropValues.ProcessAccess.VMWrite, false, trayPid); + var address = InteropMethods.VirtualAllocEx(hProcess, IntPtr.Zero, 1024, InteropValues.AllocationType.Commit, InteropValues.MemoryProtection.ReadWrite); - var btnData = new NativeMethods.TBBUTTON(); - var trayData = new NativeMethods.TRAYDATA(); + var btnData = new InteropValues.TBBUTTON(); + var trayData = new InteropValues.TRAYDATA(); var handel = Process.GetCurrentProcess().Id; for (uint i = 0; i < count; i++) { - NativeMethods.SendMessage(hTrayWnd, NativeMethods.TB_GETBUTTON, i, address); - var isTrue = NativeMethods.ReadProcessMemory(hProcess, address, out btnData, Marshal.SizeOf(btnData), out _); + InteropMethods.SendMessage(hTrayWnd, InteropValues.TB_GETBUTTON, i, address); + var isTrue = InteropMethods.ReadProcessMemory(hProcess, address, out btnData, Marshal.SizeOf(btnData), out _); if (!isTrue) continue; if (btnData.dwData == IntPtr.Zero) { btnData.dwData = btnData.iString; } - NativeMethods.ReadProcessMemory(hProcess, btnData.dwData, out trayData, Marshal.SizeOf(trayData), out _); - NativeMethods.GetWindowThreadProcessId(trayData.hwnd, out var dwProcessId); + InteropMethods.ReadProcessMemory(hProcess, btnData.dwData, out trayData, Marshal.SizeOf(trayData), out _); + InteropMethods.GetWindowThreadProcessId(trayData.hwnd, out var dwProcessId); if (dwProcessId == (uint)handel) { - var rect = new NativeMethods.RECT(); - var lngRect = NativeMethods.VirtualAllocEx(hProcess, IntPtr.Zero, Marshal.SizeOf(typeof(Rect)), NativeMethods.AllocationType.Commit, NativeMethods.MemoryProtection.ReadWrite); - NativeMethods.SendMessage(hTrayWnd, NativeMethods.TB_GETITEMRECT, i, lngRect); - NativeMethods.ReadProcessMemory(hProcess, lngRect, out rect, Marshal.SizeOf(rect), out _); + var rect = new InteropValues.RECT(); + var lngRect = InteropMethods.VirtualAllocEx(hProcess, IntPtr.Zero, Marshal.SizeOf(typeof(Rect)), InteropValues.AllocationType.Commit, InteropValues.MemoryProtection.ReadWrite); + InteropMethods.SendMessage(hTrayWnd, InteropValues.TB_GETITEMRECT, i, lngRect); + InteropMethods.ReadProcessMemory(hProcess, lngRect, out rect, Marshal.SizeOf(rect), out _); - NativeMethods.VirtualFreeEx(hProcess, lngRect, Marshal.SizeOf(rect), NativeMethods.FreeType.Decommit); - NativeMethods.VirtualFreeEx(hProcess, lngRect, 0, NativeMethods.FreeType.Release); + InteropMethods.VirtualFreeEx(hProcess, lngRect, Marshal.SizeOf(rect), InteropValues.FreeType.Decommit); + InteropMethods.VirtualFreeEx(hProcess, lngRect, 0, InteropValues.FreeType.Release); var left = rectTray.Left + rect.Left; var top = rectTray.Top + rect.Top; var botton = rectTray.Top + rect.Bottom; var right = rectTray.Left + rect.Right; - rectNotify = new NativeMethods.RECT + rectNotify = new InteropValues.RECT { Left = left, Right = right, @@ -464,9 +464,9 @@ namespace HandyControl.Controls break; } } - NativeMethods.VirtualFreeEx(hProcess, address, 0x4096, NativeMethods.FreeType.Decommit); - NativeMethods.VirtualFreeEx(hProcess, address, 0, NativeMethods.FreeType.Release); - NativeMethods.CloseHandle(hProcess); + InteropMethods.VirtualFreeEx(hProcess, address, 0x4096, InteropValues.FreeType.Decommit); + InteropMethods.VirtualFreeEx(hProcess, address, 0, InteropValues.FreeType.Release); + InteropMethods.CloseHandle(hProcess); } return isFind; } @@ -496,13 +496,13 @@ namespace HandyControl.Controls if (DesignerHelper.IsInDesignMode) return; _isTransparent = isTransparent; - var data = new NOTIFYICONDATA + var data = new InteropValues.NOTIFYICONDATA { uCallbackMessage = WmTrayMouseMessage, - uFlags = NativeMethods.NIF_MESSAGE | NativeMethods.NIF_ICON | NativeMethods.NIF_TIP, + uFlags = InteropValues.NIF_MESSAGE | InteropValues.NIF_ICON | InteropValues.NIF_TIP, hWnd = _messageWindowHandle, uID = _id, - dwInfoFlags = NativeMethods.NIF_TIP, + dwInfoFlags = InteropValues.NIF_TIP, hIcon = isTransparent ? IntPtr.Zero : _iconCurrentHandle, szTip = Text }; @@ -511,17 +511,17 @@ namespace HandyControl.Controls { if (!_added) { - UnsafeNativeMethods.Shell_NotifyIcon(NativeMethods.NIM_ADD, data); + InteropMethods.Shell_NotifyIcon(InteropValues.NIM_ADD, data); _added = true; } else { - UnsafeNativeMethods.Shell_NotifyIcon(NativeMethods.NIM_MODIFY, data); + InteropMethods.Shell_NotifyIcon(InteropValues.NIM_MODIFY, data); } } else if (_added) { - UnsafeNativeMethods.Shell_NotifyIcon(NativeMethods.NIM_DELETE, data); + InteropMethods.Shell_NotifyIcon(InteropValues.NIM_DELETE, data); _added = false; } } @@ -530,7 +530,7 @@ namespace HandyControl.Controls private void RegisterClass() { _windowClassName = $"HandyControl.Controls.NotifyIcon{Guid.NewGuid()}"; - var wndclass = new WNDCLASS + var wndclass = new InteropValues.WNDCLASS { style = 0, lpfnWndProc = _callback, @@ -544,9 +544,9 @@ namespace HandyControl.Controls lpszClassName = _windowClassName }; - UnsafeNativeMethods.RegisterClass(wndclass); - _wmTaskbarCreated = NativeMethods.RegisterWindowMessage("TaskbarCreated"); - _messageWindowHandle = UnsafeNativeMethods.CreateWindowEx(0, _windowClassName, "", 0, 0, 0, 1, 1, + InteropMethods.RegisterClass(wndclass); + _wmTaskbarCreated = InteropMethods.RegisterWindowMessage("TaskbarCreated"); + _messageWindowHandle = InteropMethods.CreateWindowEx(0, _windowClassName, "", 0, 0, 0, 1, 1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); } @@ -562,17 +562,17 @@ namespace HandyControl.Controls { switch (lparam.ToInt64()) { - case NativeMethods.WM_LBUTTONDBLCLK: + case InteropValues.WM_LBUTTONDBLCLK: WmMouseDown(MouseButton.Left, 2); break; - case NativeMethods.WM_LBUTTONUP: + case InteropValues.WM_LBUTTONUP: WmMouseUp(MouseButton.Left); break; - case NativeMethods.WM_RBUTTONUP: + case InteropValues.WM_RBUTTONUP: ShowContextMenu(); WmMouseUp(MouseButton.Right); break; - case NativeMethods.WM_MOUSEMOVE: + case InteropValues.WM_MOUSEMOVE: if (!_dispatcherTimerPos.IsEnabled) { _dispatcherTimerPos.Interval = TimeSpan.FromMilliseconds(200); @@ -583,7 +583,7 @@ namespace HandyControl.Controls } } - return UnsafeNativeMethods.DefWindowProc(hWnd, msg, wparam, lparam); + return InteropMethods.DefWindowProc(hWnd, msg, wparam, lparam); } private void WmMouseDown(MouseButton button, int clicks) @@ -632,7 +632,7 @@ namespace HandyControl.Controls Content = ContextContent }; _contextContent.IsOpen = true; - UnsafeNativeMethods.SetForegroundWindow(_contextContent.Child.GetHandle()); + InteropMethods.SetForegroundWindow(_contextContent.Child.GetHandle()); } else if (ContextMenu != null) { @@ -655,7 +655,7 @@ namespace HandyControl.Controls ContextMenu.Placement = PlacementMode.Mouse; ContextMenu.IsOpen = true; - UnsafeNativeMethods.SetForegroundWindow(ContextMenu.GetHandle()); + InteropMethods.SetForegroundWindow(ContextMenu.GetHandle()); } } diff --git a/src/Shared/HandyControl_Shared/Data/Args/MouseHookEventArgs.cs b/src/Shared/HandyControl_Shared/Data/Args/MouseHookEventArgs.cs index 9c6b03fd..b63114ec 100644 --- a/src/Shared/HandyControl_Shared/Data/Args/MouseHookEventArgs.cs +++ b/src/Shared/HandyControl_Shared/Data/Args/MouseHookEventArgs.cs @@ -7,6 +7,6 @@ namespace HandyControl.Data { public MouseHookMessageType Message { get; set; } - public NativeMethods.POINT Point { get; set; } + public InteropValues.POINT Point { get; set; } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems index 9a285e77..bf76311c 100644 --- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems +++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems @@ -310,20 +310,14 @@ - - - - - - - - - - - - - - + + + + + + + + @@ -944,4 +938,7 @@ + + + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Interactivity/Commands/PushMainWindow2TopCommand.cs b/src/Shared/HandyControl_Shared/Interactivity/Commands/PushMainWindow2TopCommand.cs index 65e96979..07a2427c 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/Commands/PushMainWindow2TopCommand.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/Commands/PushMainWindow2TopCommand.cs @@ -18,7 +18,7 @@ namespace HandyControl.Interactivity var hwndSource = (HwndSource)PresentationSource.FromDependencyObject(Application.Current.MainWindow); if (hwndSource != null) { - UnsafeNativeMethods.SetForegroundWindow(hwndSource.Handle); + InteropMethods.SetForegroundWindow(hwndSource.Handle); } } } diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/IconHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/IconHelper.cs index 225302dd..37b68989 100644 --- a/src/Shared/HandyControl_Shared/Tools/Helper/IconHelper.cs +++ b/src/Shared/HandyControl_Shared/Tools/Helper/IconHelper.cs @@ -79,13 +79,13 @@ namespace HandyControl.Tools try { - var bi = new BITMAPINFO(width, -height, 32) + var bi = new InteropValues.BITMAPINFO(width, -height, 32) { - bmiHeader_biCompression = NativeMethods.BI_RGB + bmiHeader_biCompression = InteropValues.BI_RGB }; var bits = IntPtr.Zero; - colorBitmap = UnsafeNativeMethods.CreateDIBSection(new HandleRef(null, IntPtr.Zero), ref bi, NativeMethods.DIB_RGB_COLORS, ref bits, null, 0); + colorBitmap = InteropMethods.CreateDIBSection(new HandleRef(null, IntPtr.Zero), ref bi, InteropValues.DIB_RGB_COLORS, ref bits, null, 0); if (colorBitmap.IsInvalid || bits == IntPtr.Zero) { @@ -95,13 +95,13 @@ namespace HandyControl.Tools Marshal.Copy(colorArray, 0, bits, colorArray.Length); var maskArray = GenerateMaskArray(width, height, colorArray); - maskBitmap = UnsafeNativeMethods.CreateBitmap(width, height, 1, 1, maskArray); + maskBitmap = InteropMethods.CreateBitmap(width, height, 1, 1, maskArray); if (maskBitmap.IsInvalid) { return IconHandle.GetInvalidIcon(); } - var iconInfo = new ICONINFO + var iconInfo = new InteropValues.ICONINFO { fIcon = isIcon, xHotspot = xHotspot, @@ -110,7 +110,7 @@ namespace HandyControl.Tools hbmColor = colorBitmap }; - return UnsafeNativeMethods.CreateIconIndirect(iconInfo); + return InteropMethods.CreateIconIndirect(iconInfo); } finally { @@ -252,21 +252,21 @@ namespace HandyControl.Tools { if (SystemBitDepth == 0) { - var hdcDesktop = new HandleRef(null, UnsafeNativeMethods.GetDC(new HandleRef())); + var hdcDesktop = new HandleRef(null, InteropMethods.GetDC(new HandleRef())); try { - var sysBitDepth = UnsafeNativeMethods.GetDeviceCaps(hdcDesktop, NativeMethods.BITSPIXEL); - sysBitDepth *= UnsafeNativeMethods.GetDeviceCaps(hdcDesktop, NativeMethods.PLANES); + var sysBitDepth = InteropMethods.GetDeviceCaps(hdcDesktop, InteropValues.BITSPIXEL); + sysBitDepth *= InteropMethods.GetDeviceCaps(hdcDesktop, InteropValues.PLANES); if (sysBitDepth == 8) { sysBitDepth = 4; } - var cxSmallIcon = UnsafeNativeMethods.GetSystemMetrics(SM.CXSMICON); - var cySmallIcon = UnsafeNativeMethods.GetSystemMetrics(SM.CYSMICON); - var cxIcon = UnsafeNativeMethods.GetSystemMetrics(SM.CXICON); - var cyIcon = UnsafeNativeMethods.GetSystemMetrics(SM.CYICON); + var cxSmallIcon = InteropMethods.GetSystemMetrics(InteropValues.SM.CXSMICON); + var cySmallIcon = InteropMethods.GetSystemMetrics(InteropValues.SM.CYSMICON); + var cxIcon = InteropMethods.GetSystemMetrics(InteropValues.SM.CXICON); + var cyIcon = InteropMethods.GetSystemMetrics(InteropValues.SM.CYICON); SmallIconSize = new Size(cxSmallIcon, cySmallIcon); IconSize = new Size(cxIcon, cyIcon); @@ -274,7 +274,7 @@ namespace HandyControl.Tools } finally { - UnsafeNativeMethods.ReleaseDC(new HandleRef(), hdcDesktop); + InteropMethods.ReleaseDC(new HandleRef(), hdcDesktop); } } } @@ -287,8 +287,8 @@ namespace HandyControl.Tools SecurityHelper.DemandUIWindowPermission(); - var iconModuleFile = UnsafeNativeMethods.GetModuleFileName(new HandleRef()); - UnsafeNativeMethods.ExtractIconEx(iconModuleFile, 0, out largeIconHandle, out smallIconHandle, 1); + var iconModuleFile = InteropMethods.GetModuleFileName(new HandleRef()); + InteropMethods.ExtractIconEx(iconModuleFile, 0, out largeIconHandle, out smallIconHandle, 1); } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs index c606d165..818df6bc 100644 --- a/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs +++ b/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs @@ -19,7 +19,7 @@ namespace HandyControl.Tools /// public static Window GetActiveWindow() => Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive); - private static readonly BitArray _cacheValid = new BitArray((int)CacheSlot.NumSlots); + private static readonly BitArray _cacheValid = new BitArray((int)InteropValues.CacheSlot.NumSlots); private static bool _setDpiX = true; @@ -43,7 +43,7 @@ namespace HandyControl.Tools var desktopWnd = new HandleRef(null, IntPtr.Zero); // Win32Exception will get the Win32 error code so we don't have to - var dc = UnsafeNativeMethods.GetDC(desktopWnd); + var dc = InteropMethods.GetDC(desktopWnd); // Detecting error case from unmanaged call, required by PREsharp to throw a Win32Exception if (dc == IntPtr.Zero) @@ -53,12 +53,12 @@ namespace HandyControl.Tools try { - _dpi = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, dc), NativeMethods.LOGPIXELSY); + _dpi = InteropMethods.GetDeviceCaps(new HandleRef(null, dc), InteropValues.LOGPIXELSY); _dpiInitialized = true; } finally { - UnsafeNativeMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc)); + InteropMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc)); } } } @@ -82,19 +82,19 @@ namespace HandyControl.Tools { _setDpiX = false; var desktopWnd = new HandleRef(null, IntPtr.Zero); - var dc = UnsafeNativeMethods.GetDC(desktopWnd); + var dc = InteropMethods.GetDC(desktopWnd); if (dc == IntPtr.Zero) { throw new Win32Exception(); } try { - _dpiX = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, dc), NativeMethods.LOGPIXELSX); - _cacheValid[(int)CacheSlot.DpiX] = true; + _dpiX = InteropMethods.GetDeviceCaps(new HandleRef(null, dc), InteropValues.LOGPIXELSX); + _cacheValid[(int)InteropValues.CacheSlot.DpiX] = true; } finally { - UnsafeNativeMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc)); + InteropMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc)); } } } @@ -113,11 +113,11 @@ namespace HandyControl.Tools { lock (_cacheValid) { - while (!_cacheValid[(int)CacheSlot.WindowResizeBorderThickness]) + while (!_cacheValid[(int)InteropValues.CacheSlot.WindowResizeBorderThickness]) { - _cacheValid[(int)CacheSlot.WindowResizeBorderThickness] = true; + _cacheValid[(int)InteropValues.CacheSlot.WindowResizeBorderThickness] = true; - var frameSize = new Size(NativeMethods.GetSystemMetrics(SM.CXSIZEFRAME), NativeMethods.GetSystemMetrics(SM.CYSIZEFRAME)); + var frameSize = new Size(InteropMethods.GetSystemMetrics(InteropValues.SM.CXSIZEFRAME), InteropMethods.GetSystemMetrics(InteropValues.SM.CYSIZEFRAME)); var frameSizeInDips = DpiHelper.DeviceSizeToLogical(frameSize, DpiX / 96.0, Dpi / 96.0); _windowResizeBorderThickness = new Thickness(frameSizeInDips.Width, frameSizeInDips.Height, frameSizeInDips.Width, frameSizeInDips.Height); @@ -135,9 +135,9 @@ namespace HandyControl.Tools #if netle40 return WindowResizeBorderThickness; #elif Core - var hdc = UnsafeNativeMethods.GetDC(IntPtr.Zero); - var scale = UnsafeNativeMethods.GetDeviceCaps(hdc, NativeMethods.DESKTOPVERTRES) / (float)UnsafeNativeMethods.GetDeviceCaps(hdc, NativeMethods.VERTRES); - UnsafeNativeMethods.ReleaseDC(IntPtr.Zero, hdc); + var hdc = InteropMethods.GetDC(IntPtr.Zero); + var scale = InteropMethods.GetDeviceCaps(hdc, InteropValues.DESKTOPVERTRES) / (float)InteropMethods.GetDeviceCaps(hdc, InteropValues.VERTRES); + InteropMethods.ReleaseDC(IntPtr.Zero, hdc); return WindowResizeBorderThickness.Add(new Thickness(4 * scale)); #else return WindowResizeBorderThickness.Add(new Thickness(4)); diff --git a/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs b/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs index b98bb50a..61c9fc8f 100644 --- a/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs +++ b/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs @@ -24,19 +24,19 @@ namespace HandyControl.Tools if (HWndSource != null) { HWndSource.AddHook(WinProc); - NativeMethods.AddClipboardFormatListener(HookId); + InteropMethods.AddClipboardFormatListener(HookId); } } public static void Stop() { HWndSource.RemoveHook(WinProc); - NativeMethods.RemoveClipboardFormatListener(HookId); + InteropMethods.RemoveClipboardFormatListener(HookId); } private static IntPtr WinProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled) { - if (msg == NativeMethods.WM_CLIPBOARDUPDATE) + if (msg == InteropValues.WM_CLIPBOARDUPDATE) { ContentChanged?.Invoke(); } diff --git a/src/Shared/HandyControl_Shared/Tools/Hook/KeyboardHook.cs b/src/Shared/HandyControl_Shared/Tools/Hook/KeyboardHook.cs index 07ce92b6..58388c83 100644 --- a/src/Shared/HandyControl_Shared/Tools/Hook/KeyboardHook.cs +++ b/src/Shared/HandyControl_Shared/Tools/Hook/KeyboardHook.cs @@ -14,17 +14,17 @@ namespace HandyControl.Tools private static IntPtr HookId = IntPtr.Zero; - private static readonly UnsafeNativeMethods.HookProc Proc = HookCallback; + private static readonly InteropValues.HookProc Proc = HookCallback; private static int VirtualKey; - private static readonly IntPtr KeyDownIntPtr = (IntPtr)NativeMethods.WM_KEYDOWN; + private static readonly IntPtr KeyDownIntPtr = (IntPtr)InteropValues.WM_KEYDOWN; - private static readonly IntPtr KeyUpIntPtr = (IntPtr)NativeMethods.WM_KEYUP; + private static readonly IntPtr KeyUpIntPtr = (IntPtr)InteropValues.WM_KEYUP; - private static readonly IntPtr SyskeyDownIntPtr = (IntPtr)NativeMethods.WM_SYSKEYDOWN; + private static readonly IntPtr SyskeyDownIntPtr = (IntPtr)InteropValues.WM_SYSKEYDOWN; - private static readonly IntPtr SyskeyUpIntPtr = (IntPtr)NativeMethods.WM_SYSKEYUP; + private static readonly IntPtr SyskeyUpIntPtr = (IntPtr)InteropValues.WM_SYSKEYUP; public static void Start() { @@ -35,17 +35,17 @@ namespace HandyControl.Tools HookId = SetHook(Proc); } - public static void Stop() => UnsafeNativeMethods.UnhookWindowsHookEx(HookId); + public static void Stop() => InteropMethods.UnhookWindowsHookEx(HookId); - private static IntPtr SetHook(UnsafeNativeMethods.HookProc proc) + private static IntPtr SetHook(InteropValues.HookProc proc) { using (var curProcess = Process.GetCurrentProcess()) using (var curModule = curProcess.MainModule) { if (curModule != null) { - return UnsafeNativeMethods.SetWindowsHookEx((int)UnsafeNativeMethods.HookType.WH_KEYBOARD_LL, proc, - UnsafeNativeMethods.GetModuleHandle(curModule.ModuleName), 0); + return InteropMethods.SetWindowsHookEx((int)InteropValues.HookType.WH_KEYBOARD_LL, proc, + InteropMethods.GetModuleHandle(curModule.ModuleName), 0); } return IntPtr.Zero; } @@ -86,7 +86,7 @@ namespace HandyControl.Tools KeyUp?.Invoke(null, new KeyboardHookEventArgs(virtualKey, true)); } } - return UnsafeNativeMethods.CallNextHookEx(HookId, nCode, wParam, lParam); + return InteropMethods.CallNextHookEx(HookId, nCode, wParam, lParam); } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Hook/MouseHook.cs b/src/Shared/HandyControl_Shared/Tools/Hook/MouseHook.cs index 5405c6cf..90b1f0d6 100644 --- a/src/Shared/HandyControl_Shared/Tools/Hook/MouseHook.cs +++ b/src/Shared/HandyControl_Shared/Tools/Hook/MouseHook.cs @@ -12,7 +12,7 @@ namespace HandyControl.Tools private static IntPtr HookId = IntPtr.Zero; - private static readonly UnsafeNativeMethods.HookProc Proc = HookCallback; + private static readonly InteropValues.HookProc Proc = HookCallback; public static void Start() { @@ -23,17 +23,17 @@ namespace HandyControl.Tools HookId = SetHook(Proc); } - public static void Stop() => UnsafeNativeMethods.UnhookWindowsHookEx(HookId); + public static void Stop() => InteropMethods.UnhookWindowsHookEx(HookId); - private static IntPtr SetHook(UnsafeNativeMethods.HookProc proc) + private static IntPtr SetHook(InteropValues.HookProc proc) { using (var curProcess = Process.GetCurrentProcess()) using (var curModule = curProcess.MainModule) { if (curModule != null) { - return UnsafeNativeMethods.SetWindowsHookEx((int) UnsafeNativeMethods.HookType.WH_MOUSE_LL, proc, - UnsafeNativeMethods.GetModuleHandle(curModule.ModuleName), 0); + return InteropMethods.SetWindowsHookEx((int)InteropValues.HookType.WH_MOUSE_LL, proc, + InteropMethods.GetModuleHandle(curModule.ModuleName), 0); } return IntPtr.Zero; } @@ -41,15 +41,15 @@ namespace HandyControl.Tools private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { - if (nCode < 0) return UnsafeNativeMethods.CallNextHookEx(HookId, nCode, wParam, lParam); - var hookStruct = (UnsafeNativeMethods.MOUSEHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(UnsafeNativeMethods.MOUSEHOOKSTRUCT)); + if (nCode < 0) return InteropMethods.CallNextHookEx(HookId, nCode, wParam, lParam); + var hookStruct = (InteropValues.MOUSEHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(InteropValues.MOUSEHOOKSTRUCT)); StatusChanged?.Invoke(null, new MouseHookEventArgs { Message = (MouseHookMessageType)wParam, - Point = new NativeMethods.POINT(hookStruct.pt.X, hookStruct.pt.Y) + Point = new InteropValues.POINT(hookStruct.pt.X, hookStruct.pt.Y) }); - return UnsafeNativeMethods.CallNextHookEx(HookId, nCode, wParam, lParam); + return InteropMethods.CallNextHookEx(HookId, nCode, wParam, lParam); } } } diff --git a/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs b/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs index afe6f66b..af10084f 100644 --- a/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs +++ b/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs @@ -19,14 +19,14 @@ namespace HandyControl.Tools if (source != null) { DataDic[id] = source; - NativeMethods.InsertMenu(NativeMethods.GetSystemMenu(hookId, false), index, NativeMethods.MF_BYPOSITION, id, text); + InteropMethods.InsertMenu(InteropMethods.GetSystemMenu(hookId, false), index, InteropValues.MF_BYPOSITION, id, text); source.AddHook(WinProc); } } - public static void InsertSeperator(int index, Window window) => NativeMethods.InsertMenu( - NativeMethods.GetSystemMenu(window.GetHandle(), false), index, - NativeMethods.MF_BYPOSITION | NativeMethods.MF_SEPARATOR, 0, ""); + public static void InsertSeperator(int index, Window window) => InteropMethods.InsertMenu( + InteropMethods.GetSystemMenu(window.GetHandle(), false), index, + InteropValues.MF_BYPOSITION | InteropValues.MF_SEPARATOR, 0, ""); public static void Remove(int id) { @@ -39,7 +39,7 @@ namespace HandyControl.Tools private static IntPtr WinProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled) { - if (msg == NativeMethods.WM_SYSCOMMAND) + if (msg == InteropValues.WM_SYSCOMMAND) { var id = wparam.ToInt32(); if (DataDic.ContainsKey(id)) diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/BITMAPINFO.cs b/src/Shared/HandyControl_Shared/Tools/Interop/BITMAPINFO.cs deleted file mode 100644 index 4938fbdd..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/BITMAPINFO.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace HandyControl.Tools.Interop -{ - [StructLayout(LayoutKind.Sequential, Pack = 2)] - [SuppressMessage("ReSharper", "InconsistentNaming")] - internal struct BITMAPINFO - { - public int bmiHeader_biSize; - - public int bmiHeader_biWidth; - - public int bmiHeader_biHeight; - - public short bmiHeader_biPlanes; - - public short bmiHeader_biBitCount; - - public int bmiHeader_biCompression; - - public int bmiHeader_biSizeImage; - - public int bmiHeader_biXPelsPerMeter; - - public int bmiHeader_biYPelsPerMeter; - - public int bmiHeader_biClrUsed; - - public int bmiHeader_biClrImportant; - - public BITMAPINFO(int width, int height, short bpp) - { - bmiHeader_biSize = SizeOf(); - bmiHeader_biWidth = width; - bmiHeader_biHeight = height; - bmiHeader_biPlanes = 1; - bmiHeader_biBitCount = bpp; - bmiHeader_biCompression = 0; - bmiHeader_biSizeImage = 0; - bmiHeader_biXPelsPerMeter = 0; - bmiHeader_biYPelsPerMeter = 0; - bmiHeader_biClrUsed = 0; - bmiHeader_biClrImportant = 0; - } - - [SecuritySafeCritical] - private static int SizeOf() - { - return Marshal.SizeOf(typeof(BITMAPINFO)); - } - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/ExternDll.cs b/src/Shared/HandyControl_Shared/Tools/Interop/ExternDll.cs deleted file mode 100644 index 81fa0c71..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/ExternDll.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace HandyControl.Tools.Interop -{ - internal static class ExternDll - { - public const string - User32 = "user32.dll", - Gdi32 = "gdi32.dll", - Kernel32 = "kernel32.dll", - Shell32 = "shell32.dll"; - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/BitmapHandle.cs b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/BitmapHandle.cs similarity index 95% rename from src/Shared/HandyControl_Shared/Tools/Interop/BitmapHandle.cs rename to src/Shared/HandyControl_Shared/Tools/Interop/Handle/BitmapHandle.cs index 1e893fa9..2fda6685 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/BitmapHandle.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/BitmapHandle.cs @@ -24,7 +24,7 @@ namespace HandyControl.Tools.Interop [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] protected override bool ReleaseHandle() { - return UnsafeNativeMethods.DeleteObject(handle); + return InteropMethods.DeleteObject(handle); } [SecurityCritical] diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/CommonHandles.cs b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/CommonHandles.cs similarity index 100% rename from src/Shared/HandyControl_Shared/Tools/Interop/CommonHandles.cs rename to src/Shared/HandyControl_Shared/Tools/Interop/Handle/CommonHandles.cs diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/HandleCollector.cs b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/HandleCollector.cs similarity index 100% rename from src/Shared/HandyControl_Shared/Tools/Interop/HandleCollector.cs rename to src/Shared/HandyControl_Shared/Tools/Interop/Handle/HandleCollector.cs diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/IconHandle.cs b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/IconHandle.cs similarity index 92% rename from src/Shared/HandyControl_Shared/Tools/Interop/IconHandle.cs rename to src/Shared/HandyControl_Shared/Tools/Interop/Handle/IconHandle.cs index cbaec541..96de9b10 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/IconHandle.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/IconHandle.cs @@ -15,7 +15,7 @@ namespace HandyControl.Tools.Interop [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] protected override bool ReleaseHandle() { - return UnsafeNativeMethods.DestroyIcon(handle); + return InteropMethods.DestroyIcon(handle); } [SecurityCritical, SecuritySafeCritical] diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/SafeFileMappingHandle.cs b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/SafeFileMappingHandle.cs similarity index 95% rename from src/Shared/HandyControl_Shared/Tools/Interop/SafeFileMappingHandle.cs rename to src/Shared/HandyControl_Shared/Tools/Interop/Handle/SafeFileMappingHandle.cs index ad26db90..c4aade37 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/SafeFileMappingHandle.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/SafeFileMappingHandle.cs @@ -43,7 +43,7 @@ namespace HandyControl.Tools.Interop public static bool CloseHandleNoThrow(HandleRef handle) { HandleCollector.Remove((IntPtr)handle, CommonHandles.Kernel); - var result = UnsafeNativeMethods.IntCloseHandle(handle); + var result = InteropMethods.IntCloseHandle(handle); return result; } } diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/WpfSafeHandle.cs b/src/Shared/HandyControl_Shared/Tools/Interop/Handle/WpfSafeHandle.cs similarity index 100% rename from src/Shared/HandyControl_Shared/Tools/Interop/WpfSafeHandle.cs rename to src/Shared/HandyControl_Shared/Tools/Interop/Handle/WpfSafeHandle.cs diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/ICONINFO.cs b/src/Shared/HandyControl_Shared/Tools/Interop/ICONINFO.cs deleted file mode 100644 index 659c98e6..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/ICONINFO.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace HandyControl.Tools.Interop -{ - [StructLayout(LayoutKind.Sequential)] - [SuppressMessage("ReSharper", "InconsistentNaming")] - internal class ICONINFO - { - public bool fIcon = false; - public int xHotspot = 0; - public int yHotspot = 0; - public BitmapHandle hbmMask = null; - public BitmapHandle hbmColor = null; - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs new file mode 100644 index 00000000..965ad3c5 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs @@ -0,0 +1,281 @@ +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; +using System.Security; +using System.Text; + +namespace HandyControl.Tools.Interop +{ + internal class InteropMethods + { + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto)] + [ResourceExposure(ResourceScope.None)] + public static extern int RegisterWindowMessage(string msg); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, ref InteropValues.RECT lpPoints, uint cPoints); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out InteropValues.TBBUTTON lpBuffer, + int dwSize, out int lpNumberOfBytesRead); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true)] + public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out InteropValues.RECT lpBuffer, + int dwSize, out int lpNumberOfBytesRead); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true)] + public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out InteropValues.TRAYDATA lpBuffer, + int dwSize, out int lpNumberOfBytesRead); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto)] + public static extern uint SendMessage(IntPtr hWnd, uint Msg, uint wParam, IntPtr lParam); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern IntPtr OpenProcess(InteropValues.ProcessAccess dwDesiredAccess, + [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, + InteropValues.AllocationType flAllocationType, InteropValues.MemoryProtection flProtect); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern int CloseHandle(IntPtr hObject); + + [DllImport(InteropValues.ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] + public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, InteropValues.FreeType dwFreeType); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true)] + public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true)] + public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, + string lpszWindow); + + [DllImport(InteropValues.ExternDll.User32)] + public static extern int GetWindowRect(IntPtr hwnd, out InteropValues.RECT lpRect); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto)] + public static extern bool GetCursorPos(out InteropValues.POINT pt); + + [DllImport(InteropValues.ExternDll.User32)] + public static extern IntPtr GetDesktopWindow(); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool AddClipboardFormatListener(IntPtr hwnd); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool RemoveClipboardFormatListener(IntPtr hwnd); + + [DllImport(InteropValues.ExternDll.User32)] + public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); + + [DllImport(InteropValues.ExternDll.User32)] + public static extern bool InsertMenu(IntPtr hMenu, int wPosition, int wFlags, int wIDNewItem, string lpNewItem); + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.User32, SetLastError = true, ExactSpelling = true, EntryPoint = nameof(GetDC), + CharSet = CharSet.Auto)] + public static extern IntPtr IntGetDC(HandleRef hWnd); + + [SecurityCritical] + public static IntPtr GetDC(HandleRef hWnd) + { + var hDc = IntGetDC(hWnd); + if (hDc == IntPtr.Zero) throw new Win32Exception(); + + return HandleCollector.Add(hDc, CommonHandles.HDC); + } + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.User32, ExactSpelling = true, EntryPoint = nameof(ReleaseDC), CharSet = CharSet.Auto)] + public static extern int IntReleaseDC(HandleRef hWnd, HandleRef hDC); + + [SecurityCritical] + public static int ReleaseDC(HandleRef hWnd, HandleRef hDC) + { + HandleCollector.Remove((IntPtr) hDC, CommonHandles.HDC); + return IntReleaseDC(hWnd, hDC); + } + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto)] + public static extern int GetDeviceCaps(HandleRef hDC, int nIndex); + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.User32)] + public static extern int GetSystemMetrics(InteropValues.SM nIndex); + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.User32, EntryPoint = nameof(DestroyIcon), CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool IntDestroyIcon(IntPtr hIcon); + + [SecurityCritical] + public static bool DestroyIcon(IntPtr hIcon) + { + var result = IntDestroyIcon(hIcon); + return result; + } + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.Gdi32, EntryPoint = nameof(DeleteObject), CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool IntDeleteObject(IntPtr hObject); + + [SecurityCritical] + public static bool DeleteObject(IntPtr hObject) + { + var result = IntDeleteObject(hObject); + return result; + } + + [SecurityCritical] + public static BitmapHandle CreateDIBSection(HandleRef hdc, ref InteropValues.BITMAPINFO bitmapInfo, int iUsage, + ref IntPtr ppvBits, SafeFileMappingHandle hSection, int dwOffset) + { + if (hSection == null) hSection = new SafeFileMappingHandle(IntPtr.Zero); + + var hBitmap = PrivateCreateDIBSection(hdc, ref bitmapInfo, iUsage, ref ppvBits, hSection, dwOffset); + return hBitmap; + } + + [DllImport(InteropValues.ExternDll.Kernel32, EntryPoint = "CloseHandle", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool IntCloseHandle(HandleRef handle); + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto, + EntryPoint = nameof(CreateDIBSection))] + private static extern BitmapHandle PrivateCreateDIBSection(HandleRef hdc, ref InteropValues.BITMAPINFO bitmapInfo, int iUsage, + ref IntPtr ppvBits, SafeFileMappingHandle hSection, int dwOffset); + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.User32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto, + EntryPoint = nameof(CreateIconIndirect))] + private static extern IconHandle PrivateCreateIconIndirect([In] [MarshalAs(UnmanagedType.LPStruct)] + InteropValues.ICONINFO iconInfo); + + [SecurityCritical] + public static IconHandle CreateIconIndirect([In] [MarshalAs(UnmanagedType.LPStruct)] + InteropValues.ICONINFO iconInfo) + { + var hIcon = PrivateCreateIconIndirect(iconInfo); + return hIcon; + } + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto, + EntryPoint = nameof(CreateBitmap))] + private static extern BitmapHandle PrivateCreateBitmap(int width, int height, int planes, int bitsPerPixel, + byte[] lpvBits); + + [SecurityCritical] + internal static BitmapHandle CreateBitmap(int width, int height, int planes, int bitsPerPixel, byte[] lpvBits) + { + var hBitmap = PrivateCreateBitmap(width, height, planes, bitsPerPixel, lpvBits); + return hBitmap; + } + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.Kernel32, EntryPoint = "GetModuleFileName", CharSet = CharSet.Unicode, + SetLastError = true)] + private static extern int IntGetModuleFileName(HandleRef hModule, StringBuilder buffer, int length); + + [SecurityCritical] + internal static string GetModuleFileName(HandleRef hModule) + { + var buffer = new StringBuilder(InteropValues.Win32Constant.MAX_PATH); + while (true) + { + var size = IntGetModuleFileName(hModule, buffer, buffer.Capacity); + if (size == 0) throw new Win32Exception(); + + if (size == buffer.Capacity) + { + buffer.EnsureCapacity(buffer.Capacity * 2); + continue; + } + + return buffer.ToString(); + } + } + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.Shell32, CharSet = CharSet.Auto, BestFitMapping = false, ThrowOnUnmappableChar = true)] + internal static extern int ExtractIconEx(string szExeFileName, int nIconIndex, out IconHandle phiconLarge, + out IconHandle phiconSmall, int nIcons); + + [DllImport(InteropValues.ExternDll.Shell32, CharSet = CharSet.Auto)] + public static extern int Shell_NotifyIcon(int message, InteropValues.NOTIFYICONDATA pnid); + + [SecurityCritical] + [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + [DllImport(InteropValues.ExternDll.User32, SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateWindowExW")] + public static extern IntPtr CreateWindowEx( + int dwExStyle, + [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, + [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, + int dwStyle, + int x, + int y, + int nWidth, + int nHeight, + IntPtr hWndParent, + IntPtr hMenu, + IntPtr hInstance, + IntPtr lpParam); + + [SecurityCritical] + [SuppressUnmanagedCodeSecurity] + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)] + public static extern short RegisterClass(InteropValues.WNDCLASS wc); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto)] + public static extern IntPtr DefWindowProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + [DllImport(InteropValues.ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)] + public static extern bool SetForegroundWindow(IntPtr hWnd); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto, SetLastError = true)] + public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); + + [DllImport(InteropValues.ExternDll.Kernel32, CharSet = CharSet.Auto, SetLastError = true)] + public static extern IntPtr GetModuleHandle(string lpModuleName); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool UnhookWindowsHookEx(IntPtr hhk); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto, SetLastError = true)] + public static extern IntPtr SetWindowsHookEx(int idHook, InteropValues.HookProc lpfn, IntPtr hMod, uint dwThreadId); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true)] + public static extern IntPtr GetWindowDC(IntPtr window); + + [DllImport(InteropValues.ExternDll.Gdi32, SetLastError = true)] + public static extern uint GetPixel(IntPtr dc, int x, int y); + + [DllImport(InteropValues.ExternDll.User32, SetLastError = true)] + public static extern int ReleaseDC(IntPtr window, IntPtr dc); + + [DllImport(InteropValues.ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto)] + public static extern int GetDeviceCaps(IntPtr hdc, int nIndex); + + [DllImport(InteropValues.ExternDll.User32, CharSet = CharSet.Auto)] + public static extern IntPtr GetDC(IntPtr ptr); + } +} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs new file mode 100644 index 00000000..dc2c7cd0 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs @@ -0,0 +1,532 @@ +using System; +using System.Runtime.InteropServices; +using System.Security; + +namespace HandyControl.Tools.Interop +{ + public class InteropValues + { + #region public + + public delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam); + + public delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + public const int + WS_CHILD = 0x40000000, + BITSPIXEL = 12, + PLANES = 14, + BI_RGB = 0, + DIB_RGB_COLORS = 0, + NIF_MESSAGE = 0x00000001, + NIF_ICON = 0x00000002, + NIF_TIP = 0x00000004, + NIF_INFO = 0x00000010, + NIN_BALLOONSHOW = WM_USER + 2, + NIN_BALLOONHIDE = WM_USER + 3, + NIN_BALLOONTIMEOUT = WM_USER + 4, + NIM_ADD = 0x00000000, + NIM_MODIFY = 0x00000001, + NIM_DELETE = 0x00000002, + NIIF_NONE = 0x00000000, + NIIF_INFO = 0x00000001, + NIIF_WARNING = 0x00000002, + NIIF_ERROR = 0x00000003, + NIIF_LARGE_ICON = 0x00000020, + WM_KEYDOWN = 0x0100, + WM_KEYUP = 0x0101, + WM_SYSKEYDOWN = 0x0104, + WM_SYSKEYUP = 0x0105, + WM_SYSCOMMAND = 0x112, + WM_MOUSEMOVE = 0x0200, + WM_LBUTTONDOWN = 0x0201, + WM_LBUTTONUP = 0x0202, + WM_LBUTTONDBLCLK = 0x0203, + WM_RBUTTONDOWN = 0x0204, + WM_RBUTTONUP = 0x0205, + WM_RBUTTONDBLCLK = 0x0206, + WM_MBUTTONDOWN = 0x0207, + WM_MBUTTONUP = 0x0208, + WM_MBUTTONDBLCLK = 0x0209, + WM_CLIPBOARDUPDATE = 0x031D, + WM_USER = 0x0400, + MF_BYPOSITION = 0x400, + MF_SEPARATOR = 0x800, + TB_GETBUTTON = WM_USER + 23, + TB_BUTTONCOUNT = WM_USER + 24, + TB_GETITEMRECT = WM_USER + 29, + STANDARD_RIGHTS_REQUIRED = 0x000F0000, + SYNCHRONIZE = 0x00100000, + PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF, + MEM_COMMIT = 0x1000, + MEM_RELEASE = 0x8000, + PAGE_READWRITE = 0x04, + TBSTATE_HIDDEN = 0x08, + VERTRES = 10, + HORZRES = 8, + DESKTOPVERTRES = 117, + DESKTOPHORZRES = 118, + LOGPIXELSX = 88, + LOGPIXELSY = 90, + CXFRAME = 32, + CXSIZEFRAME = CXFRAME, + SW_HIDE = 0; + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public class NOTIFYICONDATA + { + public int cbSize = Marshal.SizeOf(typeof(NOTIFYICONDATA)); + public IntPtr hWnd; + public int uID; + public int uFlags; + public int uCallbackMessage; + public IntPtr hIcon; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string szTip = string.Empty; + public int dwState = 0x01; + public int dwStateMask = 0x01; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + public string szInfo = string.Empty; + public int uTimeoutOrVersion; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] + public string szInfoTitle = string.Empty; + public int dwInfoFlags; + } + + [Flags] + public enum ProcessAccess + { + AllAccess = CreateThread | DuplicateHandle | QueryInformation | SetInformation | Terminate | VMOperation | VMRead | VMWrite | Synchronize, + CreateThread = 0x2, + DuplicateHandle = 0x40, + QueryInformation = 0x400, + SetInformation = 0x200, + Terminate = 0x1, + VMOperation = 0x8, + VMRead = 0x10, + VMWrite = 0x20, + Synchronize = 0x100000 + } + + [Serializable, StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct RECT + { + public int Left; + public int Top; + public int Right; + public int Bottom; + + public RECT(int left, int top, int right, int bottom) + { + Left = left; + Top = top; + Right = right; + Bottom = bottom; + } + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct TBBUTTON + { + public int iBitmap; + public int idCommand; + public IntPtr fsStateStylePadding; + public IntPtr dwData; + public IntPtr iString; + } + + [Flags] + public enum AllocationType + { + Commit = 0x1000, + Reserve = 0x2000, + Decommit = 0x4000, + Release = 0x8000, + Reset = 0x80000, + Physical = 0x400000, + TopDown = 0x100000, + WriteWatch = 0x200000, + LargePages = 0x20000000 + } + + [Flags] + public enum MemoryProtection + { + Execute = 0x10, + ExecuteRead = 0x20, + ExecuteReadWrite = 0x40, + ExecuteWriteCopy = 0x80, + NoAccess = 0x01, + ReadOnly = 0x02, + ReadWrite = 0x04, + WriteCopy = 0x08, + GuardModifierflag = 0x100, + NoCacheModifierflag = 0x200, + WriteCombineModifierflag = 0x400 + } + + [StructLayout(LayoutKind.Sequential)] + public struct TRAYDATA + { + public IntPtr hwnd; + public uint uID; + public uint uCallbackMessage; + public uint bReserved0; + public uint bReserved1; + public IntPtr hIcon; + } + + [Flags] + public enum FreeType + { + Decommit = 0x4000, + Release = 0x8000, + } + + [StructLayout(LayoutKind.Sequential)] + public struct POINT + { + public int X; + public int Y; + + public POINT(int x, int y) + { + X = x; + Y = y; + } + } + + public enum HookType + { + WH_KEYBOARD_LL = 13, + WH_MOUSE_LL = 14 + } + + [StructLayout(LayoutKind.Sequential)] + public struct MOUSEHOOKSTRUCT + { + public POINT pt; + public IntPtr hwnd; + public uint wHitTestCode; + public IntPtr dwExtraInfo; + } + + #endregion + + #region internal + + internal static class ExternDll + { + public const string + User32 = "user32.dll", + Gdi32 = "gdi32.dll", + Kernel32 = "kernel32.dll", + Shell32 = "shell32.dll"; + } + + internal enum SM + { + CXSCREEN = 0, + CYSCREEN = 1, + CXVSCROLL = 2, + CYHSCROLL = 3, + CYCAPTION = 4, + CXBORDER = 5, + CYBORDER = 6, + CXFIXEDFRAME = 7, + CYFIXEDFRAME = 8, + CYVTHUMB = 9, + CXHTHUMB = 10, + CXICON = 11, + CYICON = 12, + CXCURSOR = 13, + CYCURSOR = 14, + CYMENU = 15, + CXFULLSCREEN = 16, + CYFULLSCREEN = 17, + CYKANJIWINDOW = 18, + MOUSEPRESENT = 19, + CYVSCROLL = 20, + CXHSCROLL = 21, + DEBUG = 22, + SWAPBUTTON = 23, + CXMIN = 28, + CYMIN = 29, + CXSIZE = 30, + CYSIZE = 31, + CXFRAME = 32, + CXSIZEFRAME = CXFRAME, + CYFRAME = 33, + CYSIZEFRAME = CYFRAME, + CXMINTRACK = 34, + CYMINTRACK = 35, + CXDOUBLECLK = 36, + CYDOUBLECLK = 37, + CXICONSPACING = 38, + CYICONSPACING = 39, + MENUDROPALIGNMENT = 40, + PENWINDOWS = 41, + DBCSENABLED = 42, + CMOUSEBUTTONS = 43, + SECURE = 44, + CXEDGE = 45, + CYEDGE = 46, + CXMINSPACING = 47, + CYMINSPACING = 48, + CXSMICON = 49, + CYSMICON = 50, + CYSMCAPTION = 51, + CXSMSIZE = 52, + CYSMSIZE = 53, + CXMENUSIZE = 54, + CYMENUSIZE = 55, + ARRANGE = 56, + CXMINIMIZED = 57, + CYMINIMIZED = 58, + CXMAXTRACK = 59, + CYMAXTRACK = 60, + CXMAXIMIZED = 61, + CYMAXIMIZED = 62, + NETWORK = 63, + CLEANBOOT = 67, + CXDRAG = 68, + CYDRAG = 69, + SHOWSOUNDS = 70, + CXMENUCHECK = 71, + CYMENUCHECK = 72, + SLOWMACHINE = 73, + MIDEASTENABLED = 74, + MOUSEWHEELPRESENT = 75, + XVIRTUALSCREEN = 76, + YVIRTUALSCREEN = 77, + CXVIRTUALSCREEN = 78, + CYVIRTUALSCREEN = 79, + CMONITORS = 80, + SAMEDISPLAYFORMAT = 81, + IMMENABLED = 82, + CXFOCUSBORDER = 83, + CYFOCUSBORDER = 84, + TABLETPC = 86, + MEDIACENTER = 87, + REMOTESESSION = 0x1000, + REMOTECONTROL = 0x2001 + } + + internal enum CacheSlot + { + DpiX, + + FocusBorderWidth, + FocusBorderHeight, + HighContrast, + MouseVanish, + + DropShadow, + FlatMenu, + WorkAreaInternal, + WorkArea, + + IconMetrics, + + KeyboardCues, + KeyboardDelay, + KeyboardPreference, + KeyboardSpeed, + SnapToDefaultButton, + WheelScrollLines, + MouseHoverTime, + MouseHoverHeight, + MouseHoverWidth, + + MenuDropAlignment, + MenuFade, + MenuShowDelay, + + ComboBoxAnimation, + ClientAreaAnimation, + CursorShadow, + GradientCaptions, + HotTracking, + ListBoxSmoothScrolling, + MenuAnimation, + SelectionFade, + StylusHotTracking, + ToolTipAnimation, + ToolTipFade, + UIEffects, + + MinimizeAnimation, + Border, + CaretWidth, + ForegroundFlashCount, + DragFullWindows, + NonClientMetrics, + + ThinHorizontalBorderHeight, + ThinVerticalBorderWidth, + CursorWidth, + CursorHeight, + ThickHorizontalBorderHeight, + ThickVerticalBorderWidth, + MinimumHorizontalDragDistance, + MinimumVerticalDragDistance, + FixedFrameHorizontalBorderHeight, + FixedFrameVerticalBorderWidth, + FocusHorizontalBorderHeight, + FocusVerticalBorderWidth, + FullPrimaryScreenWidth, + FullPrimaryScreenHeight, + HorizontalScrollBarButtonWidth, + HorizontalScrollBarHeight, + HorizontalScrollBarThumbWidth, + IconWidth, + IconHeight, + IconGridWidth, + IconGridHeight, + MaximizedPrimaryScreenWidth, + MaximizedPrimaryScreenHeight, + MaximumWindowTrackWidth, + MaximumWindowTrackHeight, + MenuCheckmarkWidth, + MenuCheckmarkHeight, + MenuButtonWidth, + MenuButtonHeight, + MinimumWindowWidth, + MinimumWindowHeight, + MinimizedWindowWidth, + MinimizedWindowHeight, + MinimizedGridWidth, + MinimizedGridHeight, + MinimumWindowTrackWidth, + MinimumWindowTrackHeight, + PrimaryScreenWidth, + PrimaryScreenHeight, + WindowCaptionButtonWidth, + WindowCaptionButtonHeight, + ResizeFrameHorizontalBorderHeight, + ResizeFrameVerticalBorderWidth, + SmallIconWidth, + SmallIconHeight, + SmallWindowCaptionButtonWidth, + SmallWindowCaptionButtonHeight, + VirtualScreenWidth, + VirtualScreenHeight, + VerticalScrollBarWidth, + VerticalScrollBarButtonHeight, + WindowCaptionHeight, + KanjiWindowHeight, + MenuBarHeight, + VerticalScrollBarThumbHeight, + IsImmEnabled, + IsMediaCenter, + IsMenuDropRightAligned, + IsMiddleEastEnabled, + IsMousePresent, + IsMouseWheelPresent, + IsPenWindows, + IsRemotelyControlled, + IsRemoteSession, + ShowSounds, + IsSlowMachine, + SwapButtons, + IsTabletPC, + VirtualScreenLeft, + VirtualScreenTop, + + PowerLineStatus, + + IsGlassEnabled, + UxThemeName, + UxThemeColor, + WindowCornerRadius, + WindowGlassColor, + WindowGlassBrush, + WindowNonClientFrameThickness, + WindowResizeBorderThickness, + + NumSlots + } + + internal static class Win32Constant + { + internal const int MAX_PATH = 260; + internal const int INFOTIPSIZE = 1024; + internal const int TRUE = 1; + internal const int FALSE = 0; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + internal class WNDCLASS + { + public int style; + public WndProc lpfnWndProc; + public int cbClsExtra; + public int cbWndExtra; + public IntPtr hInstance; + public IntPtr hIcon; + public IntPtr hCursor; + public IntPtr hbrBackground; + public string lpszMenuName; + public string lpszClassName; + } + + [StructLayout(LayoutKind.Sequential, Pack = 2)] + internal struct BITMAPINFO + { + public int bmiHeader_biSize; + + public int bmiHeader_biWidth; + + public int bmiHeader_biHeight; + + public short bmiHeader_biPlanes; + + public short bmiHeader_biBitCount; + + public int bmiHeader_biCompression; + + public int bmiHeader_biSizeImage; + + public int bmiHeader_biXPelsPerMeter; + + public int bmiHeader_biYPelsPerMeter; + + public int bmiHeader_biClrUsed; + + public int bmiHeader_biClrImportant; + + public BITMAPINFO(int width, int height, short bpp) + { + bmiHeader_biSize = SizeOf(); + bmiHeader_biWidth = width; + bmiHeader_biHeight = height; + bmiHeader_biPlanes = 1; + bmiHeader_biBitCount = bpp; + bmiHeader_biCompression = 0; + bmiHeader_biSizeImage = 0; + bmiHeader_biXPelsPerMeter = 0; + bmiHeader_biYPelsPerMeter = 0; + bmiHeader_biClrUsed = 0; + bmiHeader_biClrImportant = 0; + } + + [SecuritySafeCritical] + private static int SizeOf() + { + return Marshal.SizeOf(typeof(BITMAPINFO)); + } + } + + [StructLayout(LayoutKind.Sequential)] + internal class ICONINFO + { + public bool fIcon = false; + public int xHotspot = 0; + public int yHotspot = 0; + public BitmapHandle hbmMask = null; + public BitmapHandle hbmColor = null; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/NOTIFYICONDATA.cs b/src/Shared/HandyControl_Shared/Tools/Interop/NOTIFYICONDATA.cs deleted file mode 100644 index c57d604a..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/NOTIFYICONDATA.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace HandyControl.Tools.Interop -{ - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - [SuppressMessage("ReSharper", "InconsistentNaming")] - public class NOTIFYICONDATA - { - public int cbSize = Marshal.SizeOf(typeof(NOTIFYICONDATA)); - public IntPtr hWnd; - public int uID; - public int uFlags; - public int uCallbackMessage; - public IntPtr hIcon; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string szTip = string.Empty; - public int dwState = 0x01; - public int dwStateMask = 0x01; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public string szInfo = string.Empty; - public int uTimeoutOrVersion; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] - public string szInfoTitle = string.Empty; - public int dwInfoFlags; - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs deleted file mode 100644 index b4885c5f..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs +++ /dev/null @@ -1,246 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Runtime.Versioning; -using System.Security; - -namespace HandyControl.Tools.Interop -{ - public delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - - [SuppressMessage("ReSharper", "InconsistentNaming")] - [SuppressMessage("ReSharper", "IdentifierTypo")] - internal class NativeMethods - { - public const int - WS_CHILD = 0x40000000, - BITSPIXEL = 12, - PLANES = 14, - BI_RGB = 0, - DIB_RGB_COLORS = 0, - NIF_MESSAGE = 0x00000001, - NIF_ICON = 0x00000002, - NIF_TIP = 0x00000004, - NIF_INFO = 0x00000010, - NIN_BALLOONSHOW = WM_USER + 2, - NIN_BALLOONHIDE = WM_USER + 3, - NIN_BALLOONTIMEOUT = WM_USER + 4, - NIM_ADD = 0x00000000, - NIM_MODIFY = 0x00000001, - NIM_DELETE = 0x00000002, - NIIF_NONE = 0x00000000, - NIIF_INFO = 0x00000001, - NIIF_WARNING = 0x00000002, - NIIF_ERROR = 0x00000003, - NIIF_LARGE_ICON = 0x00000020, - WM_KEYDOWN = 0x0100, - WM_KEYUP = 0x0101, - WM_SYSKEYDOWN = 0x0104, - WM_SYSKEYUP = 0x0105, - WM_SYSCOMMAND = 0x112, - WM_MOUSEMOVE = 0x0200, - WM_LBUTTONDOWN = 0x0201, - WM_LBUTTONUP = 0x0202, - WM_LBUTTONDBLCLK = 0x0203, - WM_RBUTTONDOWN = 0x0204, - WM_RBUTTONUP = 0x0205, - WM_RBUTTONDBLCLK = 0x0206, - WM_MBUTTONDOWN = 0x0207, - WM_MBUTTONUP = 0x0208, - WM_MBUTTONDBLCLK = 0x0209, - WM_CLIPBOARDUPDATE = 0x031D, - WM_USER = 0x0400, - MF_BYPOSITION = 0x400, - MF_SEPARATOR = 0x800, - TB_GETBUTTON = WM_USER + 23, - TB_BUTTONCOUNT = WM_USER + 24, - TB_GETITEMRECT = WM_USER + 29, - STANDARD_RIGHTS_REQUIRED = 0x000F0000, - SYNCHRONIZE = 0x00100000, - PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF, - MEM_COMMIT = 0x1000, - MEM_RELEASE = 0x8000, - PAGE_READWRITE = 0x04, - TBSTATE_HIDDEN = 0x08, - VERTRES = 10, - HORZRES = 8, - DESKTOPVERTRES = 117, - DESKTOPHORZRES = 118, - LOGPIXELSX = 88, - LOGPIXELSY = 90, - CXFRAME = 32, - CXSIZEFRAME = CXFRAME, - SW_HIDE = 0; - - [Flags] - public enum ProcessAccess - { - AllAccess = CreateThread | DuplicateHandle | QueryInformation | SetInformation | Terminate | VMOperation | VMRead | VMWrite | Synchronize, - CreateThread = 0x2, - DuplicateHandle = 0x40, - QueryInformation = 0x400, - SetInformation = 0x200, - Terminate = 0x1, - VMOperation = 0x8, - VMRead = 0x10, - VMWrite = 0x20, - Synchronize = 0x100000 - } - - [Serializable, StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - public struct RECT - { - public int Left; - public int Top; - public int Right; - public int Bottom; - - public RECT(int left, int top, int right, int bottom) - { - Left = left; - Top = top; - Right = right; - Bottom = bottom; - } - } - - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct TBBUTTON - { - public int iBitmap; - public int idCommand; - public IntPtr fsStateStylePadding; - public IntPtr dwData; - public IntPtr iString; - } - - [Flags] - public enum AllocationType - { - Commit = 0x1000, - Reserve = 0x2000, - Decommit = 0x4000, - Release = 0x8000, - Reset = 0x80000, - Physical = 0x400000, - TopDown = 0x100000, - WriteWatch = 0x200000, - LargePages = 0x20000000 - } - - [Flags] - public enum MemoryProtection - { - Execute = 0x10, - ExecuteRead = 0x20, - ExecuteReadWrite = 0x40, - ExecuteWriteCopy = 0x80, - NoAccess = 0x01, - ReadOnly = 0x02, - ReadWrite = 0x04, - WriteCopy = 0x08, - GuardModifierflag = 0x100, - NoCacheModifierflag = 0x200, - WriteCombineModifierflag = 0x400 - } - - [StructLayout(LayoutKind.Sequential)] - public struct TRAYDATA - { - public IntPtr hwnd; - public uint uID; - public uint uCallbackMessage; - public uint bReserved0; - public uint bReserved1; - public IntPtr hIcon; - } - - [Flags] - public enum FreeType - { - Decommit = 0x4000, - Release = 0x8000, - } - - [StructLayout(LayoutKind.Sequential)] - public struct POINT - { - public int X; - public int Y; - - public POINT(int x, int y) - { - X = x; - Y = y; - } - } - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto)] - [ResourceExposure(ResourceScope.None)] - public static extern int RegisterWindowMessage(string msg); - - [DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, ref RECT lpPoints, uint cPoints); - - [DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out TBBUTTON lpBuffer, int dwSize, out int lpNumberOfBytesRead); - - [DllImport(ExternDll.Kernel32, SetLastError = true)] - public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out RECT lpBuffer, int dwSize, out int lpNumberOfBytesRead); - - [DllImport(ExternDll.Kernel32, SetLastError = true)] - public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out TRAYDATA lpBuffer, int dwSize, out int lpNumberOfBytesRead); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto)] - public static extern uint SendMessage(IntPtr hWnd, uint Msg, uint wParam, IntPtr lParam); - - [DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); - - [DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern IntPtr OpenProcess(ProcessAccess dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId); - - [DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, AllocationType flAllocationType, MemoryProtection flProtect); - - [DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern int CloseHandle(IntPtr hObject); - - [DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)] - public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, FreeType dwFreeType); - - [DllImport(ExternDll.User32, SetLastError = true)] - public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); - - [DllImport(ExternDll.User32, SetLastError = true)] - public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); - - [DllImport(ExternDll.User32)] - public static extern int GetWindowRect(IntPtr hwnd, out RECT lpRect); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto)] - public static extern bool GetCursorPos(out POINT pt); - - [SecurityCritical] - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [DllImport(ExternDll.User32)] - public static extern int GetSystemMetrics(SM nIndex); - - [DllImport(ExternDll.User32)] - public static extern IntPtr GetDesktopWindow(); - - [DllImport(ExternDll.User32, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool AddClipboardFormatListener(IntPtr hwnd); - - [DllImport(ExternDll.User32, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool RemoveClipboardFormatListener(IntPtr hwnd); - - [DllImport(ExternDll.User32)] - public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); - - [DllImport(ExternDll.User32)] - public static extern bool InsertMenu(IntPtr hMenu, int wPosition, int wFlags, int wIDNewItem, string lpNewItem); - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/NativeValues.cs b/src/Shared/HandyControl_Shared/Tools/Interop/NativeValues.cs deleted file mode 100644 index 94c1e09b..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/NativeValues.cs +++ /dev/null @@ -1,235 +0,0 @@ -// ReSharper disable InconsistentNaming - -namespace HandyControl.Tools.Interop -{ - internal enum SM - { - CXSCREEN = 0, - CYSCREEN = 1, - CXVSCROLL = 2, - CYHSCROLL = 3, - CYCAPTION = 4, - CXBORDER = 5, - CYBORDER = 6, - CXFIXEDFRAME = 7, - CYFIXEDFRAME = 8, - CYVTHUMB = 9, - CXHTHUMB = 10, - CXICON = 11, - CYICON = 12, - CXCURSOR = 13, - CYCURSOR = 14, - CYMENU = 15, - CXFULLSCREEN = 16, - CYFULLSCREEN = 17, - CYKANJIWINDOW = 18, - MOUSEPRESENT = 19, - CYVSCROLL = 20, - CXHSCROLL = 21, - DEBUG = 22, - SWAPBUTTON = 23, - CXMIN = 28, - CYMIN = 29, - CXSIZE = 30, - CYSIZE = 31, - CXFRAME = 32, - CXSIZEFRAME = CXFRAME, - CYFRAME = 33, - CYSIZEFRAME = CYFRAME, - CXMINTRACK = 34, - CYMINTRACK = 35, - CXDOUBLECLK = 36, - CYDOUBLECLK = 37, - CXICONSPACING = 38, - CYICONSPACING = 39, - MENUDROPALIGNMENT = 40, - PENWINDOWS = 41, - DBCSENABLED = 42, - CMOUSEBUTTONS = 43, - SECURE = 44, - CXEDGE = 45, - CYEDGE = 46, - CXMINSPACING = 47, - CYMINSPACING = 48, - CXSMICON = 49, - CYSMICON = 50, - CYSMCAPTION = 51, - CXSMSIZE = 52, - CYSMSIZE = 53, - CXMENUSIZE = 54, - CYMENUSIZE = 55, - ARRANGE = 56, - CXMINIMIZED = 57, - CYMINIMIZED = 58, - CXMAXTRACK = 59, - CYMAXTRACK = 60, - CXMAXIMIZED = 61, - CYMAXIMIZED = 62, - NETWORK = 63, - CLEANBOOT = 67, - CXDRAG = 68, - CYDRAG = 69, - SHOWSOUNDS = 70, - CXMENUCHECK = 71, - CYMENUCHECK = 72, - SLOWMACHINE = 73, - MIDEASTENABLED = 74, - MOUSEWHEELPRESENT = 75, - XVIRTUALSCREEN = 76, - YVIRTUALSCREEN = 77, - CXVIRTUALSCREEN = 78, - CYVIRTUALSCREEN = 79, - CMONITORS = 80, - SAMEDISPLAYFORMAT = 81, - IMMENABLED = 82, - CXFOCUSBORDER = 83, - CYFOCUSBORDER = 84, - TABLETPC = 86, - MEDIACENTER = 87, - REMOTESESSION = 0x1000, - REMOTECONTROL = 0x2001 - } - - internal enum CacheSlot - { - DpiX, - - FocusBorderWidth, - FocusBorderHeight, - HighContrast, - MouseVanish, - - DropShadow, - FlatMenu, - WorkAreaInternal, - WorkArea, - - IconMetrics, - - KeyboardCues, - KeyboardDelay, - KeyboardPreference, - KeyboardSpeed, - SnapToDefaultButton, - WheelScrollLines, - MouseHoverTime, - MouseHoverHeight, - MouseHoverWidth, - - MenuDropAlignment, - MenuFade, - MenuShowDelay, - - ComboBoxAnimation, - ClientAreaAnimation, - CursorShadow, - GradientCaptions, - HotTracking, - ListBoxSmoothScrolling, - MenuAnimation, - SelectionFade, - StylusHotTracking, - ToolTipAnimation, - ToolTipFade, - UIEffects, - - MinimizeAnimation, - Border, - CaretWidth, - ForegroundFlashCount, - DragFullWindows, - NonClientMetrics, - - ThinHorizontalBorderHeight, - ThinVerticalBorderWidth, - CursorWidth, - CursorHeight, - ThickHorizontalBorderHeight, - ThickVerticalBorderWidth, - MinimumHorizontalDragDistance, - MinimumVerticalDragDistance, - FixedFrameHorizontalBorderHeight, - FixedFrameVerticalBorderWidth, - FocusHorizontalBorderHeight, - FocusVerticalBorderWidth, - FullPrimaryScreenWidth, - FullPrimaryScreenHeight, - HorizontalScrollBarButtonWidth, - HorizontalScrollBarHeight, - HorizontalScrollBarThumbWidth, - IconWidth, - IconHeight, - IconGridWidth, - IconGridHeight, - MaximizedPrimaryScreenWidth, - MaximizedPrimaryScreenHeight, - MaximumWindowTrackWidth, - MaximumWindowTrackHeight, - MenuCheckmarkWidth, - MenuCheckmarkHeight, - MenuButtonWidth, - MenuButtonHeight, - MinimumWindowWidth, - MinimumWindowHeight, - MinimizedWindowWidth, - MinimizedWindowHeight, - MinimizedGridWidth, - MinimizedGridHeight, - MinimumWindowTrackWidth, - MinimumWindowTrackHeight, - PrimaryScreenWidth, - PrimaryScreenHeight, - WindowCaptionButtonWidth, - WindowCaptionButtonHeight, - ResizeFrameHorizontalBorderHeight, - ResizeFrameVerticalBorderWidth, - SmallIconWidth, - SmallIconHeight, - SmallWindowCaptionButtonWidth, - SmallWindowCaptionButtonHeight, - VirtualScreenWidth, - VirtualScreenHeight, - VerticalScrollBarWidth, - VerticalScrollBarButtonHeight, - WindowCaptionHeight, - KanjiWindowHeight, - MenuBarHeight, - VerticalScrollBarThumbHeight, - IsImmEnabled, - IsMediaCenter, - IsMenuDropRightAligned, - IsMiddleEastEnabled, - IsMousePresent, - IsMouseWheelPresent, - IsPenWindows, - IsRemotelyControlled, - IsRemoteSession, - ShowSounds, - IsSlowMachine, - SwapButtons, - IsTabletPC, - VirtualScreenLeft, - VirtualScreenTop, - - PowerLineStatus, - - IsGlassEnabled, - UxThemeName, - UxThemeColor, - WindowCornerRadius, - WindowGlassColor, - WindowGlassBrush, - WindowNonClientFrameThickness, - WindowResizeBorderThickness, - - NumSlots - } - - internal static class Win32Constant - { - internal const int MAX_PATH = 260; - internal const int INFOTIPSIZE = 1024; - internal const int TRUE = 1; - internal const int FALSE = 0; - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/UnsafeNativeMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/UnsafeNativeMethods.cs deleted file mode 100644 index 378eab05..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/UnsafeNativeMethods.cs +++ /dev/null @@ -1,225 +0,0 @@ -using System; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace HandyControl.Tools.Interop -{ - [SuppressMessage("ReSharper", "InconsistentNaming")] - internal class UnsafeNativeMethods - { - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.User32, SetLastError = true, ExactSpelling = true, EntryPoint = nameof(GetDC), CharSet = CharSet.Auto)] - public static extern IntPtr IntGetDC(HandleRef hWnd); - - [SecurityCritical] - public static IntPtr GetDC(HandleRef hWnd) - { - var hDc = IntGetDC(hWnd); - if (hDc == IntPtr.Zero) - { - throw new Win32Exception(); - } - - return HandleCollector.Add(hDc, CommonHandles.HDC); - } - - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.User32, ExactSpelling = true, EntryPoint = nameof(ReleaseDC), CharSet = CharSet.Auto)] - public static extern int IntReleaseDC(HandleRef hWnd, HandleRef hDC); - - [SecurityCritical] - public static int ReleaseDC(HandleRef hWnd, HandleRef hDC) - { - HandleCollector.Remove((IntPtr)hDC, CommonHandles.HDC); - return IntReleaseDC(hWnd, hDC); - } - - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto)] - public static extern int GetDeviceCaps(HandleRef hDC, int nIndex); - - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.User32)] - public static extern int GetSystemMetrics(SM nIndex); - - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.User32, EntryPoint = nameof(DestroyIcon), CharSet = CharSet.Auto, SetLastError = true)] - private static extern bool IntDestroyIcon(IntPtr hIcon); - - [SecurityCritical] - public static bool DestroyIcon(IntPtr hIcon) - { - var result = IntDestroyIcon(hIcon); - return result; - } - - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.Gdi32, EntryPoint = nameof(DeleteObject), CharSet = CharSet.Auto, SetLastError = true)] - private static extern bool IntDeleteObject(IntPtr hObject); - - [SecurityCritical] - public static bool DeleteObject(IntPtr hObject) - { - var result = IntDeleteObject(hObject); - return result; - } - - [SecurityCritical] - public static BitmapHandle CreateDIBSection(HandleRef hdc, ref BITMAPINFO bitmapInfo, int iUsage, ref IntPtr ppvBits, SafeFileMappingHandle hSection, int dwOffset) - { - if (hSection == null) - { - hSection = new SafeFileMappingHandle(IntPtr.Zero); - } - - var hBitmap = PrivateCreateDIBSection(hdc, ref bitmapInfo, iUsage, ref ppvBits, hSection, dwOffset); - return hBitmap; - } - - [DllImport(ExternDll.Kernel32, EntryPoint = "CloseHandle", CharSet = CharSet.Auto, SetLastError = true)] - public static extern bool IntCloseHandle(HandleRef handle); - - [SecurityCritical, SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto, EntryPoint = nameof(CreateDIBSection))] - private static extern BitmapHandle PrivateCreateDIBSection(HandleRef hdc, ref BITMAPINFO bitmapInfo, int iUsage, ref IntPtr ppvBits, SafeFileMappingHandle hSection, int dwOffset); - - [SecurityCritical, SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.User32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto, EntryPoint = nameof(CreateIconIndirect))] - private static extern IconHandle PrivateCreateIconIndirect([In, MarshalAs(UnmanagedType.LPStruct)]ICONINFO iconInfo); - - [SecurityCritical] - public static IconHandle CreateIconIndirect([In, MarshalAs(UnmanagedType.LPStruct)]ICONINFO iconInfo) - { - var hIcon = PrivateCreateIconIndirect(iconInfo); - return hIcon; - } - - [SecurityCritical, SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto, EntryPoint = nameof(CreateBitmap))] - private static extern BitmapHandle PrivateCreateBitmap(int width, int height, int planes, int bitsPerPixel, byte[] lpvBits); - - [SecurityCritical] - internal static BitmapHandle CreateBitmap(int width, int height, int planes, int bitsPerPixel, byte[] lpvBits) - { - var hBitmap = PrivateCreateBitmap(width, height, planes, bitsPerPixel, lpvBits); - return hBitmap; - } - - [SecurityCritical, SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.Kernel32, EntryPoint = "GetModuleFileName", CharSet = CharSet.Unicode, SetLastError = true)] - private static extern int IntGetModuleFileName(HandleRef hModule, StringBuilder buffer, int length); - - [SecurityCritical] - internal static string GetModuleFileName(HandleRef hModule) - { - var buffer = new StringBuilder(Win32Constant.MAX_PATH); - while (true) - { - var size = IntGetModuleFileName(hModule, buffer, buffer.Capacity); - if (size == 0) - { - throw new Win32Exception(); - } - - if (size == buffer.Capacity) - { - buffer.EnsureCapacity(buffer.Capacity * 2); - continue; - } - - return buffer.ToString(); - } - } - - [SecurityCritical, SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.Shell32, CharSet = CharSet.Auto, BestFitMapping = false, ThrowOnUnmappableChar = true)] - internal static extern int ExtractIconEx(string szExeFileName, int nIconIndex, out IconHandle phiconLarge, out IconHandle phiconSmall, int nIcons); - - [DllImport(ExternDll.Shell32, CharSet = CharSet.Auto)] - public static extern int Shell_NotifyIcon(int message, NOTIFYICONDATA pnid); - - [SecurityCritical] - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateWindowExW")] - public static extern IntPtr CreateWindowEx( - int dwExStyle, - [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, - [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, - int dwStyle, - int x, - int y, - int nWidth, - int nHeight, - IntPtr hWndParent, - IntPtr hMenu, - IntPtr hInstance, - IntPtr lpParam); - - [SecurityCritical] - [SuppressUnmanagedCodeSecurity] - [DllImport(ExternDll.User32, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)] - public static extern short RegisterClass(WNDCLASS wc); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto)] - public static extern IntPtr DefWindowProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - - [DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)] - public static extern bool SetForegroundWindow(IntPtr hWnd); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); - - [DllImport(ExternDll.Kernel32, CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr GetModuleHandle(string lpModuleName); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto, SetLastError = true)] - public static extern bool UnhookWindowsHookEx(IntPtr hhk); - - public enum HookType - { - WH_KEYBOARD_LL = 13, - WH_MOUSE_LL = 14 - } - - [StructLayout(LayoutKind.Sequential)] - public struct MOUSEHOOKSTRUCT - { - public NativeMethods.POINT pt; - public IntPtr hwnd; - public uint wHitTestCode; - public IntPtr dwExtraInfo; - } - - public delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId); - - [DllImport(ExternDll.User32, SetLastError = true)] - public static extern IntPtr GetDesktopWindow(); - - [DllImport(ExternDll.User32, SetLastError = true)] - public static extern IntPtr GetWindowDC(IntPtr window); - - [DllImport(ExternDll.Gdi32, SetLastError = true)] - public static extern uint GetPixel(IntPtr dc, int x, int y); - - [DllImport(ExternDll.User32, SetLastError = true)] - public static extern int ReleaseDC(IntPtr window, IntPtr dc); - - [DllImport(ExternDll.Gdi32, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto)] - public static extern int GetDeviceCaps(IntPtr hdc, int nIndex); - - [DllImport(ExternDll.User32, CharSet = CharSet.Auto)] - public static extern IntPtr GetDC(IntPtr ptr); - } -} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/WNDCLASS.cs b/src/Shared/HandyControl_Shared/Tools/Interop/WNDCLASS.cs deleted file mode 100644 index 33dd3903..00000000 --- a/src/Shared/HandyControl_Shared/Tools/Interop/WNDCLASS.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace HandyControl.Tools.Interop -{ - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - [SuppressMessage("ReSharper", "InconsistentNaming")] - [SuppressMessage("ReSharper", "IdentifierTypo")] - internal class WNDCLASS - { - public int style; - public WndProc lpfnWndProc; - public int cbClsExtra; - public int cbWndExtra; - public IntPtr hInstance; - public IntPtr hIcon; - public IntPtr hCursor; - public IntPtr hbrBackground; - public string lpszMenuName; - public string lpszClassName; - } -} \ No newline at end of file