1

Тема: AHK: Время нажатия any key.

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

  Заранее спасибо за помощь!

2 (изменено: creature.ws, 2013-05-11 14:59:35)

Re: AHK: Время нажатия any key.

Установка хуков на события мыши и клавиатуры

#NoEnv
SetBatchLines -1

KeyList := {}
hHookKeybd := DllCall("SetWindowsHookExW"
    , "Int", WH_KEYBOARD_LL := 13
    , "Ptr", RegisterCallback("LowLevelKeyboardProc", "Fast")
    , "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
    , "UInt", 0, "Ptr")

OnExit Esc
return

LowLevelKeyboardProc(nCode, wParam, lParam) {
    global KeyList 
    Critical
    if (wParam = 256) {
        time := NumGet(lParam+0, 12, "UInt")
        vk := NumGet(lParam+0, 0, "UInt")
        KeyList[time] := vk
    }
    return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "Ptr", lParam)
}

Esc::
    DllCall("UnhookWindowsHookEx", "Ptr", hHookKeybd)
    ExitApp

Space::
    for key, value in KeyList
        o .= "A_TickCount = " key " virtual keycode (dec) = " value "`n"
    MsgBox % o
    o := ""
    return

3

Re: AHK: Время нажатия any key.

Спасибо!  Пока вот так для себя приспособил:

SetTimer, tim1, 100

KeyList := {}
hHookKeybd := DllCall("SetWindowsHookExW"
    , "Int", WH_KEYBOARD_LL := 13
    , "Ptr", RegisterCallback("LowLevelKeyboardProc", "Fast")
    , "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
    , "UInt", 0, "Ptr")

OnExit Esc
return




LowLevelKeyboardProc(nCode, wParam, lParam) {
    global KeyList 
    Critical
    if (wParam = 256) {
        time := NumGet(lParam+0, 12, "UInt")
        vk := NumGet(lParam+0, 0, "UInt")
        KeyList[time] := vk
    }
    return DllCall("CallNextHookEx", "Ptr",> 0, "Int", nCode, "UInt", wParam, "Ptr", lParam)
}

Esc::
    DllCall("UnhookWindowsHookEx", "Ptr", hHookKeybd)
    ExitApp

tim1:
    for key, value in KeyList
        o := key

    ToolTip, % ": " o

    return

Время последнего нажатия очень хорошо запоминается.
Но нужно ещё чуток доработать.  Есть две проблемы:
1. Не учитываются нажатия клавиш мыши
2. Не срабатывают некоторые сочетания клавиш, например #8

  Можно это исправить?

4 (изменено: creature.ws, 2013-05-11 20:11:48)

Re: AHK: Время нажатия any key.

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

5 (изменено: serzh82saratov, 2013-05-12 01:02:48)

Re: AHK: Время нажатия any key.

Я бы пошёл

+ простым путём


Global Result, prRes
OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx" , Int, WH_KEYBOARD_LL := 13 
            , UInt, RegisterCallback("LowLevelKeyboardProc", "Fast")
            , UInt, DllCall("GetModuleHandle", UInt, 0) , UInt, 0) 
Return

Exit: 
    DllCall("UnhookWindowsHookEx", UInt, hHookKeybd)
    ExitApp 

LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical 
    SetFormat, Integer, H 
    vkCode := "vk" SubStr( NumGet(lParam+0), 3) 
    D := ((NumGet(lParam+0, 8) & 1) <<8) | NumGet(lParam+0, 4) 
    scCode := "sc" SubStr((D = 0x136 ? 0x36 : D), 3) 
    Mode := (wParam = 0x100 || wParam = 0x104) ? " Down" : " Up" 
    KeyName := GetKeyName(vkCode scCode) 
    If (prRes <> KeyName Mode)
        Write(KeyName Mode)
    prRes := KeyName Mode
    Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam) 
} 

Write(Res) {
    Result .= Res "  -  " A_Hour ":" A_Min "." A_Sec "." A_MSec "`n"      
}

~LButton::
~RButton:: 
~XButton1::
~XButton2::
~MButton:: Write(SubStr(A_ThisHotkey,2) " Down")  

~WheelDown::
~WheelUp::
~WheelLeft::
~WheelRight:: 

~LButton Up::
~RButton Up::
~XButton1 Up::
~XButton2 Up::
~MButton Up:: Write(SubStr(A_ThisHotkey,2)) 

Space:: ToolTip % Result

без мышиного хука. И с псевдомассивом.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: serzh82saratov, 2013-05-12 10:10:18)

Re: AHK: Время нажатия any key.

2. Не срабатывают некоторые сочетания клавиш, например #8

Если надо просто последнее нажатие с модификаторами, то:


Global HF_ModButtons := {"vkA4":"Alt","vkA5":"Alt","vkA2":"Ctrl","vkA3":"Ctrl","vkA0":"Shift","vkA1":"Shift","vk5B":"Win","vk5C":"Win"} 
OnExit, Exit 
hHookKeybd := DllCall("SetWindowsHookEx" , Int, WH_KEYBOARD_LL := 13 
            , UInt, RegisterCallback("LowLevelKeyboardProc", "Fast")
            , UInt, DllCall("GetModuleHandle", UInt, 0) , UInt, 0) 
Return

Exit: 
    DllCall("UnhookWindowsHookEx", UInt, hHookKeybd)
    ExitApp 

LowLevelKeyboardProc(nCode, wParam, lParam) { 
    Critical 
    SetFormat, Integer, H 
    vkCode := "vk" SubStr( NumGet(lParam+0), 3)    
    IF HF_ModButtons[vkCode] || (wParam <> 0x100 && wParam <> 0x104)  
        Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam)  
    D := ((NumGet(lParam+0, 8) & 1) <<8) | NumGet(lParam+0, 4) 
    scCode := "sc" SubStr((D = 0x136 ? 0x36 : D), 3)  
    KeyName := GetKeyName(vkCode scCode)  
    Write(KeyName) 
    Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam) 
} 

Write(Res) {
    Pref .= GetKeyState("LAlt") || GetKeyState("RAlt") ? "Alt+" : ""
    Pref .= GetKeyState("LWin") || GetKeyState("RWin") ? "Win+" : ""
    Pref .= GetKeyState("LShift") || GetKeyState("RShift") ? "Shift+" : ""
    Pref .= GetKeyState("LCtrl") || GetKeyState("RCtrl") ? "Ctrl+" : ""
    ToolTip % Pref Res "  -  " A_Hour ":" A_Min ":" A_Sec "." A_MSec
}

~*LButton::
~*RButton:: 
~*XButton1::
~*XButton2::
~*MButton::
~*WheelDown::
~*WheelUp::
~*WheelLeft::
~*WheelRight:: Write( SubStr(A_ThisHotkey,3))
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Время нажатия any key.

serzh82saratov пишет:

2. Не срабатывают некоторые сочетания клавиш, например #8

Если надо просто последнее нажатие с модификаторами, то:

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


  Код для мышки, как первый, так и второй работает прекрасно, но совместить их в одном скрипте с кодом для клавиатуры у меня не получается.  Они вообще совместимы? Или надо делать два отдельных скрипта на мышь и на клаву?

8

Re: AHK: Время нажатия any key.

Код для мышки, как первый, так и второй работает прекрасно, но совместить их в одном скрипте с кодом для клавиатуры у меня не получается.  Они вообще совместимы?

Если вы мне, то оба варианта и есть собственно проверенные в работе скрипты. Оно уже объединено, в чём проблема их несовместимости?

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

Есть такое дело...

creature.ws пишет:

или описать решаемую задачу в отрыве от путей (как вам кажется) её решения.

И я тоже теперь не пойму конечную задачу...

Требуется точное описание алгоритма.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Время нажатия any key.

Описание проблемы.

Имеется две многооконные программы и скрипт с хоткеями.  Вторая программа иногда как-то странно  воздействует  на первую так, что у той неожиданно меняется активное окно, что категорически недопустимо.  И потому, что хоткей скрипта может неожиданно сработать в другое окно, которое только что активировалось, хотя предназначался в предыдущее, которое было активным долю секунды назад, и потому, что это просто сбивает с толку.

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

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

Это позволит уменьшить шанс отправки хоткеев в ошибочное окно до минимума или практически свести на нет.


Поэтому я пытаюсь написать скрипт, который запоминает время нажатий и кликов, и сравнивает время смены активности окна с последним действием пользователя. Если действий пользователя во время смены окна не было - возвращаем активность окну, имя которого было сохранено перед этим, поскольку смена была спровоцирована глюком второй программы.

10 (изменено: creature.ws, 2013-05-13 13:06:02)

Re: AHK: Время нажатия any key.

«Отправка хоткеев» в правильное окно всегда будет происходить, если использовать ControlSend. Или «первое приложение» не воспринимает нажатия генерируемые командой Send? Тогда, перед каждым вызовом SendInput активируйте окно первой программы с помощью WinActivate.

11 (изменено: serzh82saratov, 2013-05-13 15:32:44)

Re: AHK: Время нажатия any key.

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

Может просто использовать A_TimeIdle или A_TimeIdlePhysical


loop        
    ToolTip % A_TimeIdle
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12 (изменено: serzh82saratov, 2013-05-14 00:26:25)

Re: AHK: Время нажатия any key.

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


OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
            , Int, WH_KEYBOARD_LL := 13
            , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
            , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
            , UInt, 0, Ptr)  
loop 
    ToolTip % A_TickCount - TimeSince
Return

Exit: 
    DllCall("UnhookWindowsHookEx", UInt, hHookKeybd)
    ExitApp 

LowLevelKeyboardProc(nCode, wParam, lParam) {
    Global TimeSince := A_TickCount
    Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam) 
}  

~*LButton::
~*RButton:: 
~*XButton1::
~*XButton2::
~*MButton::   
~*WheelDown::
~*WheelUp::
~*WheelLeft::
~*WheelRight:: TimeSince := A_TickCount
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Время нажатия any key.

serzh82saratov пишет:

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

  Именно так я и написал. Речь идёт именно о времени:

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

14 (изменено: serzh82saratov, 2013-05-13 16:28:26)

Re: AHK: Время нажатия any key.

И зачем в третьем посте вы извлекаете код кнопки? И всё это хозяйство добавляете в массив!, когда нужно только последнее?

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

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

Продуктивный диалог получается!? Без коментариев по кодам 11 и 12 постов.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Время нажатия any key.

creature.ws пишет:

«Отправка хоткеев» в правильное окно всегда будет происходить, если использовать ControlSend. Или «первое приложение» не воспринимает нажатия генерируемые командой Send? Тогда, перед каждым вызовом SendInput активируйте окно первой программы с помощью WinActivate.

    Подавляющая часть элементов управления окна не опознаётся как контролы.  Но не только в этом проблема.  Попробую уточнить описание. У первой программы несколько одинаковых окон.  Время от времени в активном окне мне нужно произвести ряд кликов и изменить текст котрола.  Я создал несколько разных горячих клавиш, которые отправляют разные наборы кликов и текста.


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

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

16 (изменено: creature.ws, 2013-05-13 16:40:01)

Re: AHK: Время нажатия any key.

я нажимаю горячую клавишу, а за мгновение до этого активное окно меняется

Значит сделайте горячую клавишу контекстно-зависимой. Подпрограмма горячей клавиши не начнёт выполненятся, если активное окно «не то».

17 (изменено: Pokerist, 2013-05-13 16:40:23)

Re: AHK: Время нажатия any key.

serzh82saratov пишет:

И зачем в третьем посте вы извлекаете код кнопки?

Я? Вы слишком хорошо обо мне думаете. Я пытаюсь ГОТОВЫЙ РАБОТАЮЩИЙ непонятный мне код приспособить под собственные нужды.  Если бы я так хорошо знал что там можно убрать, не нарушив его работы в нужной мне части, то наверное и темы бы не было.

Кстати в названии темы тоже только время. Извините, если ввёл в заблуждение.  Это не нарочно.

18

Re: AHK: Время нажатия any key.

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

Значит сделайте горячую клавишу контекстно-зависимой.

Это наверно не получится т.к. окна принадлежат одной программе, и наверняка имеют один класс и заголовок, или неизвестный заранее заголовок. Но "общую" контекстную-зависимость конечно надо организовать:
#IfWinActive ahk_exe процесс
Здесь получаем хендл активного окна, и перед каждой командой активируем именно то окно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Время нажатия any key.

Подавляющая часть элементов управления окна не опознаётся как контролы.  Но не только в этом проблема.  Попробую уточнить описание. У первой программы несколько одинаковых окон.  Время от времени в активном окне мне нужно произвести ряд кликов и изменить текст котрола.  Я создал несколько разных горячих клавиш, которые отправляют разные наборы кликов и текста.

Для отправки команды именно окну есть в ControlSend параметр ahk_parent
А для отправки именн в то окно используется хендл который был получен при старте хоткея.
ControlSend работает не вовсех приложениях, но в каждом случае это нужно сначала проверить...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20 (изменено: Pokerist, 2013-05-13 18:39:52)

Re: AHK: Время нажатия any key.

serzh82saratov пишет:

Для отправки команды именно окну есть в ControlSend параметр ahk_parent
А для отправки именн в то окно используется хендл который был получен при старте хоткея.
ControlSend работает не вовсех приложениях, но в каждом случае это нужно сначала проверить...

    У меня примерно 20 наборов команд для этих окон, которые повешены на хоткеи. А окон несколько за раз,  и всего они имеют около сотни различных заголовков. Причём одно окно может просуществовать пару минут и быть заменено другим,  а другое будет существовать более часа.
          Вы предлагаете создать для каждого окна свой набор хоткеев для каждого набора действий?  Даже если всё максимально упростить, получится что-то около нескольких сотен вариантов.  Очень неудобно будет, когда нужно быстро отправить в окно нужные действия: сначала понять, что это же за окно передо мной, какой хоткей соответствует нужному набору команд именно для этого окна.

21

Re: AHK: Время нажатия any key.

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

22 (изменено: creature.ws, 2013-05-13 22:06:32)

Re: AHK: Время нажатия any key.

- самой первой программой, но по предсказуемым правилам
- хоткеем
- мышкой,

Если эти события вы можете обрабатывать, то задача сводится к отслеживанию событий смены фокуса ввода и сравнению времени «кликов, нажатий» и времени смены фокуса.
Если смена фокуса и «клики, нажатия» произошли в «примерно одно время» то можно предположить, что смена фокуса произведена вами, а не молниеносной и непредсказуемой «второй программой».

#Persistent
DllCall("SetWinEventHook"
    , "UInt", 0x8005
    , "UInt", 0x8005
    , "UInt", 0
    , "Ptr", RegisterCallback("HookProc", "F")
    , "UInt", 0
    , "UInt", 0
    , "UInt", 0)

return

HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime) {
    global focusChanged := dwmsEventTime
}

#if WinActive("ahk_exe имяпервойпрограммы.exe") ; если активно окно нужной программы
    && (A_TickCount - focustChanged > 500 ; и изменение фокуса ввода произошло достаточно давно
    || Abs(focusChanged - focusSetByUser) > 100) ; или изменение фокуса ввода произошло совсем недавно, и есть шанс, что мы его прозевали и действия из цитаты в начале сообщения были произведены почти в то же время, что и смена фокуса...

; проблемные горячие клавиши

В переменную focusChanged  записывается время изменения фокуса ввода.
В переменную focusSetByUser записывайте время произведения действий, приводящих к изменению активного окна первой программы.
Пример отслеживания изменения фокуса кликом левой кнопки мыши:


#if WinFromPoint("ahk_exe имяпервойпрограммы.exe")
    ~Lbutton::focusSetByUser := A_TickCount

WinFromPoint(args*) {
    MouseGetPos,,, hwnd
    return WinExist("ahk_id" hwnd " " args.Remove(1), args*)
}

 
 

очень простой выход

…Из ситуации, в которой скрипт должен угадать, куда же смотрит юзер, когда жмёт клавиши.

23

Re: AHK: Время нажатия any key.

Pokerist пишет:

Вы предлагаете создать для каждого окна свой набор хоткеев для каждого набора действий?

Даже и в мыслях не было такой глупости. Вы вообще откуда это взяли???

Честно говоря, я наделся на какой-то очень простой выход.

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

   Помоему вместо того чтобы вникать в написанное выше или конструктивно критиковать его же, вы ищете какой-то потаённый смысл и делаете выводы даже необъясняя из чего они произрастают...
Все необходимые методы решения вам предложены, но вы их попросту игнорируете.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK: Время нажатия any key.

serzh82saratov пишет:

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

   Помоему вместо того чтобы вникать в написанное выше или конструктивно критиковать его же, вы ищете какой-то потаённый смысл и делаете выводы даже необъясняя из чего они произрастают...
Все необходимые методы решения вам предложены, но вы их попросту игнорируете.

  Чтобы что-то комментировать надо хотя бы примерно понять что это. Пока мне этого не удалось. Если Вы хотите обсуждать меня, а не мою проблему пишите мне в личку, ок?

25

Re: AHK: Время нажатия any key.

Чтобы что-то комментировать надо хотя бы примерно понять что это.

Значит надо понять что это. А чтобы понять что это, надо задать вопрос "что это?"
Потому что тот кто про это написал, не может знать что вы незнаете что это.
Сомневаюсь что вы увидите\дождётесь полностью понятное для вас решение без лишних вопросов, ведь если оно есть вы бы самостоятельно до него дошли.

Если Вы хотите обсуждать меня, а не мою проблему пишите мне в личку, ок?

Уважаемый господин Pokerist, у меня нет никакого желания\мотивов обсуждать вашу персону лично, ибо как вы догадываетесь я с вами лично незнаком. Я лишь высказываю вам предположение о том, что ваш способ познания нового путём игнорирования этого самого нового не совсем продуктивен. И лично у меня такой стиль общения вызывает ощущение что тема заведена не для решения вопроса, а просто пообщатся с другими участниками форума. Но для этого на форуме есть раздел OFF:

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26 (изменено: serzh82saratov, 2013-05-14 02:07:41)

Re: AHK: Время нажатия any key.

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

Иллюстрация давно предложенного решения:



#IfWinActive ahk_exe notepad.exe
Space::
    hTargetWin := WinExist("A")
    TrayTip, Окно блокнота активно, макрос запущен.           
    Loop 9     
    {
        While !WinActive("ahk_id" hTargetWin)
            WinActivate ahk_id %hTargetWin%
        Send {%A_Index%}{Enter} 
        Sleep 500
    }       
    Return    
#IfWinActive

Space:: TrayTip, , Окно блокнота неактивно 

Хоткей "Пробел" будет запускать макрос только если активно окно Блокнота.
Для понимания следует запустить несколько окон Блокнота.
Во время посыла нажатий, активируйте любые другие окна для того чтобы убедится, что посыл будет произведён только в то окно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27 (изменено: Pokerist, 2013-05-14 03:43:00)

Re: AHK: Время нажатия any key.

Добавьте в начало этого скрипта что-нибудь вроде

Settimer,tim1, 100


Sleep, 5000





tim1:
Settimer, tim1, Off
WinGet, bloknot, IDLast, ahk_exe notepad.exe
Random, t_pausa, 50, 200
Sleep, % t_pausa
WinActivate,  ahk_id %bloknot%
Settimer, tim1, On
return

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












Мне кажется, что Вы не внимательно читали моё описание и пропустили некоторые детали. Я выделил в цитате это место.

Вторая программа иногда как-то странно  воздействует  на первую так, что у той неожиданно меняется активное окно, что категорически недопустимо.

  А Вы, как я понял, пытаетесь не допустить отправки хоткеев в окна других программ.

28 (изменено: Pokerist, 2013-05-14 03:40:52)

Re: AHK: Время нажатия any key.

serzh82saratov пишет:

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

  На данный момент мне не ясно как вставить код из 22 в свой скрипт, если там 90%  Хоткеев уже находится внутри одного

#if 

#

который определяет, что это нужный тип окна первой программы.

  Как их правильно вставлять друг в друга?

29

Re: AHK: Время нажатия any key.

Добавьте в начало этого скрипта что-нибудь вроде

Зачем вставлять в код подпрограмму периодичеки активирующую окно целевой программы бывшее активным раньше всех других?
Код в 26 посте запоминает окно при нажатии хоткея, и работает только с этим окном.
Код запоминающий последнее нажатие кнопки приведён в 12 посте. В нём же решён сабж "Время нажатия любой кнопки".

Чего вам ещё нехватает для решения задачи?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

30

Re: AHK: Время нажатия any key.

Код из #12 удалось внедрить в мои кракозябры. Свою функцию этот фрагмент выполняет отлично. К сожалению полностью наладить скрипт, чтобы свести на нет глюки второй программы, не удалось.  Глюки оказались более разнообразными, чем казалось в начале.

  Всем спасибо за помощь!