/[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 937 by astrand, Fri Jul 1 06:50:52 2005 UTC revision 999 by astrand, Tue Aug 30 09:18:53 2005 UTC
# Line 1  Line 1 
 //*********************************************************************************  
1  //  //
2  //Title: Terminal Services Window Clipper  // Copyright (C) 2004-2005 Martin Wickett
3  //  //
 //Author: Martin Wickett  
 //  
 //Date: 2004  
 //  
 //*********************************************************************************  
4    
5  #include "hookdll.h"  #include "hookdll.h"
6  #include <windows.h>  #include <windows.h>
7  #include <winuser.h>  #include <winuser.h>
8    #include <stdio.h>
9    #include <stdarg.h>
10    
11  #include "wtsapi32.h"  #include "wtsapi32.h"
12  #include "Cchannel.h"  #include "Cchannel.h"
13    
14  #define DLL_EXPORT extern "C" __declspec(dllexport)  #define DLL_EXPORT extern "C" __declspec(dllexport)
15    
16  // Shared DATA  // Shared DATA
17  #pragma data_seg ( "SHAREDDATA" )  #pragma data_seg ( "SHAREDDATA" )
# Line 28  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;
32  HHOOK hhook = 0;                //cbt  HHOOK hhook = 0; //cbt
33  HHOOK hhook2 = 0;               //shell  HHOOK hhook2 = 0; //shell
34  HHOOK hhook3 = 0;               //wnd proc  HHOOK hhook3 = 0; //wnd proc
35  HINSTANCE hInst = 0;  HINSTANCE hInst = 0;
36  HANDLE m_vcHandle = 0;  HANDLE m_vcHandle = 0;
37    
38  BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD ul_reason_for_call,  
39                        LPVOID lpReserved)  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        if ( ChannelIsOpen() ) {
49            WriteToChannel( "DEBUG1," );
50            WriteToChannel( buf );
51            WriteToChannel( "\n" );
52        }
53    }
54    
55    
56    
57    BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved )
58  {  {
59      switch (ul_reason_for_call) {      switch ( ul_reason_for_call ) {
60      case DLL_PROCESS_ATTACH: {          case DLL_PROCESS_ATTACH: {
61              // remember our instance handle              // remember our instance handle
62              hInst = hinstDLL;              hInst = hinstDLL;
63              ++iInstanceCount;              ++iInstanceCount;
64              OpenVirtualChannel();              OpenVirtualChannel();
65              break;              break;
66          }          }
67            
68      case DLL_THREAD_ATTACH:          case DLL_THREAD_ATTACH:
69          break;          break;
70      case DLL_THREAD_DETACH:          case DLL_THREAD_DETACH:
71          break;          break;
72      case DLL_PROCESS_DETACH: {          case DLL_PROCESS_DETACH: {
73              --iInstanceCount;              --iInstanceCount;
74              CloseVirtualChannel();              CloseVirtualChannel();
75          }          }
76          break;          break;
77      }      }
78        
79      return TRUE;      return TRUE;
80  }  }
81    
82  LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)  LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam )
83  {  {
84      if (nCode < 0) {      if ( nCode < 0 ) {
85          return CallNextHookEx(hhook3, nCode, wParam, lParam);          return CallNextHookEx( hhook3, nCode, wParam, lParam );
86      }      }
87        
88      PCHAR buffer = NULL;      PCHAR buffer = NULL;
89      char windowTitle[150] = { "" };      char windowTitle[ 150 ] = { ""
90                                  };
91      HWND windowHandle = NULL;      HWND windowHandle = NULL;
92      char result[255] = { "" };      HWND windowHandle2 = NULL;
93      char strWindowId[25];      char result[ 255 ] = { ""
94      char type[25];                           };
95        char strWindowId[ 25 ];
96        char type[ 25 ];
97        
98      LONG b, t, l, r;      LONG b, t, l, r;
99      char strB[5];      char strX[ 5 ];
100      char strT[5];      char strY[ 5 ];
101      char strL[5];      char strW[ 5 ];
102      char strR[5];      char strH[ 5 ];
103      RECT rect;      
104        CWPSTRUCT *details = ( CWPSTRUCT * ) lParam;
105      CWPSTRUCT *details = (CWPSTRUCT *) lParam;      CREATESTRUCT *cs = ( CREATESTRUCT * ) details->lParam;
106        LONG dwStyle = GetWindowLong( details->hwnd, GWL_STYLE );
107      switch (details->message) {      WINDOWPOS *wp = ( WINDOWPOS * ) details->lParam;
108      case WM_SIZING:      RECT *rect = ( RECT * ) details->lParam;
109      case WM_MOVING:      
110        switch ( details->message ) {
111          windowHandle = details->hwnd;      
112          //get win name          case WM_SIZING:
113          GetWindowText(windowHandle, windowTitle, 150);          case WM_MOVING:
114            snprintf( result, sizeof( result ),
115          //get an id for it                    "POSITION1,0x%x,%d,%d,%d,%d,0x%x",
116          itoa((int) windowHandle, strWindowId, 10);                    ( int ) details->hwnd,
117                      rect->left, rect->top,
118          //get coords                    rect->right - rect->left,
119          GetWindowRect(windowHandle, &rect);                    rect->bottom - rect->top,
120          b = rect.bottom;                    0 );
121          t = rect.top;          result[ sizeof( result ) - 1 ] = '\0';
         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);  
         strcat(result, ";");  
         strcat(result, "TITLE=");  
         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, ";");  
   
122          buffer = result;          buffer = result;
123            
124          break;          break;
125            
126      default:          /* Note: WM_WINDOWPOSCHANGING/WM_WINDOWPOSCHANGED are
127            strange. Sometimes, for example when bringing up the
128            Notepad About dialog, only an WM_WINDOWPOSCHANGING is
129            sent. In some other cases, for exmaple when opening
130            Format->Text in Notepad, both events are sent. Also, for
131            some reason, when closing the Notepad About dialog, an
132            WM_WINDOWPOSCHANGING event is sent which looks just like
133            the event that was sent when the About dialog was opened...  */
134            case WM_WINDOWPOSCHANGING:
135            
136            if ( !( dwStyle & WS_VISIBLE ) )
137                break;
138                
139            if ( !( dwStyle & WS_DLGFRAME ) )
140                break;
141                
142            if ( !( wp->flags & SWP_NOZORDER ) ) {
143                snprintf( result, sizeof( result ),
144                          "ZCHANGE1,0x%x,0x%x,0x%x\n",
145                          details->hwnd,
146                          wp->flags & SWP_NOACTIVATE ? wp->hwndInsertAfter : 0,
147                          0 );
148                result[ sizeof( result ) - 1 ] = '\0';
149            }
150            buffer = result;
151            
152            break;
153            
154            
155            case WM_CREATE:
156            if ( cs->style & WS_DLGFRAME ) {
157                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",
158                         cs->cx, cs->cy, cs->x, cs->y, cs->lpszName, cs->hMenu, details->hwnd,
159                         cs->style & WS_BORDER, cs->style & WS_DLGFRAME,
160                         cs->style & WS_POPUP );
161                buffer = result;
162            }
163            
164            break;
165            
166            
167            case WM_DESTROY:
168            if ( dwStyle & WS_DLGFRAME ) {
169                sprintf( result, "WM_DESTROY:%p", details->hwnd );
170                buffer = result;
171            }
172            
173            break;
174            
175            default:
176          break;          break;
177      }      }
178        
179      if (ChannelIsOpen()) {      if ( ChannelIsOpen() ) {
180          if (buffer != NULL) {          if ( buffer != NULL ) {
181              WriteToChannel(buffer);              WriteToChannel( buffer );
182          }          }
183      }      }
184        
185      return CallNextHookEx(hhook3, nCode, wParam, lParam);      return CallNextHookEx( hhook3, nCode, wParam, lParam );
186  }  }
187    
188  LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam)  LRESULT CALLBACK CbtProc( int nCode, WPARAM wParam, LPARAM lParam )
189  {  {
190      if (nCode < 0) {      if ( nCode < 0 ) {
191          return CallNextHookEx(hhook, nCode, wParam, lParam);          return CallNextHookEx( hhook, nCode, wParam, lParam );
192      }      }
193        
194        
195      PCHAR buffer = NULL;      PCHAR buffer = NULL;
196        
197        
198      char windowTitle[150] = { "" };      char windowTitle[ 150 ] = { ""
199                                  };
200      HWND windowHandle = NULL;      HWND windowHandle = NULL;
201      char result[255] = { "" };      char result[ 255 ] = { ""
202      char strWindowId[25];                           };
203      char type[25];      char strWindowId[ 25 ];
204        char type[ 25 ];
205        
206        
207      LONG b, t, l, r;      LONG b, t, l, r;
208      char strB[5];      char strW[ 5 ];
209      char strT[5];      char strY[ 5 ];
210      char strL[5];      char strX[ 5 ];
211      char strR[5];      char strH[ 5 ];
212      RECT rect;      RECT rect;
213        
214      int i = 0;                  //tmp      int i = 0; //tmp
215        
216      switch (nCode) {      switch ( nCode ) {
217      case HCBT_MINMAX:          case HCBT_MINMAX:
218            
219          windowHandle = (HWND) wParam;          windowHandle = ( HWND ) wParam;
220          //get win name          //get win name
221          GetWindowText(windowHandle, windowTitle, 150);          GetWindowText( windowHandle, windowTitle, 150 );
222            
223          //get an id for it          //get an id for it
224          itoa((int) windowHandle, strWindowId, 10);          itoa( ( int ) windowHandle, strWindowId, 10 );
225            
226          //get operation type(min,max). if max, do not clip at all,if min use window's previous coords          //get operation type(min,max). if max, do not clip at all,if min use window's previous coords
227          //codes are:          //codes are:
228            
229          // SW_HIDE= 0  SW_SHOWNORMAL=1  SW_NORMAL=1  SW_SHOWMINIMIZED=2  SW_SHOWMAXIMIZED=3  SW_MAXIMIZE=3          // SW_HIDE= 0  SW_SHOWNORMAL=1  SW_NORMAL=1  SW_SHOWMINIMIZED=2  SW_SHOWMAXIMIZED=3  SW_MAXIMIZE=3
230          // SW_SHOWNOACTIVATE=4  SW_SHOW=5  SW_MINIMIZE=6  SW_SHOWMINNOACTIVE=7  SW_SHOWNA=8  SW_RESTORE=9          // SW_SHOWNOACTIVATE=4  SW_SHOW=5  SW_MINIMIZE=6  SW_SHOWMINNOACTIVE=7  SW_SHOWNA=8  SW_RESTORE=9
231          // SW_SHOWDEFAULT=10  SW_FORCEMINIMIZE=11  SW_MAX=11          // SW_SHOWDEFAULT=10  SW_FORCEMINIMIZE=11  SW_MAX=11
232            
233          itoa((int) lParam, type, 10);          itoa( ( int ) lParam, type, 10 );
234            
235          //get coords          //get coords
236          GetWindowRect(windowHandle, &rect);          GetWindowRect( windowHandle, &rect );
237          b = rect.bottom;          b = rect.bottom;
238          t = rect.top;          t = rect.top;
239          l = rect.left;          l = rect.left;
240          r = rect.right;          r = rect.right;
241          ltoa(b, strB, 10);          ltoa( b - t, strW, 10 );
242          ltoa(t, strT, 10);          ltoa( t, strY, 10 );
243          ltoa(r, strR, 10);          ltoa( r - l, strH, 10 );
244          ltoa(l, strL, 10);          ltoa( l, strX, 10 );
245            
246          //get name          //get name
247          GetWindowText(windowHandle, windowTitle, 150);          GetWindowText( windowHandle, windowTitle, 150 );
248            
249          ////setup return string          ////setup return string
250          strcat(result, "MSG=HCBT_MINMAX;");          strcat( result, "MSG=HCBT_MINMAX;OP=4;" );
251          strcat(result, "ID=");          
252          strcat(result, strWindowId);          // SW_SHOWNOACTIVATE=4  SW_SHOW=5  SW_MINIMIZE=6  SW_SHOWMINNOACTIVE=7  SW_SHOWNA=8  SW_RESTORE=9
253          strcat(result, ";");          // SW_SHOWDEFAULT=10  SW_FORCEMINIMIZE=11  SW_MAX=11
254          strcat(result, "TITLE=");          strcat( result, "ID=" );
255          strcat(result, windowTitle);          strcat( result, strWindowId );
256          strcat(result, ";");          strcat( result, ";" );
257          strcat(result, "POS=");          strcat( result, "TITLE=" );
258          strcat(result, strL);          strcat( result, windowTitle );
259          strcat(result, "~");          strcat( result, ";" );
260          strcat(result, strT);          strcat( result, "X=" );
261          strcat(result, "~");          strcat( result, strX );
262          strcat(result, strR);          strcat( result, ";" );
263          strcat(result, "~");          strcat( result, "Y=" );
264          strcat(result, strB);          strcat( result, strY );
265          strcat(result, ";");          strcat( result, ";" );
266          strcat(result, "TYPE=");          strcat( result, "H=" );
267          strcat(result, type);          strcat( result, strH );
268          strcat(result, ";");          strcat( result, ";" );
269            strcat( result, "W=" );
270            strcat( result, strW );
271            strcat( result, ";" );
272            strcat( result, "TYPE=" );
273            strcat( result, type );
274            strcat( result, "." );
275            
276          //-------------------------------------------------------------------------------------------------          //-------------------------------------------------------------------------------------------------
277          // code to prevent minimising windows (can be removed once minimise has been implemented)          // code to prevent minimising windows (can be removed once minimise has been implemented)
278          i = (int) lParam;          //i = (int)lParam;
279          //if (i==0 || i==2 || i==6 || i==7 || i==8 || i==11)          //if (i==0 || i==2 || i==6 || i==7 || i==8 || i==11)
280          if (i == 2 || i == 6) {          //if ( i==2 || i==6 )
281              MessageBox(0,          //{
282                         "Minimising windows is not allowed in this version. Sorry!",          // MessageBox(0,"Minimising windows is not allowed in this version. Sorry!","TS Window Clipper", MB_OK);
283                         "TS Window Clipper", MB_OK);          // return 1;
284              return 1;          //}
         }  
285          //-----------------------------------------------------------------------------------------          //-----------------------------------------------------------------------------------------
286            
287          //-------------------------------------------------------------------------------------------------          //-------------------------------------------------------------------------------------------------
288          // code to prevent maximising windows (can be removed once maximise has been implemented)          // code to prevent maximising windows (can be removed once maximise has been implemented)
289          i = (int) lParam;          //i = (int)lParam;
290          //if (i==3 || i==9 || i==11)          //if (i==3 || i==9 || i==11)
291          if (i == 3 || i == 11) {          //if (i==3 || i==11)
292              MessageBox(0,          //{
293                         "Maximising windows is not allowed in this version. Sorry!",          // MessageBox(0,"Maximising windows is not allowed in this version. Sorry!","TS Window Clipper", MB_OK);
294                         "TS Window Clipper", MB_OK);          // return 1;
295              return 1;          //}
         }  
296          //-----------------------------------------------------------------------------------------          //-----------------------------------------------------------------------------------------
297            
298          buffer = result;          buffer = result;
299            
300          break;          break;
301            
302      case HCBT_MOVESIZE:          default:
   
         windowHandle = (HWND) wParam;  
         //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, strB, 10);  
         ltoa(t, strT, 10);  
         ltoa(r, strR, 10);  
         ltoa(l, strL, 10);  
   
         //get name  
         GetWindowText(windowHandle, windowTitle, 150);  
   
         ////setup return string  
         strcat(result, "MSG=HCBT_MOVESIZE;");  
         strcat(result, "ID=");  
         strcat(result, strWindowId);  
         strcat(result, ";");  
         strcat(result, "TITLE=");  
         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;  
   
         break;  
     case HCBT_SETFOCUS:  
         //buffer = "HCBT_SETFOCUS";  
         //not needed yet  
         break;  
     default:  
303          break;          break;
304      }      }
305        
306      if (ChannelIsOpen()) {      if ( ChannelIsOpen() ) {
307          if (buffer != NULL) {          if ( buffer != NULL ) {
308              WriteToChannel(buffer);              WriteToChannel( buffer );
309          }          }
310      }      }
311        
312      return CallNextHookEx(hhook, nCode, wParam, lParam);      return CallNextHookEx( hhook, nCode, wParam, lParam );
313  }  }
314    
315    
316  LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam)  LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam, LPARAM lParam )
317  {  {
318      if (nCode < 0) {      if ( nCode < 0 ) {
319          return CallNextHookEx(hhook, nCode, wParam, lParam);          return CallNextHookEx( hhook, nCode, wParam, lParam );
320      }      }
321        
322      if (ChannelIsOpen()) {      if ( ChannelIsOpen() ) {
323          PCHAR buffer = NULL;          PCHAR buffer = NULL;
324            
325          char windowTitle[150] = { "" };          char windowTitle[ 150 ] = { ""
326                                      };
327          HWND windowHandle = NULL;          HWND windowHandle = NULL;
328          char result[255] = { "" };          char result[ 255 ] = { ""
329          char strWindowId[25];                               };
330            char strWindowId[ 25 ];
331          LONG b, t, l, r;          LONG b, t, l, r;
332          char strB[5];          char strW[ 5 ];
333          char strT[5];          char strY[ 5 ];
334          char strL[5];          char strX[ 5 ];
335          char strR[5];          char strH[ 5 ];
336          RECT rect;          RECT rect;
337            
338          switch (nCode) {          switch ( nCode ) {
339          case HSHELL_WINDOWCREATED:              case HSHELL_WINDOWCREATED:
340                
341              //get window id              //get window id
342              windowHandle = (HWND) wParam;              windowHandle = ( HWND ) wParam;
343              itoa((int) windowHandle, strWindowId, 10);              itoa( ( int ) windowHandle, strWindowId, 10 );
344                
345              //get coords              //get coords
346              GetWindowRect(windowHandle, &rect);              GetWindowRect( windowHandle, &rect );
347              b = rect.bottom;              b = rect.bottom;
348              t = rect.top;              t = rect.top;
349              l = rect.left;              l = rect.left;
350              r = rect.right;              r = rect.right;
351              ltoa(b, strB, 10);              ltoa( b - t, strH, 10 );
352              ltoa(t, strT, 10);              ltoa( t, strY, 10 );
353              ltoa(r, strR, 10);              ltoa( r - l, strW, 10 );
354              ltoa(l, strL, 10);              ltoa( l, strX, 10 );
355                
356              //get name              //get name
357              GetWindowText(windowHandle, windowTitle, 150);              GetWindowText( windowHandle, windowTitle, 150 );
358                
359              ////setup return string              ////setup return string
360              strcat(result, "MSG=HSHELL_WINDOWCREATED;");              strcat( result, "MSG=HSHELL_WINDOWCREATED;OP=0;" );
361              strcat(result, "ID=");              strcat( result, "ID=" );
362              strcat(result, strWindowId);              strcat( result, strWindowId );
363              strcat(result, ";");              strcat( result, ";" );
364              strcat(result, "TITLE=");              strcat( result, "TITLE=" );
365              strcat(result, windowTitle);              strcat( result, windowTitle );
366              strcat(result, ";");              strcat( result, ";" );
367              strcat(result, "POS=");              strcat( result, "X=" );
368              strcat(result, strL);              strcat( result, strX );
369              strcat(result, "~");              strcat( result, ";" );
370              strcat(result, strT);              strcat( result, "Y=" );
371              strcat(result, "~");              strcat( result, strY );
372              strcat(result, strR);              strcat( result, ";" );
373              strcat(result, "~");              strcat( result, "H=" );
374              strcat(result, strB);              strcat( result, strH );
375              strcat(result, ";");              strcat( result, ";" );
376                strcat( result, "W=" );
377                strcat( result, strW );
378                strcat( result, "." );
379                
380              buffer = result;              buffer = result;
381                
382              break;              break;
383                
384          case HSHELL_WINDOWDESTROYED:              case HSHELL_WINDOWDESTROYED:
385                
386              //get window id              //get window id
387              windowHandle = (HWND) wParam;              windowHandle = ( HWND ) wParam;
388              itoa((int) windowHandle, strWindowId, 10);              itoa( ( int ) windowHandle, strWindowId, 10 );
389                
390                //get coords
391                GetWindowRect( windowHandle, &rect );
392                b = rect.bottom;
393                t = rect.top;
394                l = rect.left;
395                r = rect.right;
396                ltoa( b - t, strH, 10 );
397                ltoa( t, strY, 10 );
398                ltoa( r - l, strW, 10 );
399                ltoa( l, strX, 10 );
400                
401              //get name              //get name
402              GetWindowText(windowHandle, windowTitle, 150);              GetWindowText( windowHandle, windowTitle, 150 );
403                
404              ////setup return string              ////setup return string
405              strcat(result, "MSG=HSHELL_WINDOWDESTROYED;");              strcat( result, "MSG=HSHELL_WINDOWDESTROYED;OP=1;" );
406              strcat(result, "ID=");              strcat( result, "ID=" );
407              strcat(result, strWindowId);              strcat( result, strWindowId );
408              strcat(result, ";");              strcat( result, ";" );
409              strcat(result, "TITLE=");              strcat( result, "TITLE=" );
410              strcat(result, windowTitle);              strcat( result, windowTitle );
411              strcat(result, ";");              strcat( result, ";" );
412                strcat( result, "X=" );
413                strcat( result, strX );
414                strcat( result, ";" );
415                strcat( result, "Y=" );
416                strcat( result, strY );
417                strcat( result, ";" );
418                strcat( result, "H=" );
419                strcat( result, strH );
420                strcat( result, ";" );
421                strcat( result, "W=" );
422                strcat( result, strW );
423                strcat( result, "." );
424                
425              buffer = result;              buffer = result;
426                
427              break;              break;
428          default:              default:
429              break;              break;
430          }          }
431            
432          if (buffer != NULL) {          if ( buffer != NULL ) {
433              WriteToChannel(buffer);              WriteToChannel( buffer );
434          }          }
435      }      }
436        
437      return CallNextHookEx(hhook, nCode, wParam, lParam);      return CallNextHookEx( hhook, nCode, wParam, lParam );
438  }  }
439    
440  DLL_EXPORT void SetCbtHook(void)  DLL_EXPORT void SetCbtHook( void )
441  {  {
442      if (!bHooked) {      if ( !bHooked ) {
443          hhook =          hhook = SetWindowsHookEx( WH_CBT, ( HOOKPROC ) CbtProc, hInst, ( DWORD ) NULL );
             SetWindowsHookEx(WH_CBT, (HOOKPROC) CbtProc, hInst, (DWORD) NULL);  
444          bHooked = true;          bHooked = true;
445      }      }
446        
447      if (!bHooked2) {      if ( !bHooked2 ) {
448          hhook2 =          hhook2 = SetWindowsHookEx( WH_SHELL, ( HOOKPROC ) ShellProc, hInst, ( DWORD ) NULL );
             SetWindowsHookEx(WH_SHELL, (HOOKPROC) ShellProc, hInst,  
                              (DWORD) NULL);  
449          bHooked2 = true;          bHooked2 = true;
450      }      }
451        
452      if (!bHooked3) {      if ( !bHooked3 ) {
453          hhook3 =          hhook3 = SetWindowsHookEx( WH_CALLWNDPROC, ( HOOKPROC ) CallWndProc, hInst, ( DWORD ) NULL );
             SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC) CallWndProc, hInst,  
                              (DWORD) NULL);  
454          bHooked3 = true;          bHooked3 = true;
455      }      }
456  }  }
457    
458  DLL_EXPORT void RemoveCbtHook(void)  DLL_EXPORT void RemoveCbtHook( void )
459  {  {
460      if (bHooked) {      if ( bHooked ) {
461          UnhookWindowsHookEx(hhook);          UnhookWindowsHookEx( hhook );
462          bHooked = false;          bHooked = false;
463      }      }
464        
465      if (bHooked2) {      if ( bHooked2 ) {
466          UnhookWindowsHookEx(hhook2);          UnhookWindowsHookEx( hhook2 );
467          bHooked2 = false;          bHooked2 = false;
468      }      }
469        
470      if (bHooked3) {      if ( bHooked3 ) {
471          UnhookWindowsHookEx(hhook3);          UnhookWindowsHookEx( hhook3 );
472          bHooked3 = false;          bHooked3 = false;
473      }      }
474  }  }
# Line 456  DLL_EXPORT int GetInstanceCount() Line 480  DLL_EXPORT int GetInstanceCount()
480    
481  int OpenVirtualChannel()  int OpenVirtualChannel()
482  {  {
483      m_vcHandle =      m_vcHandle = WTSVirtualChannelOpen( WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, CHANNELNAME );
484          WTSVirtualChannelOpen(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,      
485                                CHANNELNAME);      if ( m_vcHandle == NULL ) {
   
     if (m_vcHandle == NULL) {  
486          return 0;          return 0;
487      } else {      } else {
488          return 1;          return 1;
# Line 469  int OpenVirtualChannel() Line 491  int OpenVirtualChannel()
491    
492  int CloseVirtualChannel()  int CloseVirtualChannel()
493  {  {
494      BOOL result = WTSVirtualChannelClose(m_vcHandle);      BOOL result = WTSVirtualChannelClose( m_vcHandle );
495        
496      m_vcHandle = NULL;      m_vcHandle = NULL;
497        
498      if (result) {      if ( result ) {
499          return 1;          return 1;
500      } else {      } else {
501          return 0;          return 0;
# Line 482  int CloseVirtualChannel() Line 504  int CloseVirtualChannel()
504    
505  int ChannelIsOpen()  int ChannelIsOpen()
506  {  {
507      if (m_vcHandle == NULL) {      if ( m_vcHandle == NULL ) {
508          return 0;          return 0;
509      } else {      } else {
510          return 1;          return 1;
511      }      }
512  }  }
513    
514  int WriteToChannel(PCHAR buffer)  int WriteToChannel( PCHAR buffer )
515  {  {
516      PULONG bytesRead = 0;      PULONG bytesRead = 0;
517      PULONG pBytesWritten = 0;      PULONG pBytesWritten = 0;
518        
519      BOOL result =      BOOL result = WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ), pBytesWritten );
520          WTSVirtualChannelWrite(m_vcHandle, buffer, (ULONG) strlen(buffer),      
521                                 pBytesWritten);      if ( result ) {
   
     if (result) {  
522          return 1;          return 1;
523      } else {      } else {
524          return 0;          return 0;

Legend:
Removed from v.937  
changed lines
  Added in v.999

  ViewVC Help
Powered by ViewVC 1.1.26