Я делал что-то подобное раньше в визуальной форме, но это было давно, и это было для Wolfenstein ET. Я знаю, что мне придется использовать SendMessage или WM_GETTEXT, поэтому все, что мне нужно, это код, который будет постоянно получать текст из окна чата. Теперь hexchat - это open source, но я не знаю, как это сделать и получить идентификатор, который необходимо указать. Я бы предпочел не использовать дескриптор, так как мне пришлось бы перекомпилировать его каждый раз. Я знаю, что это требует многого, но я пытался понять это в течение последних нескольких дней без успеха. Любая помощь очень ценится! Благодарю!
К сожалению, также забыл упомянуть, что, поскольку 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;
}
Идентификатор окна, который вы ищете, можно определить из исходного кода или с помощью Spy++. Каждое дочернее окно HWND возвращается EnumChildWindows. Для каждого из этих HWND вы можете вызвать GetWindowLong (hwnd, GWL_ID), чтобы получить идентификатор дочернего окна. Когда он совпадает с идентификатором цели, вы нашли HWND, который можно использовать с WM_GETTEXT, чтобы прочитать текст окна.
GetDlgItem
? Обратите внимание, что есть такжеGetWindowText
иGetWindowTextLength
.GetDlgItem
из источника? Если нет, то как ты это получил? Также я посмотрел на hexchat, хотя spy ++ и единственное названное окно - это верхний уровень. Все, что ниже, это""
Как бы вы поступили об этом?