2017-02-15 25 views
1

Может ли кто-нибудь помочь мне найти функцию API окон, которая будет использоваться для перехвата щелчка мышью на определенной кнопке в определенном окне. Я использовал spy ++ и узнал, что когда я перемещаю инструмент поиска на кнопку или любую вещь в окне, я могу читать информацию об обработчике и прочем. Таким образом, есть способ перехватить щелчки мыши и ввести наш код перед выполнением каких-либо действий. Большое спасибо за то, что поделились идеей об этом.Перехват оконной мыши.

ответ

2

Я могу придумать несколько различных способов приблизиться к этому:

  1. Вы можете использовать SetWindowsHookEx() установить WH_CALLWNDPROC сообщение крючок целевого окна thread, а затем обратный вызов крюка может обрабатывать сообщения окна, такие как WM_LBUTTON(DOWN|UP), в самом целевом окне или BN_CLICKED в родительском окне целевого окна. Предостережение - это обратный вызов, который должен быть реализован в DLL, поэтому крючок может быть введен в целевой процесс. Вы можете получить идентификатор потока целевого окна, используя GetWindowThreadProcessId().

    Вариант этого будет состоять в том, чтобы вместо этого установить WH_GETMESSAGE крюк вместо этого, а затем вы можете использовать PostMessage(), чтобы отправить сообщение пользовательского окна в целевое окно. Затем обратный вызов крюка может использовать SetWindowLongPtr() или SetWindowSubclass() для подкласса целевого окна напрямую и/или его родителя для дальнейшей обработки сообщений.

  2. Вы можете использовать SetWinEventHook() для мониторинга событий EVENT_OBJECT_INVOKED, таких как щелчки на кнопках. DLL не требуется, если вы используете флаг WINEVENT_OUTOFCONTEXT, но в качестве предостережения для инсталляционного потока нужен активный цикл сообщений, чтобы события могли обрабатываться через границы процесса.

+0

Это лучший ответ, но ему нужны примеры кода – FindOutIslamNow

1

Чтобы установить крючок окна, вам необходимо вызвать API SetWindowsHookEx. Вот статья с исходным кодом, который демонстрирует использование: Hooks and DLLs

+0

@RemyLebeau Я опубликовал один из способов сделать это. Пожалуйста, напишите свой собственный ответ отдельно, если он отличается от моего. –

Смежные вопросы