C++ HexChat 发送消息获取聊天

C++ HexChat SendMessage get Chat

本文关键字:获取 聊天 消息 HexChat C++      更新时间:2023-10-16

我以前在Visual Basic中做过这样的事情,但那是很久以前的事了,它是为Wolfenstein ET做的。我知道我将不得不使用 SendMessage 或WM_GETTEXT所以我所需要的只是不断从聊天窗口中获取文本的代码。现在 hexchat 是开源的,但我不知道如何去做并获取需要指定的 ID。我宁愿不使用句柄,因为我每次都必须重新编译它。我知道这要求很多,但过去几天我一直在试图解决这个问题,但没有成功。任何帮助将不胜感激!谢谢!

哎呀还忘了提到,既然HexChat是开源的,我们应该能够使用GetDlgItem()吗?

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
using namespace std;
void FindHexChat()
{
HWND hwndNotepad = FindWindow(L"gdkWindowToplevel", NULL);
if (NULL != hwndNotepad)
{
    HWND hwndEdit = FindWindowEx(hwndNotepad, NULL, L"Chat", NULL);
    if (NULL != hwndEdit)
    {
        int textLen = (int)SendMessage(hwndEdit, WM_GETTEXTLENGTH, 0, 0);
        if (0 < textLen)
        {
            const int bufferSize = 1024;
            char textBuffer[bufferSize] = "";
            SendMessage(hwndEdit, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);
 << cout << textBuffer << endl;

}
            else
            {
            }
        }
        else
        {
        }
    }
    else
    {
 endl;
    }
}
int main()
{
    FindHexChat();
    return 0;
}

您要查找的窗口的 ID 可以从源代码或使用 Spy++ 确定。 每个子窗口 HWND 都由 EnumChildWindows 返回。对于每个 HWND,您可以调用 GetWindowLong(hwnd, GWL_ID) 来获取该子窗口的 ID。当它与目标 ID 匹配时,您找到了可以与WM_GETTEXT一起使用以读取窗口文本的 HWND。