diff --git a/Resources/TabControl.png b/Resources/TabControl.png
index f0fb2287..cfc6e8f9 100644
Binary files a/Resources/TabControl.png and b/Resources/TabControl.png differ
diff --git a/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj b/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
index ffb942f6..918da006 100644
--- a/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
+++ b/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
@@ -19,6 +19,14 @@
+
+
+ Properties\Langs\Lang.Designer.cs
+ True
+ True
+ Lang.resx
+
+
@@ -305,5 +313,15 @@
Resources\Img\under_construction.gif
+
+
+ Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.resx
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+
+
\ No newline at end of file
diff --git a/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj b/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj
index e6ed1a51..0dcfc447 100644
--- a/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj
+++ b/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj
@@ -16,6 +16,24 @@
TRACE;Core
C:\Code\GitHub\HandyControl\src\Core_30\HandyControl_Core_30\HandyControl.xml
+
+
+ Properties\Langs\Lang.Designer.cs
+ True
+ True
+ Lang.resx
+
+
+
+
+ Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.resx
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+
+
diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
index e7e5142f..341b4731 100644
--- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
+++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
@@ -73,6 +73,14 @@
Designer
+
+
+ Properties\Langs\Lang.Designer.cs
+ True
+ True
+ Lang.resx
+
+
Resources\Img\1.jpg
@@ -357,6 +365,16 @@
HandyControl_Net_40
+
+
+ Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.resx
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+
+
\ No newline at end of file
diff --git a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
index 8151d7bc..ffb31c73 100644
--- a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
+++ b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
@@ -34,6 +34,14 @@
bin\Release\HandyControl.xml
v4.0
+
+
+ Properties\Langs\Lang.Designer.cs
+ True
+ True
+ Lang.resx
+
+
@@ -79,6 +87,16 @@
3.0.1
+
+
+ Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.resx
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+
+
\ No newline at end of file
diff --git a/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/TreeViewBaseStyle.xaml b/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/TreeViewBaseStyle.xaml
index 0e3018a6..0c8880ef 100644
--- a/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/TreeViewBaseStyle.xaml
+++ b/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/TreeViewBaseStyle.xaml
@@ -106,7 +106,6 @@
-
@@ -119,24 +118,10 @@
-
-
\ No newline at end of file
diff --git a/src/Net_40/HandyControl_Net_40/Themes/Styles/MessageBox.xaml b/src/Net_40/HandyControl_Net_40/Themes/Styles/MessageBox.xaml
index f2f30ce0..f4006904 100644
--- a/src/Net_40/HandyControl_Net_40/Themes/Styles/MessageBox.xaml
+++ b/src/Net_40/HandyControl_Net_40/Themes/Styles/MessageBox.xaml
@@ -2,7 +2,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:HandyControl.Controls"
xmlns:langs="clr-namespace:HandyControl.Properties.Langs"
- xmlns:interactivity="clr-namespace:HandyControl.Interactivity">
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell">
@@ -17,28 +18,105 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj
index 605955ac..1b1101c3 100644
--- a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj
+++ b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj
@@ -90,6 +90,12 @@
+
+ Properties\Langs\Lang.Designer.cs
+ True
+ True
+ Lang.resx
+
NoUserContent.xaml
@@ -372,13 +378,22 @@
Resources\Img\under_construction.gif
-
MSBuild:Compile
Designer
+
+
+ Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.resx
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+
+
\ No newline at end of file
diff --git a/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj b/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj
index 4e2a03c5..30d6ea16 100644
--- a/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj
+++ b/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj
@@ -80,6 +80,14 @@
v4.5
netgt40
+
+
+ Properties\Langs\Lang.Designer.cs
+ True
+ True
+ Lang.resx
+
+
@@ -120,6 +128,16 @@
Designer
+
+
+ Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.resx
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
index a217f899..c966271f 100644
--- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
+++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
@@ -30,9 +30,7 @@
Code
MainWindow.xaml
-
-
-
+
@@ -349,18 +347,10 @@
Designer
MSBuild:Compile
-
- Designer
- MSBuild:Compile
-
Designer
MSBuild:Compile
-
- Designer
- MSBuild:Compile
-
Designer
MSBuild:Compile
@@ -708,8 +698,4 @@
MSBuild:Compile
-
-
-
-
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
index 2d0ad9a2..707c4c04 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
@@ -1032,6 +1032,15 @@ namespace HandyControlDemo.Properties.Langs {
}
}
+ ///
+ /// 查找类似 重复按钮 的本地化字符串。
+ ///
+ public static string RepeatButton {
+ get {
+ return ResourceManager.GetString("RepeatButton", resourceCulture);
+ }
+ }
+
///
/// 查找类似 回复 的本地化字符串。
///
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.Designer.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.Designer.cs
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
index ea91a632..9d48cc46 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
@@ -564,4 +564,7 @@
Click to count
+
+ RepeatButton
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
index febdd2fb..6a8f3b34 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
@@ -564,4 +564,7 @@
点击计数
+
+ 重复按钮
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Style.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Style.xaml
deleted file mode 100644
index ea95bea7..00000000
--- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Style.xaml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/StyleDark.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/StyleDark.xaml
deleted file mode 100644
index cd3f55cd..00000000
--- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/StyleDark.xaml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Tools/Helper/AssemblyHelper.cs b/src/Shared/HandyControlDemo_Shared/Tools/Helper/AssemblyHelper.cs
index ae55a7ee..da778226 100644
--- a/src/Shared/HandyControlDemo_Shared/Tools/Helper/AssemblyHelper.cs
+++ b/src/Shared/HandyControlDemo_Shared/Tools/Helper/AssemblyHelper.cs
@@ -1,15 +1,31 @@
using System;
+using System.Collections.Generic;
namespace HandyControlDemo.Tools
{
- public class AssemblyHelper
+ internal class AssemblyHelper
{
private static readonly string NameSpaceStr = typeof(AssemblyHelper).Assembly.GetName().Name;
+ private static readonly Dictionary CacheDic = new Dictionary();
+
+ public static void Register(string name, object instance) => CacheDic[name] = instance;
+
+ public static object ResolveByKey(string key)
+ {
+ if (CacheDic.TryGetValue(key, out var value))
+ {
+ return value;
+ }
+
+ return null;
+ }
+
public static object CreateInternalInstance(string className)
{
try
{
+
var type = Type.GetType($"{NameSpaceStr}.{className}");
return type == null ? null : Activator.CreateInstance(type);
}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml.cs
index 4efd472c..402408dd 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml.cs
@@ -1,4 +1,6 @@
using System.Windows;
+using HandyControlDemo.Tools;
+using HandyControlDemo.ViewModel;
namespace HandyControlDemo.UserControl
{
@@ -7,8 +9,13 @@ namespace HandyControlDemo.UserControl
public NotifyIconDemoCtl()
{
InitializeComponent();
+
+ AssemblyHelper.Register(nameof(NotifyIconDemoCtl), this);
+ Unloaded += NotifyIconDemoCtl_Unloaded;
}
+ private void NotifyIconDemoCtl_Unloaded(object sender, RoutedEventArgs e) => ViewModelLocator.Instance.NotifyIconDemo.Cleanup();
+
private void ButtonPush_OnClick(object sender, RoutedEventArgs e) => NotifyIconContextContent.CloseContextControl();
}
}
diff --git a/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/NotifyIconDemoViewModel.cs b/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/NotifyIconDemoViewModel.cs
index 72ae46b6..9b7750d1 100644
--- a/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/NotifyIconDemoViewModel.cs
+++ b/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/NotifyIconDemoViewModel.cs
@@ -12,6 +12,10 @@ namespace HandyControlDemo.ViewModel
{
public class NotifyIconDemoViewModel : ViewModelBase
{
+ private bool _isCleanup;
+
+ private bool _reversed;
+
private bool _contextMenuIsShow;
public bool ContextMenuIsShow
@@ -25,6 +29,12 @@ namespace HandyControlDemo.ViewModel
Set(ref _contextMenuIsShow, value);
#endif
GlobalData.NotifyIconIsShow = ContextMenuIsShow || ContextContentIsShow;
+ if (!_isCleanup && !_reversed)
+ {
+ _reversed = true;
+ ContextContentIsShow = !value;
+ _reversed = false;
+ }
}
}
@@ -53,6 +63,12 @@ namespace HandyControlDemo.ViewModel
Set(ref _contextContentIsShow, value);
#endif
GlobalData.NotifyIconIsShow = ContextMenuIsShow || ContextContentIsShow;
+ if (!_isCleanup && !_reversed)
+ {
+ _reversed = true;
+ ContextMenuIsShow = !value;
+ _reversed = false;
+ }
}
}
@@ -70,5 +86,18 @@ namespace HandyControlDemo.ViewModel
public RelayCommand
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -618,6 +619,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -703,8 +708,4 @@
MSBuild:Compile
-
-
-
-
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.en.Designer.cs b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.en.Designer.cs
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/RepeatButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/RepeatButtonBaseStyle.xaml
new file mode 100644
index 00000000..19b9f5a9
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/RepeatButtonBaseStyle.xaml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/RepeatButton.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/RepeatButton.xaml
new file mode 100644
index 00000000..2644dc8e
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/RepeatButton.xaml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs
index b5a01f22..dcff9ac8 100644
--- a/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs
@@ -41,10 +41,165 @@ namespace HandyControl.Tools.Interop
WM_MBUTTONDOWN = 0x0207,
WM_MBUTTONUP = 0x0208,
WM_MBUTTONDBLCLK = 0x0209,
- WM_USER = 0x0400;
+ WM_USER = 0x0400,
+ 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;
+
+ [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);
}
}
\ No newline at end of file