1

Тема: AHK: Перехват сообщений "Message"

Прочитал правила, прочитал справку.
Не могу научиться перехватывать сообщения "Message". Winpestor и подобные, дают слишком много информации, из которой 99% не нужно. И кроме того жутко лагают, а то и вешают.

Решил начать с разработки собственного инструмента по перехвату "Message" от одних программ к другим. Прошу совета, с чего начать. )))

2

Re: AHK: Перехват сообщений "Message"

На AHK не получится перехватить сообщения для чужих окон, для этого нужно dll писать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Kurskador, 2015-07-18 14:46:17)

Re: AHK: Перехват сообщений "Message"

Удар под дых.  А если иначе, написать на AHK программу, которая будет целенаправленно извлекать нужное из Winspector?
Кстати, какая программа лучшая из этого класса?

4

Re: AHK: Перехват сообщений "Message"

Не могу подсказать, не интересовался.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Перехват сообщений "Message"

Что вообще можно в этой области осуществить средствами AHK?

6

Re: AHK: Перехват сообщений "Message"

Можно перехватить все сообщения окнам своего процесса (OnMessage) и перехватить события от мыши и клавиатуры.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Перехват сообщений "Message"

Вот еще хук для сторонних окон. В данном примере взаимодействие идет с блокнотом:

#SingleInstance Force
#Persistent
SetBatchLines,-1
HookProcAdr := RegisterCallback( "HookProc", "F" ), hWinEventHook := SetWinEventHook( 0x1, 0x17, 0, HookProcAdr, 0, 0, 0 )
Global Message := ["EVENT_SYSTEM_SOUND", "EVENT_SYSTEM_ALERT", "EVENT_SYSTEM_FOREGROUND"
, "EVENT_SYSTEM_MENUSTART", "EVENT_SYSTEM_MENUEND", "EVENT_SYSTEM_MENUPOPUPSTART"
, "EVENT_SYSTEM_MENUPOPUPEND", "EVENT_SYSTEM_CAPTURESTART", "EVENT_SYSTEM_CAPTUREEND"
, "EVENT_SYSTEM_MOVESIZESTART", "EVENT_SYSTEM_MOVESIZEEND", "EVENT_SYSTEM_CONTEXTHELPSTART"
, "EVENT_SYSTEM_CONTEXTHELPEND", "EVENT_SYSTEM_DRAGDROPSTART", "EVENT_SYSTEM_DRAGDROPEND"
, "EVENT_SYSTEM_DIALOGSTART", "EVENT_SYSTEM_DIALOGEND", "EVENT_SYSTEM_SCROLLINGSTART"
, "EVENT_SYSTEM_SCROLLINGEND", "EVENT_SYSTEM_SWITCHSTART", "EVENT_SYSTEM_SWITCHEND"
, "EVENT_SYSTEM_MINIMIZESTART", "EVENT_SYSTEM_MINIMIZEEND"]

SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) 
{
    DllCall("CoInitialize", Uint, 0)
    return DllCall("SetWinEventHook", Uint,eventMin    , Uint,eventMax    , Uint,hmodWinEventProc
    , Uint,lpfnWinEventProc, Uint,idProcess, Uint,idThread, Uint,dwFlags)    
}

HookProc( hWinEventHook, Event, hWnd, idObject, idChild, dwEventThread, dwmsEventTime )
{

    if WinExist("ahk_class Notepad") = Hwnd
        {
        if (Message[Event] = "EVENT_SYSTEM_FOREGROUND")
            tooltip Окно блокнота в фокусе
        if (Message[Event] = "EVENT_SYSTEM_MINIMIZESTART")
            tooltip Окно блокнота свернута
        if (Message[Event] = "EVENT_SYSTEM_MINIMIZEEND")
            tooltip Окно блокнота развернута
        if (Message[Event] = "EVENT_SYSTEM_MOVESIZESTART")
            tooltip Окно блокнота перемещается или изменяется размер
        if (Message[Event] = "EVENT_SYSTEM_MOVESIZEEND")
            tooltip Окно блокнота больше не перемещается
        }
}

return

8 (изменено: unicorn79, 2021-03-01 15:48:34)

Re: AHK: Перехват сообщений "Message"

Добрый день, уважаемые! А подскажите пож-та, возможно ли средствами AHK глобально перехватывать именно вызов (обращение)  к заданным WIN API (например, mouse_event или keybd_event). Причем именно обращение, а не факт дальнейшего выполнения и пропечатывания символа клавиатуры или события мыши. Глобальные хуки LowLevelKeyboardProc и LowLevelMouseProc к сожалению, мою задачу не решают. Заранее спасибо!

9

Re: AHK: Перехват сообщений "Message"

Глобально нет, можно только изнутри процесса, тема тут.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Перехват сообщений "Message"

teadrinker пишет:

Глобально нет, можно только изнутри процесса, тема тут.

Благодарю, изучу!