Winapi Win32 WH_CBT钩子-在创建窗口之前关闭窗口

Winapi Win32 WH_CBT钩子-在创建窗口之前关闭窗口,winapi,hook,Winapi,Hook,我目前正在运行一个全局钩子,它监视某个窗口,然后用PostMessage(hWnd,WM_CLOSE,0,0)关闭它 包含挂钩的DLL: LRESULT CALLBACK MyFunc(int code, WPARAM wParam, LPARAM lParam) { switch(code) { case HCBT_CREATEWND: { HWND hWnd = (HWND)wParam;

我目前正在运行一个全局钩子,它监视某个窗口,然后用
PostMessage(hWnd,WM_CLOSE,0,0)关闭它
包含挂钩的DLL:

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;    

        }
    }

...
如您所见,我正在使用
GetWindowText(hWnd,wintext,80)
通过窗口标题确定当前激活的窗口是否是要关闭的窗口。我是 在激活窗口而不是创建窗口时关闭窗口。我想在创建窗口时关闭它,即当
HCBT\u CREATEWND
为true时

问题是,我不能使用
GetWindowText(hWnd,wintext,80)
来获取窗口标题,从而确定是否应该关闭窗口,因为当调用
HCBT_CREATEWND
时,窗口没有标题,也没有标题,
GetWindowText(hWnd,wintext,80)
不返回任何内容

总结一下我的问题:当
HCBT\u CREATEWND
为真时,是否可以获取窗口的标题或以任何其他方式确定它是什么类型的窗口?

您是否可以尝试代替阅读窗口文本


阅读窗口文本(国际化)可能更可靠。发现窗口类名的一种简单方法是使用spy++实用程序-本文介绍了一个方便的教程

窗口尚未创建。这意味着您将无法调用::GetWindowText()。而是将lParam用作LPCBT_CREATEWND。这使您可以通过指针访问CREATESTRUCT。您可以使用lpszName来访问窗口名

像这样的--

CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    switch(nCode)
    {
    case HCBT_CREATEWND:
        {
          LPCBT_CREATEWND lpCreate = (LPCBT_CREATEWND)lParam;
          lpCreate->lpcs->lpszName; // this is the name
          break;
        }
    }
}