/[rdesktop]/sourceforge.net/trunk/seamlessrdp/ServerExe/HookDll/hookdll.cpp
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/seamlessrdp/ServerExe/HookDll/hookdll.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1005 by astrand, Tue Aug 30 11:34:05 2005 UTC revision 1014 by astrand, Tue Sep 13 13:08:16 2005 UTC
# Line 26  HWND hWnd = 0; Line 26  HWND hWnd = 0;
26    
27  #define snprintf _snprintf  #define snprintf _snprintf
28    
29  bool bHooked = false;  HHOOK hCbtProc = 0;
30  bool bHooked2 = false;  HHOOK hShellProc = 0;
31  bool bHooked3 = false;  HHOOK hWndProc = 0;
 HHOOK hhook = 0; //cbt  
 HHOOK hhook2 = 0; //shell  
 HHOOK hhook3 = 0; //wnd proc  
32  HINSTANCE hInst = 0;  HINSTANCE hInst = 0;
33  HANDLE m_vcHandle = 0;  HANDLE m_vcHandle = 0;
34    
# Line 80  BOOL APIENTRY DllMain( HINSTANCE hinstDL Line 77  BOOL APIENTRY DllMain( HINSTANCE hinstDL
77  LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam )  LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam )
78  {  {
79      if ( nCode < 0 ) {      if ( nCode < 0 ) {
80          return CallNextHookEx( hhook3, nCode, wParam, lParam );          return CallNextHookEx( hWndProc, nCode, wParam, lParam );
81      }      }
82            
83      char windowTitle[ 150 ] = { ""      char windowTitle[ 150 ] = { ""
# Line 93  LRESULT CALLBACK CallWndProc( int nCode, Line 90  LRESULT CALLBACK CallWndProc( int nCode,
90      CREATESTRUCT *cs = ( CREATESTRUCT * ) details->lParam;      CREATESTRUCT *cs = ( CREATESTRUCT * ) details->lParam;
91      LONG dwStyle = GetWindowLong( details->hwnd, GWL_STYLE );      LONG dwStyle = GetWindowLong( details->hwnd, GWL_STYLE );
92      WINDOWPOS *wp = ( WINDOWPOS * ) details->lParam;      WINDOWPOS *wp = ( WINDOWPOS * ) details->lParam;
93      RECT *rect = ( RECT * ) details->lParam;      RECT rect;
94            
95      switch ( details->message ) {      switch ( details->message ) {
96            
97          case WM_SIZING:          case WM_WINDOWPOSCHANGED:
98          case WM_MOVING:          if ( !( dwStyle & WS_DLGFRAME ) )
         if ( !( dwStyle & WS_VISIBLE ) )  
99              break;              break;
100                            
101          if ( !( dwStyle & WS_DLGFRAME ) )          if ( wp->flags & SWP_NOMOVE && wp->flags & SWP_NOSIZE )
102              break;              break;
103                            
104            if ( !GetWindowRect( details->hwnd, &rect ) ) {
105                SendDebug( "GetWindowRect failed!\n" );
106                break;
107            }
108            
109          snprintf( result, sizeof( result ),          snprintf( result, sizeof( result ),
110                    "POSITION1,0x%p,%d,%d,%d,%d,0x%x",                    "POSITION1,0x%p,%d,%d,%d,%d,0x%x\n",
111                    details->hwnd,                    details->hwnd,
112                    rect->left, rect->top,                    rect.left, rect.top,
113                    rect->right - rect->left,                    rect.right - rect.left,
114                    rect->bottom - rect->top,                    rect.bottom - rect.top,
115                    0 );                    0 );
116          result[ sizeof( result ) - 1 ] = '\0';          result[ sizeof( result ) - 1 ] = '\0';
117          WriteToChannel( result );          WriteToChannel( result );
118            
119          break;          break;
120                    
121                    
# Line 126  LRESULT CALLBACK CallWndProc( int nCode, Line 128  LRESULT CALLBACK CallWndProc( int nCode,
128          WM_WINDOWPOSCHANGING event is sent which looks just like          WM_WINDOWPOSCHANGING event is sent which looks just like
129          the event that was sent when the About dialog was opened...  */          the event that was sent when the About dialog was opened...  */
130          case WM_WINDOWPOSCHANGING:          case WM_WINDOWPOSCHANGING:
           
         if ( !( dwStyle & WS_VISIBLE ) )  
             break;  
               
131          if ( !( dwStyle & WS_DLGFRAME ) )          if ( !( dwStyle & WS_DLGFRAME ) )
132              break;              break;
133                            
# Line 147  LRESULT CALLBACK CallWndProc( int nCode, Line 145  LRESULT CALLBACK CallWndProc( int nCode,
145                    
146          case WM_CREATE:          case WM_CREATE:
147          if ( cs->style & WS_DLGFRAME ) {          if ( cs->style & WS_DLGFRAME ) {
148            
149                if ( cs->cx < 0 || cs->cy < 0 )
150                    break;
151                    
152              snprintf( result, sizeof( result ),              snprintf( result, sizeof( result ),
153                        "CREATE1,0x%p,0x%x\n",                        "CREATE1,0x%p,0x%x\n",
154                        details->hwnd, 0 );                        details->hwnd, 0 );
155              result[ sizeof( result ) - 1 ] = '\0';              result[ sizeof( result ) - 1 ] = '\0';
156              WriteToChannel( result );              WriteToChannel( result );
157                
158                snprintf( result, sizeof( result ),
159                          "SETSTATE1,0x%p,%s,0x%x,0x%x\n",
160                          details->hwnd,
161                          cs->lpszName,
162                          1,         // FIXME: Check for WS_MAXIMIZE/WS_MINIMIZE
163                          0 );
164                result[ sizeof( result ) - 1 ] = '\0';
165                WriteToChannel( result );
166                
167                snprintf( result, sizeof( result ),
168                          "POSITION1,0x%p,%d,%d,%d,%d,0x%x\n",
169                          details->hwnd,
170                          cs->x,
171                          cs->y,
172                          cs->cx,
173                          cs->cy,
174                          0 );
175                result[ sizeof( result ) - 1 ] = '\0';
176                WriteToChannel( result );
177                
178          }          }
179          break;          break;
180                    
# Line 172  LRESULT CALLBACK CallWndProc( int nCode, Line 195  LRESULT CALLBACK CallWndProc( int nCode,
195          break;          break;
196      }      }
197            
198      return CallNextHookEx( hhook3, nCode, wParam, lParam );      return CallNextHookEx( hWndProc, nCode, wParam, lParam );
199  }  }
200    
201  LRESULT CALLBACK CbtProc( int nCode, WPARAM wParam, LPARAM lParam )  LRESULT CALLBACK CbtProc( int nCode, WPARAM wParam, LPARAM lParam )
202  {  {
203      if ( nCode < 0 ) {      if ( nCode < 0 ) {
204          return CallNextHookEx( hhook, nCode, wParam, lParam );          return CallNextHookEx( hCbtProc, nCode, wParam, lParam );
205      }      }
206            
207      char windowTitle[ 150 ] = { ""      char windowTitle[ 150 ] = { ""
# Line 214  LRESULT CALLBACK CbtProc( int nCode, WPA Line 237  LRESULT CALLBACK CbtProc( int nCode, WPA
237            
238            
239            
240      return CallNextHookEx( hhook, nCode, wParam, lParam );      return CallNextHookEx( hCbtProc, nCode, wParam, lParam );
241  }  }
242    
243    
244  LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam, LPARAM lParam )  LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam, LPARAM lParam )
245  {  {
246      if ( nCode < 0 ) {      if ( nCode < 0 ) {
247          return CallNextHookEx( hhook, nCode, wParam, lParam );          return CallNextHookEx( hShellProc, nCode, wParam, lParam );
248      }      }
249            
250      char windowTitle[ 150 ] = { ""      char windowTitle[ 150 ] = { ""
# Line 330  LRESULT CALLBACK ShellProc( int nCode, W Line 353  LRESULT CALLBACK ShellProc( int nCode, W
353      }      }
354            
355            
356      return CallNextHookEx( hhook, nCode, wParam, lParam );      return CallNextHookEx( hShellProc, nCode, wParam, lParam );
357  }  }
358    
359  DLL_EXPORT void SetCbtHook( void )  DLL_EXPORT void SetHooks( void )
360  {  {
361      if ( !bHooked ) {      if ( !hCbtProc ) {
362          hhook = SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );          hCbtProc = SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );
         bHooked = true;  
363      }      }
364            
365      if ( !bHooked2 ) {  #if 0
366          hhook2 = SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst, ( DWORD ) NULL );      if ( !hShellProc ) {
367          bHooked2 = true;          hShellProc = SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst, ( DWORD ) NULL );
368      }      }
369    #endif
370            
371      if ( !bHooked3 ) {      if ( !hWndProc ) {
372          hhook3 = SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst, ( DWORD ) NULL );          hWndProc = SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst, ( DWORD ) NULL );
         bHooked3 = true;  
373      }      }
374  }  }
375    
376  DLL_EXPORT void RemoveCbtHook( void )  DLL_EXPORT void RemoveHooks( void )
377  {  {
378      if ( bHooked ) {      if ( hCbtProc ) {
379          UnhookWindowsHookEx( hhook );          UnhookWindowsHookEx( hCbtProc );
         bHooked = false;  
380      }      }
381            
382      if ( bHooked2 ) {      if ( hShellProc ) {
383          UnhookWindowsHookEx( hhook2 );          UnhookWindowsHookEx( hShellProc );
         bHooked2 = false;  
384      }      }
385            
386      if ( bHooked3 ) {      if ( hWndProc ) {
387          UnhookWindowsHookEx( hhook3 );          UnhookWindowsHookEx( hWndProc );
         bHooked3 = false;  
388      }      }
389  }  }
390    

Legend:
Removed from v.1005  
changed lines
  Added in v.1014

  ViewVC Help
Powered by ViewVC 1.1.26