none
如何获取一个窗口(不是统一进程的)的标题? RRS feed

  • 问题

  • 最近想练手,写一个钩子程序,就是每当一个窗口(不同进程)获得焦点,我就对话框提示一下,提示(注意:某某窗口已经获得焦点),但是我发觉getwindowtext好像不管用

    		::GetWindowText(::GetForegroundWindow(),pStr,50);
    		::MessageBox(hwnd,pStr,
    			TEXT("??????"),MB_OK);
    

    怎么就不管用了呢?

    高手能不能解释一下,或者有什么跟我不同的想法

    还有就是EnumWindows这个函数是穷举所有的不同进程的窗口还是同一进程内的窗口??

    2011年10月20日 4:43

答案

  • 每当窗口获得焦点,这个 触发点要找准。

    如果是 WM_ACTIVE 那么消息参数里有激活的窗口句柄。

    而 GetForegroundWindow 不一定总是返回前台窗口。有时是没有这样的窗口,特别是获取每当一个窗口获得焦点的时机不正确的时候。

     

    // 信手涂鸦,不必当真。

    • 已标记为答案 Helen Zhao 2011年10月26日 8:05
    2011年10月21日 8:14

全部回复

  • 怎么个不管用法

    EnumWindows枚举到的是桌面上所有窗口

    2011年10月21日 0:36
  • 您上面的代码应该没什么问题。您说的不管用是什么意思?


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年10月21日 5:23
    版主
  • The foreground window can be NULL in certain circumstances, such as when a window is losing activation.
    2011年10月21日 6:37
  • 每当窗口获得焦点,这个 触发点要找准。

    如果是 WM_ACTIVE 那么消息参数里有激活的窗口句柄。

    而 GetForegroundWindow 不一定总是返回前台窗口。有时是没有这样的窗口,特别是获取每当一个窗口获得焦点的时机不正确的时候。

     

    // 信手涂鸦,不必当真。

    • 已标记为答案 Helen Zhao 2011年10月26日 8:05
    2011年10月21日 8:14