Получить сообщение из другого окна - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь получить сообщения от других windows. Мне нужно найти окно по имени, я использовал FindWindowW(). Как я могу получить активное окно и получить сообщение от него? Когда я добавляю hwnd в GetMessage (), он не работает.

//WndProc
        case WM_KEYDOWN:
            OutputDebugStringW(L"Key down");

            break;

//main.c
        //WNDCLASSEX wc;
        HWND hwnd;
        MSG Msg;

        hwnd = FindWindowW(NULL, L"Sublime Text");

        while (GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        return Msg.wParam;

1 Ответ

0 голосов
/ 25 апреля 2020

Только поток, который создает окно, может напрямую получать и отправлять сообщения для этого окна. GetMessage() извлекает сообщения из очереди сообщений вызывающего потока, поэтому его можно использовать только с windows, принадлежащим вызывающему потоку.

Поскольку вы пытаетесь перехватить сообщения для окна, которое не принадлежит вам , вам нужно будет использовать SetWindowsHookEx() или SetWinEventHook(), чтобы установить обратный вызов ловушки в поток-владелец этого окна, а затем этот обратный вызов может перехватить нужные сообщения / события для этого окна. , Вы можете использовать GetWindowThreadProcessId(), чтобы получить идентификаторы Процесса и Нити, которым принадлежит окно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...