Как мне связаться от моего глобального хука до моего приложения? - PullRequest
1 голос
/ 05 февраля 2010

Я установил глобальный хук, используя win32, но мне нужно связаться с моим основным приложением. Как мне это сделать? Я предполагаю, что у dll может быть функция, где я устанавливаю свои приложения HWND, а затем ловушка может отправить сообщение? или я должен искать заголовки окон, чтобы найти свое приложение из ловушки и отправить сообщение таким образом? Какова лучшая стратегия и является ли sendmessage лучшим способом, или я должен использовать что-то еще для связи с моей глобальной ловушкой.

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

Какую информацию вы пытаетесь вернуть в свое приложение?

SendMessage плохо оборудован для передачи чего-либо за пределы DWORD через границы процесса (например, вы не можете передавать указатели на память в одном процессе другому процессу), но если все, что вам действительно нужно сделать, это передать простые значения, это сработает достаточно хорошо.

Как утверждает @interjay, PostMessage - лучший план, но в конечном итоге он по-прежнему имеет те же ограничения.

Связанные: " Опасность межпроцессных сообщений ", " PasswordSpy - получение утерянных паролей с помощью хуков Windows "

1 голос
/ 05 февраля 2010
  • Используйте PostMessage, а не SendMessage: SendMessage может занять некоторое время, что может вызвать задержки в других приложениях.

  • При инициализации ловушки передайте HWND вашего приложения в библиотеку подключений DLL с помощью определенной вами функции. Это должно быть сохранено в разделяемом сегменте данных в DLL, например:

    #pragma data_seg(".shared")
    HWND hWndApp = NULL;
    #pragma data_seg()
    #pragma comment("linker, /section:.shared,rws")
    
    void setAppWnd(HWND hWnd) {
        hWndApp = hWnd;
    }
    

Вы можете увидеть полный пример этого здесь .

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