Меня интересует заголовок окна текущего окна.Теперь у меня есть этот код, который в основном работает:
#include <iostream>
#include <Windows.h>
using namespace std;
void CALLBACK myCallback(HWINEVENTHOOK hWinEventHook,
DWORD event,
HWND hwnd,
LONG idObject,
LONG idChild,
DWORD idEventThread,
DWORD dwmsEventTime) {
int windowTitleLength = GetWindowTextLengthA(hwnd);
const int bufferSize = windowTitleLength + 2;
LPSTR windowTitleBuffer = new char[bufferSize];
GetWindowTextA(hwnd, windowTitleBuffer, bufferSize);
cout << "Title: " << windowTitleBuffer << endl;
delete[] windowTitleBuffer;
}
void setup() {
SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, myCallback, 0, 0,
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
}
int main()
{
bool bRet;
MSG myMsg;
setup();
while (bRet = GetMessage(&myMsg, NULL, 0, 0) != 0)
{
if (bRet == -1) {
cout << "ABANDON SHIP!" << endl;
}
cout << "Got a message!" << endl;
}
}
И, кстати, это моя попытка достичь в c ++ того, чего мне не удалось достичь в nodejs здесь .
названия окон печатаются, как и ожидалось, пока я не сфокусируюсь на окне терминала моей маленькой программы.Он печатает свой собственный заголовок, затем останавливается.Фокусировка на других окнах ничего не печатает, пока я не нажму Ctrl + C в моей консоли, после чего вся накопленная энергия в памяти моей программы высвободится и снова начнет работать.
Теперь я не знаю, почему вызывается обратный вызов для окна моей собственной программной консоли, когда я указал флаг WINEVENT_SKIPOWNPROCESS
в SetWinEventHook
.Возможно, потому что консоль на самом деле не является окном ?
Второй вопрос, который у меня возник об этом коде, - это функция GetMessage
, которая вызывается только один раз, независимо от того, сколько событий, которые получает моя программа, какиене имеет смысла для меня, потому что я ожидаю, что он будет вызываться один раз для каждого полученного события.
Кроме того, возможно, как следствие вышесказанного, тело цикла while
никогда не выполняется.
Как заставить эту программу не задыхаться от собственных событий?