1

Тема: AHK: Как задать SendMessage при активности определенного окна?


    SetTitleMatchMode 2
    DetectHiddenWindows On
    SendMode Input
    SetKeyDelay -1

   #IfWinActive, ahk_exe skype.exe
        Loop
            {
                SendMessage, 0x50, , 0x4090409, , A
            }
   return

Не знаю, все ли правильно, но такой вариант у меня, к сожалению, не сработал.

2

Re: AHK: Как задать SendMessage при активности определенного окна?

Так здесь же ответили, вроде?

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

3 (изменено: becauseim, 2015-09-18 18:01:15)

Re: AHK: Как задать SendMessage при активности определенного окна?

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

4

Re: AHK: Как задать SendMessage при активности определенного окна?

teadrinker, т.е. вариант, указанный в первом посте не должен работать ни при каких условиях, кроме как по нажатию заданной горячей клавиши?

5

Re: AHK: Как задать SendMessage при активности определенного окна?

Проще, чем там, варианта нет, просто нужно вставить в скрипт грамотно, так, чтобы первая часть кода (создание массива и вызов функции) выполнилась, т. е. до первого Return.

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

6

Re: AHK: Как задать SendMessage при активности определенного окна?

teadrinker пишет:

нужно вставить в скрипт грамотно.

Скрипт перестает работать, даже если перед ним есть только одна горячая клавиша для другого действия:

    SetTitleMatchMode 2
    DetectHiddenWindows On
    SendMode Input
    SetKeyDelay -1

END::
Reload
return

    { ; AutoSwitch Input Method
        #Persistent
    Global list := {"AIMP3.exe":"ru", "SciTE.exe":"en"}

    SetWinEventHook(EVENT_SYSTEM_FOREGROUND := 0x0003, EVENT_SYSTEM_FOREGROUND, 0, RegisterCallback("HookProc", "F"), 0, 0, 0) 

    HookProc(hWinEventHook, event, hwnd)  { 
        WinGet, Process, ProcessName, ahk_id %hwnd%
        If (list.haskey(Process))  { 
            ControlGetFocus, CtrlFocus, ahk_id %hwnd%
            PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, , {"en":0x409,"ru":0x419}[list[Process]], %CtrlFocus%, ahk_id %hwnd%
        } 
}

    SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags)  {
       Return DllCall("SetWinEventHook", UInt, eventMin , UInt, eventMax , Ptr, hmodWinEventProc
                , Ptr, lpfnWinEventProc , UInt, idProcess , UInt, idThread, UInt, dwFlags, Ptr)
    }
    }
    { ~^+C:: ; Google Search
        SendMessage, 0x50, , 0x4090409, , A
        IfWinNotActive, Vegas Pro 13.0
            {
                SendInput, ^c
                Sleep 50
                Run, http://www.google.com/search?q=%clipboard%
            }
        return
    }

Как мне кажется, действия обособлены друг от друга, но выходит, что не так.

7 (изменено: stealzy, 2015-09-20 17:03:24)

Re: AHK: Как задать SendMessage при активности определенного окна?

Мозг перестает работать, даже если поменять местами правое и левое полушарие.
Как мне кажется, органы обособлены друг от друга, но выходит, что не так.

Если вы хотите размещать хоткеи в любом месте, оформите их в виде ф-ии: End::func(), либо в одну строку в вашем случае.