1

Тема: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

И так есть скрипт, авторство забыл кого

+ VkScCode64.ahk
#Persistent
  OnExit, Exit
   ToolTip
   hHookKeybd := DllCall("SetWindowsHookEx"
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, "Ptr")
      , UInt, 0, "Ptr")
   Return

^#ESC:: 
Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ToolTip
ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam)
{
   Critical
   SetFormat, Integer, H
   ToolTip, % wParam . "| vkCode: " . NumGet(lParam+0, 0, "UInt") . " scCode: " . NumGet(lParam+0, 4, "UInt")
      . " Extended: " . NumGet(lParam+0, 8, "UInt") & 1 . " Time: " . NumGet(lParam+0, 12, "UInt")
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}

Правда я внёс не значительные правки.


Требуется вызывать данный скрипт в контексте другого, главного/основного скрипта
1. Мне нужно, что бы он не оставался резидентным, пока мне так и не удалось этот скрипт сделать не резидентным.
2. Я хочу использовать его как подпрограмму-функцию, т.е. что бы она возвращала коды нажатия VK и SC.
3. Повторный вызов, на усмотрение главного/основного скрипта.

Думаю всё верно изложил, надеюсь.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

2 (изменено: serzh82saratov, 2014-07-18 21:24:55)

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

Indomito пишет:

авторство забыл кого

Indomito пишет:

Прочёл всё до конца и ничего не понял

пруф

Да, по этой ссылке
http://forum.script-coding.com/viewtopic.php?id=6350 и в правду никто бы не понял, что автор teadrinker. И там же ссылка с загадочным названием "Тема для обсуждения". Но ладно, это всё трудные вопросы гипер-программирования. Как и:

этот скрипт сделать не резидентным

Что значит - не резидентным?

------------------------------

Теперь попроще:

Повторный вызов, на усмотрение главного/основного скрипта

Так ведь ответ уже целиком в коде:
Включить хук

   hHookKeybd := DllCall("SetWindowsHookEx"
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, "Ptr")
      , UInt, 0, "Ptr")

Выключить хук

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

3

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

OFF:
serzh82saratov, не подсказывай так часто. Дай возможность начинающим скриптописателям потренировать соображалку, научиться пользоваться документацией и поиском. Вообще, к хорошему быстро привыкают.

4 (изменено: serzh82saratov, 2014-07-18 22:17:28)

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

OFF:
Да Я скорее помогаю (далеко не начинающим скриптописателям, уже ведь скоро 3 года ТС) не создавать просто так новых тем в AutoHotkey, а то этим разделом скоро даже гугль "подавится". Ну а про начинающих, тут (в сабже) конечно им доки и поиск непомогут, но вспоминая свои первые вопросы, понимаю, что для начала лучше на примере, а дальше уже видно - удочку или золотую рыбку RTFM.

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

5

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

6

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

Причём тут вообще - ExitApp?

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

7 (изменено: serzh82saratov, 2014-07-19 10:41:56)

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

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

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

8

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

serzh82saratov пишет:

Причём тут вообще - ExitApp?

мне нужно вызвать данную "фигню" один раз, а с ошибками это позже буду разбираться отдельно.
Может я не верно понимаю алгоритм скрипта, но как вызывать функцию LowLevelKeyboardProc(nCode, wParam, lParam), так как не понятно что ей давать на вход, т.к. она функция Callback(обратного хода), такое часто применяют, но зачем это здесь не понятно.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

9

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

Может я не верно понимаю алгоритм скрипта

Очевидно, да. Зачем вызывать LowLevelKeyboardProc? И причём тут всё таки - ExitApp?

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

10

Re: AHK: Нужно модифицировать скрипт VkScCode64 в функцию

serzh82saratov пишет:

Очевидно, да. Зачем вызывать LowLevelKeyboardProc? И причём тут всё таки - ExitApp?


1. Согласен что не понимаю
2. Да я её не вызываю... мысли в слух
3. Что бы завершить работу.

И так...

Функция LowLevelKeyboardProc должна сообщить две вещи:
- клавиша нажата и scCode помещён в глоб. переменную
- установить флаг отработки, перед RETURN

Основной модуль должен.
1. Запустить таймер
2. Произвести иницализацию-перехват

   hHookKeybd := DllCall("SetWindowsHookEx"
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, "Ptr")
      , UInt, 0, "Ptr")
Return

3. По флагу остановить таймер и выполнить

DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)


Теперь верно?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download