为什么我获取不了QQ聊天对话框中的聊天内容(QQ2008)
#include <windows.h>
#include <stdio.h>int main()
{
    // 获取QQ聊天对话框窗口句柄
    HWND hWnd = NULL;
    while (TRUE)
    {
        // 获取QQ窗口
        hWnd = ::FindWindowEx(NULL, hWnd, "#32770", NULL);
        if (NULL == hWnd)
            return 1;
        // 通过获取发送按钮判断该窗口是否为聊天窗口
        if (NULL != FindWindowEx(hWnd, NULL, "Button", "发送(S)"))
            break;
    }
    
    // 获取输出窗口名称
    char szName[1024] ="\0";
    GetWindowText(hWnd, szName, 1023);
    printf("WndName:%s\n", szName);
    
    // 获取输入对话框句柄
    HWND hQQWnd = NULL;
while (TRUE)
{
    // 聊天对话框下有多个AfxWnd42类
hQQWnd = FindWindowEx(hWnd, hQQWnd, "AfxWnd42", NULL);
if (NULL != hQQWnd)
{
    // 判断该窗口是输入对话框
if (NULL != ::FindWindowEx(hQQWnd, NULL, "RichEdit20A", NULL))
break;
continue;
}
return 1;

// 聊天内容显示对话框在输入对话框后面(测试时的确和spy获取的句柄相同)
hQQWnd = ::FindWindowEx(hWnd, hQQWnd, "AfxWnd42", NULL);
if (NULL == hQQWnd)
   return 1;    // 获取聊天内容
char szText[5000] = "\n";
    SendMessage(hQQWnd, WM_GETTEXT, 4999, (long)szText);
    printf("Text: %s\n", szText);
    
    return 0;
}

解决方案 »

  1.   

    是我马虎了 应该直接获取RichEdit20A
      

  2.   

    简单研究了下QQ登陆对话框,发现密码框外头还用一个控件覆盖着的。直接取是取不到密码框的句柄,而且去掉外层控件后发现,真正的密码框也是做过消息屏蔽,用SPY++看很多消息是不响应的。
    信息框没研究过。不知道是不是类似。
      

  3.   

    信息框被一个控件挡着 但是也可以直接获取句柄 是我没注意看spy列表内容 光用鼠标去找了
      

  4.   

    08是这样 以前的版本好像也是这么获取的:
    #include <windows.h>
    #include <stdio.h>int main()
    {
        // 获取QQ聊天对话框窗口句柄
        HWND hWnd = NULL;
        while (TRUE)
        {
            // 获取QQ窗口
            hWnd = ::FindWindowEx(NULL, hWnd, "#32770", NULL);
            if (NULL == hWnd)
                return 1;
            // 通过获取发送按钮判断该窗口是否为聊天窗口
            if (NULL != FindWindowEx(hWnd, NULL, "Button", "发送(S)"))
                break;
        }
        
        // 获取输出窗口名称
        char szName[1024] ="\0";
        GetWindowText(hWnd, szName, 1023);
        printf("WndName:%s\n", szName);
        
    // 获取聊天对话框的显示窗口句柄
    HWND hQQWnd = ::FindWindowEx(hWnd, NULL, "RichEdit20A", NULL);
    if (NULL == hQQWnd)
       return 1;    // 获取聊天内容
    char szText[5000] = "\0";
        SendMessage(hQQWnd, WM_GETTEXT, 4999, (long)szText);
        printf("Text: %s\n", szText);
        
        return 0;
    }
      

  5.   

    QQ2009是直接画上去的,DirectUI