CVS: seamlessrdp/ServerExe/HookDll hookdll.cpp,1.6,1.7

Peter Åstrand <[email protected]>
Newsgroups gmane.network.rdesktop.cvs
Message-ID <[email protected]>
Update of /cvsroot/rdesktop/seamlessrdp/ServerExe/HookDll
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12409/ServerExe/HookDll

Modified Files:
	hookdll.cpp 
Log Message:
Imported changes from nxclipper-1.5.0-9

Index: hookdll.cpp
===================================================================
RCS file: /cvsroot/rdesktop/seamlessrdp/ServerExe/HookDll/hookdll.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** hookdll.cpp	28 Aug 2005 12:56:38 -0000	1.6
--- hookdll.cpp	28 Aug 2005 13:06:05 -0000	1.7
***************
*** 26,37 ****
  bool bHooked2 = false;
  bool bHooked3 = false;
! HHOOK hhook = 0;                //cbt
! HHOOK hhook2 = 0;               //shell
! HHOOK hhook3 = 0;               //wnd proc
  HINSTANCE hInst = 0;
  HANDLE m_vcHandle = 0;
  
! BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call,
!                        LPVOID lpReserved )
  {
      switch ( ul_reason_for_call ) {
--- 26,36 ----
  bool bHooked2 = false;
  bool bHooked3 = false;
! HHOOK hhook = 0; //cbt
! HHOOK hhook2 = 0; //shell
! HHOOK hhook3 = 0; //wnd proc
  HINSTANCE hInst = 0;
  HANDLE m_vcHandle = 0;
  
! BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved )
  {
      switch ( ul_reason_for_call ) {
***************
*** 68,71 ****
--- 67,71 ----
                                };
      HWND windowHandle = NULL;
+     HWND windowHandle2 = NULL;
      char result[ 255 ] = { ""
                           };
***************
*** 74,81 ****
      
      LONG b, t, l, r;
!     char strB[ 5 ];
!     char strT[ 5 ];
!     char strL[ 5 ];
!     char strR[ 5 ];
      RECT rect;
      
--- 74,81 ----
      
      LONG b, t, l, r;
!     char strX[ 5 ];
!     char strY[ 5 ];
!     char strW[ 5 ];
!     char strH[ 5 ];
      RECT rect;
      
***************
*** 84,87 ****
--- 84,129 ----
      switch ( details->message ) {
          case WM_SIZING:
+         windowHandle = details->hwnd;
+         //get win name
+         GetWindowText( windowHandle, windowTitle, 150 );
+         
+         //get an id for it
+         itoa( ( int ) windowHandle, strWindowId, 10 );
+         
+         //get coords
+         GetWindowRect( windowHandle, &rect );
+         b = rect.bottom;
+         t = rect.top;
+         l = rect.left;
+         r = rect.right;
+         ltoa( b - t, strH, 10 );
+         ltoa( t, strY, 10 );
+         ltoa( r - l, strW, 10 );
+         ltoa( l, strX, 10 );
+         
+         ////setup return string
+         strcat( result, "MSG=CALLWNDPROC_WM_SIZING;OP=6;" );
+         strcat( result, "ID=" );
+         strcat( result, strWindowId );
+         strcat( result, ";" );
+         strcat( result, "TITLE=" );
+         strcat( result, windowTitle );
+         strcat( result, ";" );
+         strcat( result, "X=" );
+         strcat( result, strX );
+         strcat( result, ";" );
+         strcat( result, "Y=" );
+         strcat( result, strY );
+         strcat( result, ";" );
+         strcat( result, "H=" );
+         strcat( result, strH );
+         strcat( result, ";" );
+         strcat( result, "W=" );
+         strcat( result, strW );
+         strcat( result, "." );
+         
+         buffer = result;
+         
+         break;
          case WM_MOVING:
          
***************
*** 99,109 ****
          l = rect.left;
          r = rect.right;
!         ltoa( b, strB, 10 );
!         ltoa( t, strT, 10 );
!         ltoa( r, strR, 10 );
!         ltoa( l, strL, 10 );
          
          ////setup return string
!         strcat( result, "MSG=CALLWNDPROC_WM_MOVING;" );
          strcat( result, "ID=" );
          strcat( result, strWindowId );
--- 141,151 ----
          l = rect.left;
          r = rect.right;
!         ltoa( b - t, strH, 10 );
!         ltoa( t, strY, 10 );
!         ltoa( r - l, strW, 10 );
!         ltoa( l, strX, 10 );
          
          ////setup return string
!         strcat( result, "MSG=CALLWNDPROC_WM_MOVING;OP=2;" );
          strcat( result, "ID=" );
          strcat( result, strWindowId );
***************
*** 112,124 ****
          strcat( result, windowTitle );
          strcat( result, ";" );
!         strcat( result, "POS=" );
!         strcat( result, strL );
!         strcat( result, "~" );
!         strcat( result, strT );
!         strcat( result, "~" );
!         strcat( result, strR );
!         strcat( result, "~" );
!         strcat( result, strB );
          strcat( result, ";" );
          
          buffer = result;
--- 154,261 ----
          strcat( result, windowTitle );
          strcat( result, ";" );
!         strcat( result, "X=" );
!         strcat( result, strX );
          strcat( result, ";" );
+         strcat( result, "Y=" );
+         strcat( result, strY );
+         strcat( result, ";" );
+         strcat( result, "H=" );
+         strcat( result, strH );
+         strcat( result, ";" );
+         strcat( result, "W=" );
+         strcat( result, strW );
+         strcat( result, "." );
+         
+         buffer = result;
+         
+         break;
+         
+         
+         case WM_WINDOWPOSCHANGING:
+         
+         windowHandle = details->hwnd;
+         //windowHandle2 = details->hwndInsertAfter;
+         //get win name
+         GetWindowText( windowHandle, windowTitle, 150 );
+         
+         //get an id for it
+         itoa( ( int ) windowHandle, strWindowId, 10 );
+         
+         //get coords
+         GetWindowRect( windowHandle, &rect );
+         b = rect.bottom;
+         t = rect.top;
+         l = rect.left;
+         r = rect.right;
+         ltoa( b - t, strH, 10 );
+         ltoa( t, strY, 10 );
+         ltoa( r - l, strW, 10 );
+         ltoa( l, strX, 10 );
+         
+         ////setup return string
+         strcat( result, "MSG=CALLWNDPROC_WM_WINDOWPOSCHANGING;OP=7;" );
+         strcat( result, "ID=" );
+         strcat( result, strWindowId );
+         strcat( result, ";" );
+         strcat( result, "TITLE=" );
+         strcat( result, windowTitle );
+         strcat( result, ";" );
+         strcat( result, "X=" );
+         strcat( result, strX );
+         strcat( result, ";" );
+         strcat( result, "Y=" );
+         strcat( result, strY );
+         strcat( result, ";" );
+         strcat( result, "H=" );
+         strcat( result, strH );
+         strcat( result, ";" );
+         strcat( result, "W=" );
+         strcat( result, strW );
+         strcat( result, "." );
+         
+         buffer = result;
+         
+         break;
+         case WM_WINDOWPOSCHANGED:
+         
+         windowHandle = details->hwnd;
+         //windowHandle2 = details->hwndInsertAfter;
+         //get win name
+         GetWindowText( windowHandle, windowTitle, 150 );
+         
+         //get an id for it
+         itoa( ( int ) windowHandle, strWindowId, 10 );
+         
+         //get coords
+         GetWindowRect( windowHandle, &rect );
+         b = rect.bottom;
+         t = rect.top;
+         l = rect.left;
+         r = rect.right;
+         ltoa( b - t, strH, 10 );
+         ltoa( t, strY, 10 );
+         ltoa( r - l, strW, 10 );
+         ltoa( l, strX, 10 );
+         
+         ////setup return string
+         strcat( result, "MSG=CALLWNDPROC_WM_WINDOWPOSCHANGED;OP=8;" );
+         strcat( result, "ID=" );
+         strcat( result, strWindowId );
+         strcat( result, ";" );
+         strcat( result, "TITLE=" );
+         strcat( result, windowTitle );
+         strcat( result, ";" );
+         strcat( result, "X=" );
+         strcat( result, strX );
+         strcat( result, ";" );
+         strcat( result, "Y=" );
+         strcat( result, strY );
+         strcat( result, ";" );
+         strcat( result, "H=" );
+         strcat( result, strH );
+         strcat( result, ";" );
+         strcat( result, "W=" );
+         strcat( result, strW );
+         strcat( result, "." );
          
          buffer = result;
***************
*** 159,169 ****
      
      LONG b, t, l, r;
!     char strB[ 5 ];
!     char strT[ 5 ];
!     char strL[ 5 ];
!     char strR[ 5 ];
      RECT rect;
      
!     int i = 0;                  //tmp
      
      switch ( nCode ) {
--- 296,306 ----
      
      LONG b, t, l, r;
!     char strW[ 5 ];
!     char strY[ 5 ];
!     char strX[ 5 ];
!     char strH[ 5 ];
      RECT rect;
      
!     int i = 0; //tmp
      
      switch ( nCode ) {
***************
*** 192,199 ****
          l = rect.left;
          r = rect.right;
!         ltoa( b, strB, 10 );
!         ltoa( t, strT, 10 );
!         ltoa( r, strR, 10 );
!         ltoa( l, strL, 10 );
          
          //get name
--- 329,336 ----
          l = rect.left;
          r = rect.right;
!         ltoa( b - t, strW, 10 );
!         ltoa( t, strY, 10 );
!         ltoa( r - l, strH, 10 );
!         ltoa( l, strX, 10 );
          
          //get name
***************
*** 201,205 ****
          
          ////setup return string
!         strcat( result, "MSG=HCBT_MINMAX;" );
          strcat( result, "ID=" );
          strcat( result, strWindowId );
--- 338,345 ----
          
          ////setup return string
!         strcat( result, "MSG=HCBT_MINMAX;OP=4;" );
!         
!         // SW_SHOWNOACTIVATE=4  SW_SHOW=5  SW_MINIMIZE=6  SW_SHOWMINNOACTIVE=7  SW_SHOWNA=8  SW_RESTORE=9
!         // SW_SHOWDEFAULT=10  SW_FORCEMINIMIZE=11  SW_MAX=11
          strcat( result, "ID=" );
          strcat( result, strWindowId );
***************
*** 208,246 ****
          strcat( result, windowTitle );
          strcat( result, ";" );
!         strcat( result, "POS=" );
!         strcat( result, strL );
!         strcat( result, "~" );
!         strcat( result, strT );
!         strcat( result, "~" );
!         strcat( result, strR );
!         strcat( result, "~" );
!         strcat( result, strB );
          strcat( result, ";" );
          strcat( result, "TYPE=" );
          strcat( result, type );
!         strcat( result, ";" );
          
          //-------------------------------------------------------------------------------------------------
          // code to prevent minimising windows (can be removed once minimise has been implemented)
!         i = ( int ) lParam;
          //if (i==0 || i==2 || i==6 || i==7 || i==8 || i==11)
!         if ( i == 2 || i == 6 ) {
!             MessageBox( 0,
!                         "Minimising windows is not allowed in this version. Sorry!",
!                         "TS Window Clipper", MB_OK );
!             return 1;
!         }
          //-----------------------------------------------------------------------------------------
          
          //-------------------------------------------------------------------------------------------------
          // code to prevent maximising windows (can be removed once maximise has been implemented)
!         i = ( int ) lParam;
          //if (i==3 || i==9 || i==11)
!         if ( i == 3 || i == 11 ) {
!             MessageBox( 0,
!                         "Maximising windows is not allowed in this version. Sorry!",
!                         "TS Window Clipper", MB_OK );
!             return 1;
!         }
          //-----------------------------------------------------------------------------------------
          
--- 348,387 ----
          strcat( result, windowTitle );
          strcat( result, ";" );
!         strcat( result, "X=" );
!         strcat( result, strX );
!         strcat( result, ";" );
!         strcat( result, "Y=" );
!         strcat( result, strY );
!         strcat( result, ";" );
!         strcat( result, "H=" );
!         strcat( result, strH );
!         strcat( result, ";" );
!         strcat( result, "W=" );
!         strcat( result, strW );
          strcat( result, ";" );
          strcat( result, "TYPE=" );
          strcat( result, type );
!         strcat( result, "." );
          
          //-------------------------------------------------------------------------------------------------
          // code to prevent minimising windows (can be removed once minimise has been implemented)
!         //i = (int)lParam;
          //if (i==0 || i==2 || i==6 || i==7 || i==8 || i==11)
!         //if ( i==2 || i==6 )
!         //{
!         // MessageBox(0,"Minimising windows is not allowed in this version. Sorry!","TS Window Clipper", MB_OK);
!         // return 1;
!         //}
          //-----------------------------------------------------------------------------------------
          
          //-------------------------------------------------------------------------------------------------
          // code to prevent maximising windows (can be removed once maximise has been implemented)
!         //i = (int)lParam;
          //if (i==3 || i==9 || i==11)
!         //if (i==3 || i==11)
!         //{
!         // MessageBox(0,"Maximising windows is not allowed in this version. Sorry!","TS Window Clipper", MB_OK);
!         // return 1;
!         //}
          //-----------------------------------------------------------------------------------------
          
***************
*** 264,271 ****
          l = rect.left;
          r = rect.right;
!         ltoa( b, strB, 10 );
!         ltoa( t, strT, 10 );
!         ltoa( r, strR, 10 );
!         ltoa( l, strL, 10 );
          
          //get name
--- 405,412 ----
          l = rect.left;
          r = rect.right;
!         ltoa( b - t, strH, 10 );
!         ltoa( t, strY, 10 );
!         ltoa( r - l, strW, 10 );
!         ltoa( l, strX, 10 );
          
          //get name
***************
*** 273,277 ****
          
          ////setup return string
!         strcat( result, "MSG=HCBT_MOVESIZE;" );
          strcat( result, "ID=" );
          strcat( result, strWindowId );
--- 414,418 ----
          
          ////setup return string
!         strcat( result, "MSG=HCBT_MOVESIZE;OP=5;" );
          strcat( result, "ID=" );
          strcat( result, strWindowId );
***************
*** 280,292 ****
          strcat( result, windowTitle );
          strcat( result, ";" );
!         strcat( result, "POS=" );
!         strcat( result, strL );
!         strcat( result, "~" );
!         strcat( result, strT );
!         strcat( result, "~" );
!         strcat( result, strR );
!         strcat( result, "~" );
!         strcat( result, strB );
          strcat( result, ";" );
          
          buffer = result;
--- 421,436 ----
          strcat( result, windowTitle );
          strcat( result, ";" );
!         strcat( result, "X=" );
!         strcat( result, strX );
!         strcat( result, ";" );
!         strcat( result, "Y=" );
!         strcat( result, strY );
          strcat( result, ";" );
+         strcat( result, "H=" );
+         strcat( result, strH );
+         strcat( result, ";" );
+         strcat( result, "W=" );
+         strcat( result, strW );
+         strcat( result, "." );
          
          buffer = result;
***************
*** 327,334 ****
          char strWindowId[ 25 ];
          LONG b, t, l, r;
!         char strB[ 5 ];
!         char strT[ 5 ];
!         char strL[ 5 ];
!         char strR[ 5 ];
          RECT rect;
          
--- 471,478 ----
          char strWindowId[ 25 ];
          LONG b, t, l, r;
!         char strW[ 5 ];
!         char strY[ 5 ];
!         char strX[ 5 ];
!         char strH[ 5 ];
          RECT rect;
          
***************
*** 346,353 ****
              l = rect.left;
              r = rect.right;
!             ltoa( b, strB, 10 );
!             ltoa( t, strT, 10 );
!             ltoa( r, strR, 10 );
!             ltoa( l, strL, 10 );
              
              //get name
--- 490,497 ----
              l = rect.left;
              r = rect.right;
!             ltoa( b - t, strH, 10 );
!             ltoa( t, strY, 10 );
!             ltoa( r - l, strW, 10 );
!             ltoa( l, strX, 10 );
              
              //get name
***************
*** 355,359 ****
              
              ////setup return string
!             strcat( result, "MSG=HSHELL_WINDOWCREATED;" );
              strcat( result, "ID=" );
              strcat( result, strWindowId );
--- 499,503 ----
              
              ////setup return string
!             strcat( result, "MSG=HSHELL_WINDOWCREATED;OP=0;" );
              strcat( result, "ID=" );
              strcat( result, strWindowId );
***************
*** 362,374 ****
              strcat( result, windowTitle );
              strcat( result, ";" );
!             strcat( result, "POS=" );
!             strcat( result, strL );
!             strcat( result, "~" );
!             strcat( result, strT );
!             strcat( result, "~" );
!             strcat( result, strR );
!             strcat( result, "~" );
!             strcat( result, strB );
              strcat( result, ";" );
              
              buffer = result;
--- 506,521 ----
              strcat( result, windowTitle );
              strcat( result, ";" );
!             strcat( result, "X=" );
!             strcat( result, strX );
              strcat( result, ";" );
+             strcat( result, "Y=" );
+             strcat( result, strY );
+             strcat( result, ";" );
+             strcat( result, "H=" );
+             strcat( result, strH );
+             strcat( result, ";" );
+             strcat( result, "W=" );
+             strcat( result, strW );
+             strcat( result, "." );
              
              buffer = result;
***************
*** 382,390 ****
              itoa( ( int ) windowHandle, strWindowId, 10 );
              
              //get name
              GetWindowText( windowHandle, windowTitle, 150 );
              
              ////setup return string
!             strcat( result, "MSG=HSHELL_WINDOWDESTROYED;" );
              strcat( result, "ID=" );
              strcat( result, strWindowId );
--- 529,548 ----
              itoa( ( int ) windowHandle, strWindowId, 10 );
              
+             //get coords
+             GetWindowRect( windowHandle, &rect );
+             b = rect.bottom;
+             t = rect.top;
+             l = rect.left;
+             r = rect.right;
+             ltoa( b - t, strH, 10 );
+             ltoa( t, strY, 10 );
+             ltoa( r - l, strW, 10 );
+             ltoa( l, strX, 10 );
+             
              //get name
              GetWindowText( windowHandle, windowTitle, 150 );
              
              ////setup return string
!             strcat( result, "MSG=HSHELL_WINDOWDESTROYED;OP=1;" );
              strcat( result, "ID=" );
              strcat( result, strWindowId );
***************
*** 393,396 ****
--- 551,566 ----
              strcat( result, windowTitle );
              strcat( result, ";" );
+             strcat( result, "X=" );
+             strcat( result, strX );
+             strcat( result, ";" );
+             strcat( result, "Y=" );
+             strcat( result, strY );
+             strcat( result, ";" );
+             strcat( result, "H=" );
+             strcat( result, strH );
+             strcat( result, ";" );
+             strcat( result, "W=" );
+             strcat( result, strW );
+             strcat( result, "." );
              
              buffer = result;
***************
*** 412,431 ****
  {
      if ( !bHooked ) {
!         hhook =
!             SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );
          bHooked = true;
      }
      
      if ( !bHooked2 ) {
!         hhook2 =
!             SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst,
!                               ( DWORD ) NULL );
          bHooked2 = true;
      }
      
      if ( !bHooked3 ) {
!         hhook3 =
!             SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst,
!                               ( DWORD ) NULL );
          bHooked3 = true;
      }
--- 582,596 ----
  {
      if ( !bHooked ) {
!         hhook = SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );
          bHooked = true;
      }
      
      if ( !bHooked2 ) {
!         hhook2 = SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst, ( DWORD ) NULL );
          bHooked2 = true;
      }
      
      if ( !bHooked3 ) {
!         hhook3 = SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst, ( DWORD ) NULL );
          bHooked3 = true;
      }
***************
*** 457,464 ****
  int OpenVirtualChannel()
  {
!     m_vcHandle =
!         WTSVirtualChannelOpen( WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,
!                                CHANNELNAME );
!                                
      if ( m_vcHandle == NULL ) {
          return 0;
--- 622,627 ----
  int OpenVirtualChannel()
  {
!     m_vcHandle = WTSVirtualChannelOpen( WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, CHANNELNAME );
!     
      if ( m_vcHandle == NULL ) {
          return 0;
***************
*** 495,502 ****
      PULONG pBytesWritten = 0;
      
!     BOOL result =
!         WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ),
!                                 pBytesWritten );
!                                 
      if ( result ) {
          return 1;
--- 658,663 ----
      PULONG pBytesWritten = 0;
      
!     BOOL result = WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ), pBytesWritten );
!     
      if ( result ) {
          return 1;



-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.