Цикл не печатает активное окно - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть простой цикл с простой функцией печати окна.

char temp[100], *currbuf= "", *currbuf2 = "";


while (1) {
    GetWindowText(GetForegroundWindow(), temp, sizeof temp / sizeof *temp);
    currbuf2 = temp;
    if (currbuf2 != currbuf) {
        currbuf = temp;
        printf("\n\nWindow title: %s\n", temp);
    };
};

Проблема в том, что он печатает только заголовок первого активного окна.Что я хочу сделать, это печатать заголовок активного окна каждый раз, когда оно меняется.Без оператора if это работает хорошо (но все еще печатает это активное окно).

1 Ответ

0 голосов
/ 19 февраля 2019

Проблема в том, что он печатает только заголовок первого активного окна.

Вам нужно сравнить строку содержимое , а не строку указатели :

char temp[100] = "", currbuf[100] = "";

while (1) {
    GetWindowText(GetForegroundWindow(), temp, sizeof temp / sizeof *temp);
    if (strcmp(currbuf, temp) != 0) {
        strcpy(currbuf, temp);
        printf("\n\nWindow title: %s\n", temp);
    }
}

Я хочу печатать заголовок активного окна при каждом его изменении.

Вместо того, чтобы использовать бесконечный цикл, который постоянно опрашивает активныйвместо этого вы должны использовать SetWinEventHook() для получения EVENT_SYSTEM_FOREGROUND уведомлений от ОС при каждом изменении окна переднего плана.Не опрашивать (за исключением, может быть, в первый раз, прежде чем запустить ловушку).

void displayWindowTitle(HWND hWnd)
{
    char temp[100] = "";
    GetWindowText(hWnd, temp, sizeof temp / sizeof *temp);
    printf("\n\nWindow title: %s\n", temp);
}

void CALLBACK MyHookCallback(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
    displayWindowTitle(hwnd);
}

...

displayWindowTitle(GetForegroundWindow());
HWINEVENTHOOK hHook = SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, &MyHookCallback, 0, 0, WINEVENT_OUTOFCONTEXT);
...
UnhookWinEvent(hHook);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...