tags:

views:

416

answers:

1

I´m a currently running a global hook that watches for a certain window and then closes it with PostMessage(hWnd,WM_CLOSE,0,0); The DLL containing the hook:

LRESULT CALLBACK MyFunc(int code,  WPARAM wParam,  LPARAM lParam)  
{    
    switch(code)
    {
    case HCBT_CREATEWND:
     {
      HWND hWnd = (HWND)wParam;
            //GetWindowText(hWnd, wintext, 80)   returns nothing
            //if ( strcmp(wintext, ("Kaspersky Internet Security: license notification")) == 0 )
            //          {    
            //            Beep(70,100);
            //            PostMessage(hWnd,WM_CLOSE,0,0);
            //          }


      break;

     }
    case HCBT_ACTIVATE:
     {

      HWND hWnd = (HWND)wParam;
      GetWindowText(hWnd, wintext, 80);

      if ( strcmp(wintext, ("Kaspersky Internet Security: license notification")) == 0 )
      {    
       Beep(70,100);
       PostMessage(hWnd,WM_CLOSE,0,0);
      }
      break;    

     }
    }

...

As you can see i´m using GetWindowText(hWnd, wintext, 80) to determine by window title if the currently activated window is the one to be closed. i´m closing the window when it is being activated and not when it is created. I would like to close the window when it is being created, that is when HCBT_CREATEWND is true.

The thing is that I can´t use GetWindowText(hWnd, wintext, 80) to get the window title and thereby determine if the window should be closed because when HCBT_CREATEWND is called the window hasn't been fully created and has no title , GetWindowText(hWnd, wintext, 80) returns nothing.

To summarize my question: is it possible to get the title of the window or in any other way determine what kind of window it is, when HCBT_CREATEWND is true?

+2  A: 

Could you try GetClassName instead of reading the window text?

It's probably more reliable the reading the window text (internationalization). An easy way to discover a window's class name is to use the spy++ utility - a handy tutorial is described here.

Alan