/[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 996 by astrand, Mon Aug 29 09:11:50 2005 UTC revision 1007 by astrand, Tue Aug 30 12:04:08 2005 UTC
# Line 6  Line 6 
6  #include <windows.h>  #include <windows.h>
7  #include <winuser.h>  #include <winuser.h>
8  #include <stdio.h>  #include <stdio.h>
9    #include <stdarg.h>
10    
11  #include "wtsapi32.h"  #include "wtsapi32.h"
12  #include "Cchannel.h"  #include "Cchannel.h"
# Line 23  HWND hWnd = 0; Line 24  HWND hWnd = 0;
24    
25  #pragma comment(linker, "/section:SHAREDDATA,rws")  #pragma comment(linker, "/section:SHAREDDATA,rws")
26    
27    #define snprintf _snprintf
28    
29  bool bHooked = false;  bool bHooked = false;
30  bool bHooked2 = false;  bool bHooked2 = false;
31  bool bHooked3 = false;  bool bHooked3 = false;
# Line 32  HHOOK hhook3 = 0; //wnd proc Line 35  HHOOK hhook3 = 0; //wnd proc
35  HINSTANCE hInst = 0;  HINSTANCE hInst = 0;
36  HANDLE m_vcHandle = 0;  HANDLE m_vcHandle = 0;
37    
38    
39    void SendDebug( char *format, ... )
40    {
41        va_list argp;
42        char buf [ 256 ];
43        
44        va_start( argp, format );
45        vsprintf( buf, format, argp );
46        va_end( argp );
47        
48        WriteToChannel( "DEBUG1," );
49        WriteToChannel( buf );
50        WriteToChannel( "\n" );
51    }
52    
53    
54    
55  BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved )  BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved )
56  {  {
57      switch ( ul_reason_for_call ) {      switch ( ul_reason_for_call ) {
# Line 63  LRESULT CALLBACK CallWndProc( int nCode, Line 83  LRESULT CALLBACK CallWndProc( int nCode,
83          return CallNextHookEx( hhook3, nCode, wParam, lParam );          return CallNextHookEx( hhook3, nCode, wParam, lParam );
84      }      }
85            
     PCHAR buffer = NULL;  
86      char windowTitle[ 150 ] = { ""      char windowTitle[ 150 ] = { ""
87                                };                                };
88      HWND windowHandle = NULL;      HWND windowHandle = NULL;
89      HWND windowHandle2 = NULL;      HWND windowHandle2 = NULL;
90      char result[ 255 ] = { ""      char result[ 255 ] = { ""
91                           };                           };
     char strWindowId[ 25 ];  
     char type[ 25 ];  
       
     LONG b, t, l, r;  
     char strX[ 5 ];  
     char strY[ 5 ];  
     char strW[ 5 ];  
     char strH[ 5 ];  
     RECT rect;  
       
92      CWPSTRUCT *details = ( CWPSTRUCT * ) lParam;      CWPSTRUCT *details = ( CWPSTRUCT * ) lParam;
93      CREATESTRUCT *cs = ( CREATESTRUCT * ) details->lParam;      CREATESTRUCT *cs = ( CREATESTRUCT * ) details->lParam;
94      LONG dwStyle = GetWindowLong( details->hwnd, GWL_STYLE );      LONG dwStyle = GetWindowLong( details->hwnd, GWL_STYLE );
95        WINDOWPOS *wp = ( WINDOWPOS * ) details->lParam;
96        RECT *rect = ( RECT * ) details->lParam;
97            
98      switch ( details->message ) {      switch ( details->message ) {
99        
100          case WM_SIZING:          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;  
101          case WM_MOVING:          case WM_MOVING:
102                    if ( !( dwStyle & WS_VISIBLE ) )
103          windowHandle = details->hwnd;              break;
104          //get win name              
105          GetWindowText( windowHandle, windowTitle, 150 );          if ( !( dwStyle & WS_DLGFRAME ) )
106                        break;
107          //get an id for it              
108          itoa( ( int ) windowHandle, strWindowId, 10 );          snprintf( result, sizeof( result ),
109                              "POSITION1,0x%p,%d,%d,%d,%d,0x%x",
110          //get coords                    details->hwnd,
111          GetWindowRect( windowHandle, &rect );                    rect->left, rect->top,
112          b = rect.bottom;                    rect->right - rect->left,
113          t = rect.top;                    rect->bottom - rect->top,
114          l = rect.left;                    0 );
115          r = rect.right;          result[ sizeof( result ) - 1 ] = '\0';
116          ltoa( b - t, strH, 10 );          WriteToChannel( result );
         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 );  
         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;  
           
117          break;          break;
118                    
         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, "." );  
119                    
120          buffer = result;          /* Note: WM_WINDOWPOSCHANGING/WM_WINDOWPOSCHANGED are
121            strange. Sometimes, for example when bringing up the
122            Notepad About dialog, only an WM_WINDOWPOSCHANGING is
123            sent. In some other cases, for exmaple when opening
124            Format->Text in Notepad, both events are sent. Also, for
125            some reason, when closing the Notepad About dialog, an
126            WM_WINDOWPOSCHANGING event is sent which looks just like
127            the event that was sent when the About dialog was opened...  */
128            case WM_WINDOWPOSCHANGING:
129                    
130            if ( !( dwStyle & WS_VISIBLE ) )
131                break;
132                
133            if ( !( dwStyle & WS_DLGFRAME ) )
134                break;
135                
136            if ( !( wp->flags & SWP_NOZORDER ) ) {
137                snprintf( result, sizeof( result ),
138                          "ZCHANGE1,0x%p,0x%p,0x%x\n",
139                          details->hwnd,
140                          wp->flags & SWP_NOACTIVATE ? wp->hwndInsertAfter : 0,
141                          0 );
142                result[ sizeof( result ) - 1 ] = '\0';
143                WriteToChannel( result );
144            }
145          break;          break;
146                    
147                    
148          case WM_CREATE:          case WM_CREATE:
149          if ( cs->style & WS_DLGFRAME ) {          if ( cs->style & WS_DLGFRAME ) {
             sprintf( result, "DEBUG:WM_CREATE:%dx%d at %d,%d, title=%s, menu=%p, window=%p, WS_BORDER=%d, WS_DLGFRAME=%d, WS_POPUP=%d",  
                      cs->cx, cs->cy, cs->x, cs->y, cs->lpszName, cs->hMenu, details->hwnd,  
                      cs->style & WS_BORDER, cs->style & WS_DLGFRAME,  
                      cs->style & WS_POPUP );  
             buffer = result;  
         }  
150                    
151                snprintf( result, sizeof( result ),
152                          "CREATE1,0x%p,0x%x\n",
153                          details->hwnd, 0 );
154                result[ sizeof( result ) - 1 ] = '\0';
155                WriteToChannel( result );
156                
157                snprintf( result, sizeof( result ),
158                          "SETSTATE1,0x%p,%s,0x%x,0x%x\n",
159                          details->hwnd,
160                          cs->lpszName,
161                          1,    // FIXME: Check for WS_MAXIMIZE/WS_MINIMIZE
162                          0 );
163                result[ sizeof( result ) - 1 ] = '\0';
164                WriteToChannel( result );
165                
166                snprintf( result, sizeof( result ),
167                          "POSITION1,0x%p,%d,%d,%d,%d,0x%x",
168                          details->hwnd,
169                          cs->x,
170                          cs->y,
171                          cs->cx,
172                          cs->cy,
173                          0 );
174                result[ sizeof( result ) - 1 ] = '\0';
175                WriteToChannel( result );
176                
177            }
178          break;          break;
179                    
180                    
181          case WM_DESTROY:          case WM_DESTROY:
182          if ( dwStyle & WS_DLGFRAME ) {          if ( dwStyle & WS_DLGFRAME ) {
183              sprintf( result, "WM_DESTROY:%p", details->hwnd );              snprintf( result, sizeof( result ),
184              buffer = result;                        "DESTROY1,0x%p,0x%x\n",
185                          details->hwnd, 0 );
186                result[ sizeof( result ) - 1 ] = '\0';
187                WriteToChannel( result );
188          }          }
189                    
190          break;          break;
191                    
192            
193          default:          default:
194          break;          break;
195      }      }
196            
     if ( ChannelIsOpen() ) {  
         if ( buffer != NULL ) {  
             WriteToChannel( buffer );  
         }  
     }  
       
197      return CallNextHookEx( hhook3, nCode, wParam, lParam );      return CallNextHookEx( hhook3, nCode, wParam, lParam );
198  }  }
199    
# Line 259  LRESULT CALLBACK CbtProc( int nCode, WPA Line 203  LRESULT CALLBACK CbtProc( int nCode, WPA
203          return CallNextHookEx( hhook, nCode, wParam, lParam );          return CallNextHookEx( hhook, nCode, wParam, lParam );
204      }      }
205            
206        char windowTitle[ 150 ] = { ""
207                                  };
208        HWND windowHandle = NULL;
209        char result[ 255 ] = { ""
210                             };
211        switch ( nCode ) {
212            case HCBT_MINMAX:
213            
214            if ( ( LOWORD( lParam ) == SW_SHOWMINIMIZED )
215                    || ( LOWORD( lParam ) == SW_MINIMIZE ) ) {
216                MessageBox( 0, "Minimizing windows is not allowed in this version. Sorry!", "SeamlessRDP", MB_OK );
217                return 1;
218            }
219            
220            GetWindowText( ( HWND ) wParam, windowTitle, 150 );
221            
222            snprintf( result, sizeof( result ),
223                      "SETSTATE1,0x%p,%s,0x%x,0x%x\n",
224                      ( HWND ) wParam,
225                      windowTitle,
226                      LOWORD( lParam ),
227                      0 );
228            result[ sizeof( result ) - 1 ] = '\0';
229            WriteToChannel( result );
230            break;
231            
232            
233            default:
234            break;
235        }
236        
237            
     PCHAR buffer = NULL;  
238            
239        return CallNextHookEx( hhook, nCode, wParam, lParam );
240    }
241    
242    
243    LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam, LPARAM lParam )
244    {
245        if ( nCode < 0 ) {
246            return CallNextHookEx( hhook, nCode, wParam, lParam );
247        }
248            
249      char windowTitle[ 150 ] = { ""      char windowTitle[ 150 ] = { ""
250                                };                                };
# Line 269  LRESULT CALLBACK CbtProc( int nCode, WPA Line 252  LRESULT CALLBACK CbtProc( int nCode, WPA
252      char result[ 255 ] = { ""      char result[ 255 ] = { ""
253                           };                           };
254      char strWindowId[ 25 ];      char strWindowId[ 25 ];
     char type[ 25 ];  
       
       
255      LONG b, t, l, r;      LONG b, t, l, r;
256      char strW[ 5 ];      char strW[ 5 ];
257      char strY[ 5 ];      char strY[ 5 ];
# Line 279  LRESULT CALLBACK CbtProc( int nCode, WPA Line 259  LRESULT CALLBACK CbtProc( int nCode, WPA
259      char strH[ 5 ];      char strH[ 5 ];
260      RECT rect;      RECT rect;
261            
     int i = 0; //tmp  
       
262      switch ( nCode ) {      switch ( nCode ) {
263          case HCBT_MINMAX:          case HSHELL_WINDOWCREATED:
264                    
265            //get window id
266          windowHandle = ( HWND ) wParam;          windowHandle = ( HWND ) wParam;
         //get win name  
         GetWindowText( windowHandle, windowTitle, 150 );  
           
         //get an id for it  
267          itoa( ( int ) windowHandle, strWindowId, 10 );          itoa( ( int ) windowHandle, strWindowId, 10 );
268                    
         //get operation type(min,max). if max, do not clip at all,if min use window's previous coords  
         //codes are:  
           
         // SW_HIDE= 0  SW_SHOWNORMAL=1  SW_NORMAL=1  SW_SHOWMINIMIZED=2  SW_SHOWMAXIMIZED=3  SW_MAXIMIZE=3  
         // 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  
           
         itoa( ( int ) lParam, type, 10 );  
           
269          //get coords          //get coords
270          GetWindowRect( windowHandle, &rect );          GetWindowRect( windowHandle, &rect );
271          b = rect.bottom;          b = rect.bottom;
272          t = rect.top;          t = rect.top;
273          l = rect.left;          l = rect.left;
274          r = rect.right;          r = rect.right;
275          ltoa( b - t, strW, 10 );          ltoa( b - t, strH, 10 );
276          ltoa( t, strY, 10 );          ltoa( t, strY, 10 );
277          ltoa( r - l, strH, 10 );          ltoa( r - l, strW, 10 );
278          ltoa( l, strX, 10 );          ltoa( l, strX, 10 );
279                    
280          //get name          //get name
281          GetWindowText( windowHandle, windowTitle, 150 );          GetWindowText( windowHandle, windowTitle, 150 );
282                    
283          ////setup return string          ////setup return string
284          strcat( result, "MSG=HCBT_MINMAX;OP=4;" );          strcat( result, "MSG=HSHELL_WINDOWCREATED;OP=0;" );
           
         // 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  
285          strcat( result, "ID=" );          strcat( result, "ID=" );
286          strcat( result, strWindowId );          strcat( result, strWindowId );
287          strcat( result, ";" );          strcat( result, ";" );
# Line 336  LRESULT CALLBACK CbtProc( int nCode, WPA Line 299  LRESULT CALLBACK CbtProc( int nCode, WPA
299          strcat( result, ";" );          strcat( result, ";" );
300          strcat( result, "W=" );          strcat( result, "W=" );
301          strcat( result, strW );          strcat( result, strW );
         strcat( result, ";" );  
         strcat( result, "TYPE=" );  
         strcat( result, type );  
302          strcat( result, "." );          strcat( result, "." );
303                    WriteToChannel( 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;  
         //}  
         //-----------------------------------------------------------------------------------------  
           
         buffer = result;  
           
304          break;          break;
305                    
306          case HCBT_MOVESIZE:          case HSHELL_WINDOWDESTROYED:
307                    
308            //get window id
309          windowHandle = ( HWND ) wParam;          windowHandle = ( HWND ) wParam;
         //get win name  
         GetWindowText( windowHandle, windowTitle, 150 );  
           
         //get an id for it  
310          itoa( ( int ) windowHandle, strWindowId, 10 );          itoa( ( int ) windowHandle, strWindowId, 10 );
311                    
312          //get coords          //get coords
# Line 391  LRESULT CALLBACK CbtProc( int nCode, WPA Line 324  LRESULT CALLBACK CbtProc( int nCode, WPA
324          GetWindowText( windowHandle, windowTitle, 150 );          GetWindowText( windowHandle, windowTitle, 150 );
325                    
326          ////setup return string          ////setup return string
327          strcat( result, "MSG=HCBT_MOVESIZE;OP=5;" );          strcat( result, "MSG=HSHELL_WINDOWDESTROYED;OP=1;" );
328          strcat( result, "ID=" );          strcat( result, "ID=" );
329          strcat( result, strWindowId );          strcat( result, strWindowId );
330          strcat( result, ";" );          strcat( result, ";" );
# Line 410  LRESULT CALLBACK CbtProc( int nCode, WPA Line 343  LRESULT CALLBACK CbtProc( int nCode, WPA
343          strcat( result, "W=" );          strcat( result, "W=" );
344          strcat( result, strW );          strcat( result, strW );
345          strcat( result, "." );          strcat( result, "." );
346            WriteToChannel( result );
347            break;
348                    
         buffer = result;  
349                    
         break;  
         case HCBT_SETFOCUS:  
         //buffer = "HCBT_SETFOCUS";  
         //not needed yet  
         break;  
350          default:          default:
351          break;          break;
352      }      }
353            
     if ( ChannelIsOpen() ) {  
         if ( buffer != NULL ) {  
             WriteToChannel( buffer );  
         }  
     }  
354            
355      return CallNextHookEx( hhook, nCode, wParam, lParam );      return CallNextHookEx( hhook, nCode, wParam, lParam );
356  }  }
357    
358    DLL_EXPORT void SetHooks( void )
 LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam, LPARAM lParam )  
 {  
     if ( nCode < 0 ) {  
         return CallNextHookEx( hhook, nCode, wParam, lParam );  
     }  
       
     if ( ChannelIsOpen() ) {  
         PCHAR buffer = NULL;  
           
         char windowTitle[ 150 ] = { ""  
                                   };  
         HWND windowHandle = NULL;  
         char result[ 255 ] = { ""  
                              };  
         char strWindowId[ 25 ];  
         LONG b, t, l, r;  
         char strW[ 5 ];  
         char strY[ 5 ];  
         char strX[ 5 ];  
         char strH[ 5 ];  
         RECT rect;  
           
         switch ( nCode ) {  
             case HSHELL_WINDOWCREATED:  
               
             //get window id  
             windowHandle = ( HWND ) wParam;  
             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_WINDOWCREATED;OP=0;" );  
             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 HSHELL_WINDOWDESTROYED:  
               
             //get window id  
             windowHandle = ( HWND ) wParam;  
             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 );  
             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;  
             default:  
             break;  
         }  
           
         if ( buffer != NULL ) {  
             WriteToChannel( buffer );  
         }  
     }  
       
     return CallNextHookEx( hhook, nCode, wParam, lParam );  
 }  
   
 DLL_EXPORT void SetCbtHook( void )  
359  {  {
360      if ( !bHooked ) {      if ( !bHooked ) {
361          hhook = SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );          hhook = SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );
362          bHooked = true;          bHooked = true;
363      }      }
364            
365    #if 0
366      if ( !bHooked2 ) {      if ( !bHooked2 ) {
367          hhook2 = SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst, ( DWORD ) NULL );          hhook2 = SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst, ( DWORD ) NULL );
368          bHooked2 = true;          bHooked2 = true;
369      }      }
370    #endif
371            
372      if ( !bHooked3 ) {      if ( !bHooked3 ) {
373          hhook3 = SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst, ( DWORD ) NULL );          hhook3 = SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst, ( DWORD ) NULL );
# Line 574  DLL_EXPORT void SetCbtHook( void ) Line 375  DLL_EXPORT void SetCbtHook( void )
375      }      }
376  }  }
377    
378  DLL_EXPORT void RemoveCbtHook( void )  DLL_EXPORT void RemoveHooks( void )
379  {  {
380      if ( bHooked ) {      if ( bHooked ) {
381          UnhookWindowsHookEx( hhook );          UnhookWindowsHookEx( hhook );
# Line 635  int WriteToChannel( PCHAR buffer ) Line 436  int WriteToChannel( PCHAR buffer )
436      PULONG bytesRead = 0;      PULONG bytesRead = 0;
437      PULONG pBytesWritten = 0;      PULONG pBytesWritten = 0;
438            
439        if ( !ChannelIsOpen() )
440            return 1;
441            
442      BOOL result = WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ), pBytesWritten );      BOOL result = WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ), pBytesWritten );
443            
444      if ( result ) {      if ( result ) {

Legend:
Removed from v.996  
changed lines
  Added in v.1007

  ViewVC Help
Powered by ViewVC 1.1.26