作一个全局钩子ShellProc,监控WM_SETFOCUS,可以得到两个参数:
lParam和wParam,一个是当前焦点的HWND,一个是上一个焦点的HWND

解决方案 »

  1.   

    提供一个方法:用AttachThreadInput试试
      

  2.   

    game2000,你的钩子句柄有没有写在共享数据区,你可以把DLL加载到某个应用程序上调试一下就知道原因了
      

  3.   

    大家一定都有分,AttachThreadInput能不能具体和我说一下,我在msdn里也看到过,但是不知道怎么用,
      

  4.   

    GetActiveWindow
    然后GetFocus行不行
      

  5.   

    CString CMyWnd::GetForegroudWndFocusWndText(void)
    {
    CWnd * mainwnd, *subwnd;
    DWORD dwthreadforeground, dwthreadthis;//获得当前活动窗口
    mainwnd = GetForegroundWindow();//获得活动窗口的线程号
    dwthreadforeground = ::GetWindowThreadProcessId(mainwnd->m_hWnd, NULL);
    //获得与自己程序的窗口相关的线程号
    dwthreadthis = ::GetWindowThreadProcessId(m_hWnd, NULL);//将两个线程的输入联系起来,只有这样,GetFocus函数才能获得其它线程中的焦点窗口
    ::AttachThreadInput(dwthreadthis, dwthreadforeground, TRUE);//得到当前的具有输入焦点的子窗口
    subwnd = GetFocus();char lpszText[MAX_PATH];
    //获得窗口中的文字信息
    ::SendMessage(subwnd->m_hWnd, WM_GETTEXT, WPARAM(MAX_PATH), LPARAM(lpszText));//将联到一起的两个线程的输入分离
    ::AttachThreadInput(dwthreadthis, dwthreadforeground, FALSE);return lpszText;
    }
    同理可得到一切窗口的具有当前焦点的子窗口的句柄