@@ -5,6 +5,10 @@ namespace TaskbarHook
55{
66 internal static class User32
77 {
8+ private const uint EVENT_SYSTEM_MOVESIZESTART = 0x000A ;
9+ private const uint EVENT_SYSTEM_MOVESIZEEND = 0x000B ;
10+ private const uint WINEVENT_OUTOFCONTEXT = 0 ;
11+
812 #region DLLImports
913 [ DllImport ( "user32.dll" , SetLastError = true ) ]
1014 private static extern IntPtr GetWindow ( IntPtr hWnd , uint uCmd ) ;
@@ -26,6 +30,15 @@ internal static class User32
2630
2731 [ DllImport ( "user32.dll" , EntryPoint = "ShowWindow" , SetLastError = true ) ]
2832 private static extern bool ShowWindow ( IntPtr hWnd , int nCmdShow ) ;
33+
34+ [ DllImport ( "user32.dll" ) ]
35+ private static extern IntPtr SetWinEventHook ( uint eventMin , uint eventMax , IntPtr hmodWinEventProc , WinEventDelegate lpfnWinEventProc , uint idProcess , uint idThread , uint dwFlags ) ;
36+
37+ [ DllImport ( "user32.dll" ) ]
38+ private static extern bool UnhookWinEvent ( IntPtr hWinEventHook ) ;
39+
40+ [ DllImport ( "user32.dll" , SetLastError = true ) ]
41+ private static extern uint GetWindowThreadProcessId ( IntPtr hWnd , out uint processId ) ;
2942 #endregion
3043
3144 internal static bool SetWindowPosition ( IntPtr handle , int x , int y ) => SetWindowPos ( handle , 0 , x , y , 0 , 0 , 0x0001 ) != IntPtr . Zero ;
@@ -38,6 +51,16 @@ internal static class User32
3851
3952 internal static bool SetVisibilityState ( IntPtr handle , int state ) => ShowWindow ( handle , state ) ;
4053
54+ internal static IntPtr RegisterWindowSizeChangeEvent ( IntPtr handle , WinEventDelegate delegateCallback )
55+ {
56+ uint process , thread = 0 ;
57+ thread = GetWindowThreadProcessId ( handle , out process ) ;
58+
59+ return SetWinEventHook ( EVENT_SYSTEM_MOVESIZESTART , EVENT_SYSTEM_MOVESIZEEND , IntPtr . Zero , delegateCallback , process , thread , WINEVENT_OUTOFCONTEXT ) ;
60+ }
61+
62+ internal static bool UnRegisterWindowSizeChangeEvent ( IntPtr hoockHandle ) => UnhookWinEvent ( hoockHandle ) ;
63+
4164 internal static IntPtr GetWindowParent ( IntPtr handle ) => GetParent ( handle ) ;
4265
4366 internal static IntPtr GetWindow ( string className ) => GetWindow ( IntPtr . Zero , className ) ;
0 commit comments