【问题标题】:Win32 WH_CBT Hook - close window before it is createdWin32 WH_CBT Hook - 在创建之前关闭窗口
【发布时间】:2009-08-23 20:47:54
【问题描述】:

我目前正在运行一个全局钩子,它监视某个窗口,然后用 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_CREATEWND 为真。

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

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

【问题讨论】:

    标签: winapi hook


    【解决方案1】:

    您可以尝试GetClassName 代替阅读窗口文本吗?

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

    【讨论】:

      【解决方案2】:

      窗口尚未创建。这意味着您将无法调用 ::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;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多