Автор Тема: HotKey - Установка горячих клавиш  (Прочитано 72783 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
AutoIt: 3.3.0.0
Версия: 1.62

Категория: Мышь и клавиатура

Описание: Устанавливает горячие клавиши для вызова пользовательских функций.

Основные отличия от HotKeySet():

  • Возможность установить абсолютно любые горячие клавиши, включая такие как CTRL+ALT+DEL*, F12, WIN+... и т.д. Исключение составляют лишь такие специфические клавиши как Fn и подобные ей, которые не имеют собственного скан-кода.
  • Возможность установить горячие клавиши, которые уже заняты другими приложениями.
  • Возможность установить горячие клавиши только для определенных окон.
  • Можно  блокировать горячие клавиши для других приложений или пропускать их дальше (ниже) по цепочке хуков.
  • Блокировка повторных вызовов при удержании горячей клавиши.
  • Блокировка вызова пользовательской функции до завершения обработки предыдущего вызова.
  • Отключение установленных ранее горячих клавиш без удаления хука из цепочки хуков, т.е без потери "приоритета".
  • Для назначения горячих клавиш используется целочисленные значения, соответствующие таблице Virtual-Key Codes, а не их строковые "аббревиатуры".

*Вы можете назначить в качестве горячей клавиши CTRL+ALT+DEL, но не сможете блокировать вызов "Диспетчера задач" (Windows Task Manager).

Синтаксис и параметры:
(нажмите для показа/скрытия)

Пример 1:
(нажмите для показа/скрытия)

Пример 2:
(нажмите для показа/скрытия)

Пример 3:
(нажмите для показа/скрытия)

Источник: HotKey UDF (оффициальный форум)
Автор: Yashied


Примечания:

  • В основе работы данной библиотеки лежит незыблемый принцип - очередная горячая клавиша не будет обрабатываться до тех пор, пока не отжаты все остальные установленные горячие клавиши. Другими словами, библиотека не поддерживает работу с более чем одной горячей клавишей одновременно.
  • Исходя из предыдущего следует, что для геймеров эта библиотека (в некоторых случаях) может быть мала полезна.
  • Описания (на английском) для других функций из этой библиотеки находятся внутри самого файла и не представляют из себя ничего сложного.
  • Вы можете скачать (опционально) файл vkConstants.au3, в котором находятся необходимые константы (VK, CK-константы включены непосредственно в библиотеку) для определения горячих клавиш.
  • Вы так же можете скачать Beta версию HotKey библиотеки (HotKey_17b.au3), в которую добавлен флаг $HK_FLAG_POSTCALL, с помощью которого можно регистрировать отжатия горячих клавиш. Описание (на английском) находится внутри библиотеки. Это полностью рабочий модуль и в будущем (в зависимости от отзывов и пожеланий) статус Beta может быть снят без каких-либо изменений в коде.
  • Вы можете использовать специально написанную для этого модуля библиотеку HotKeyInput, которая позволяет задавать и отображать в GUI горячие клавиши.
  • HotKey и HotKey_17b тестировались в AutoIt 3.3.0.0 и 3.3.1.1 Beta на системах Windows XP Pro Service Pack 2 и Windows Vista Ultimate Service Pack 1.
« Последнее редактирование: Февраль 20, 2011, 03:38:31 от Yashied »


Думай, прежде чем говорить.

Русское сообщество AutoIt

HotKey - Установка горячих клавиш
« Отправлен: Октябрь 10, 2009, 00:26:49 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #1, Отправлен: Октябрь 10, 2009, 06:49:24 »
Yashied,
Наконец-то на форуме появился продукт с более подробным русскоязычным описанием.
Хорошая работа и отличное оформление .Давно использую эти ф-ии для назначение  одной пользовательской функции для нескольких горячих клавиш.
Русский перевод синтаксиса и параметров позволит  лучше разобраться и применять их. :IL_AutoIt_1:
В чем отличие новой версии 1.7b от 1.61  ? .
Что позволяет новый параметр : $HK_FLAG_POSTCALL ?

P.S. Жаль ,что отсутствет возможность назначения ф-ии с параметрами (Или я не нашел).

« Последнее редактирование: Октябрь 10, 2009, 07:04:49 от gregaz »
Самая большая проблема – её сформулировать. 

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #2, Отправлен: Октябрь 10, 2009, 07:08:34 »
Отвечу завтра. Сейчас пойду спать.

:sleeping:

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7774
  • Репутация: 2276
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: HotKey - Установка горячих клавиш
« Ответ #3, Отправлен: Октябрь 10, 2009, 07:13:09 »
gregaz [?]
Цитировать
использую эти ф-ии для назначение  одной пользовательской функции для нескольких горячих клавиш.
Вообще то это можно делать и встроенной функцией ;)
Код: AutoIt [Выделить]
HotKeySet("^+x", "_MyFunc")
HotKeySet("^+a", "_MyFunc")

While 1
    Sleep(100)
WEnd

Func _MyFunc()
    Switch @HotKeyPressed
        Case "^+x"
            MsgBox(64, 'Title', "^+x pressed, goodby!")
            Exit
        Case "^+a"
            MsgBox(64, 'Title', "^+a pressed")
    EndSwitch
EndFunc


Цитировать
Жаль ,что отсутствет возможность назначения ф-ии с параметрами
Кстати была такая UDF где то на оф. форуме, от martin'а кажется...

Добавлено: Октябрь 10, 2009, 07:19:25
Yashied [?]
Цитировать
библиотека не поддерживает работу с более чем одной горячей клавишей одновременно.
А вот это кстати было бы плюсом (в качестве опции/параметра), мне часто нужно было задать хоткей и чтобы не блокировалась вызываемая функции для следующего хоткея. А так библиотека просто незаменима, +5 по рейтенгу :ok:, спасибо.
« Последнее редактирование: Октябрь 10, 2009, 07:19:25 от CreatoR, Причина: Объединение сообщений »


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Re: HotKey - Установка горячих клавиш
« Ответ #3 Отправлен: Октябрь 10, 2009, 07:13:09 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #4, Отправлен: Октябрь 10, 2009, 07:38:52 »
Вообще то это можно делать и встроенной функцией
Да , оказывается , можно.
Значит эта библиотека для более серьезных задач.

P.S. Хотя ф-ия HotKeySet очень капризна к форме написания горячих клавиш.
« Последнее редактирование: Октябрь 10, 2009, 08:21:42 от gregaz »

Оффлайн SECTOR [?]

  • Продвинутый
  • ***
  • Сообщений: 386
  • Репутация: 56
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: HotKey - Установка горячих клавиш
« Ответ #5, Отправлен: Октябрь 10, 2009, 11:52:25 »
О боже! Вот оно! То самое... С большими функциями и возможностями!  :laugh:


Спасибо огромное! :IL_AutoIt_1:


Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #6, Отправлен: Октябрь 10, 2009, 16:58:05 »
...мне часто нужно было задать хоткей и чтобы не блокировалась вызываемая функции для следующего хоткея.

Функции не будут блокироваться, здесь речь идет о другом. Например, мы назначили две горячие клавиши: F1 и F2. Нажимаем F1 и, не отпуская ее, нажимаем F2. В этом случае F2 не будет работать, так как F1 еще не отжата. Это можно протестировать с помощью второго примера (см. первый пост). Но если F1 отжата, то F2 будет работать не зависимо от того, завершилась обработка для F1 или нет (если только ты не выключил эту возможность с помощью флага $HK_FLAG_NOOVERLAPCALL). Таке поведение (одновременное нажатие нескольких клавиш) в основном может понадобиться в играх (шутерах). Кстати, количество одновременно нажатых клавиш также зависит от самой клавиатуры. Дешевые клавиатуры поддерживают от силы 2-3 клавиши, в то время как игровые клавиатуры могу поддерживать до 256 одновременных нажатий. Я использую эту библиотеку для многих программ и еще не сталкивался с необходимостью использовать одновременные нажатия. В любом случае, это довольно сложно (если вообще возможно)  реализовать с помощью хука. Здесь целесообразно задействовать _IsPressed(), но это, как ты понимаешь, совсем уже другая песня.

Жаль ,что отсутствет возможность назначения ф-ии с параметрами...

А зачем? Что должно передоваться в эту функцию? Можно написать так (но какой в этом смысл):

Код: AutoIt [Выделить]
Func _HotKey()
    _MyFunc($Param1, $Param2, $Param3, $Param4)
EndFunc   ;==>_HotKey

Func _MyFunc($Param1, $Param2, $Param3, $Param4)
    ...
EndFunc   ;==>_MyFunc


В чем отличие новой версии 1.7b от 1.61?

Введен флаг $HK_FLAG_POSTCALL. На этом различия для пользователя заканчиваются. Но это потребовало внести много изменений во внутренний код библиотеки.

Описание для $HK_FLAG_POSTCALL:
(нажмите для показа/скрытия)

Пример для $HK_FLAG_POSTCALL:
(нажмите для показа/скрытия)

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #7, Отправлен: Октябрь 10, 2009, 21:14:30 »
Введен флаг $HK_FLAG_POSTCALL. На этом различия для пользователя заканчиваются.
Ясно спасибо.

А зачем? Что должно передоваться в эту функцию? Можно написать так (но какой в этом смысл):
Да можно, но это требует введения дополнительной промежуточной ф-ии _HotKey

Русское сообщество AutoIt

Re: HotKey - Установка горячих клавиш
« Ответ #7 Отправлен: Октябрь 10, 2009, 21:14:30 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7774
  • Репутация: 2276
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: HotKey - Установка горячих клавиш
« Ответ #8, Отправлен: Октябрь 11, 2009, 00:40:41 »
Yashied [?]
Цитировать
А зачем? Что должно передоваться в эту функцию?
Параметры:

_HotKeyAssign($iKey [, $sFunction [, $vParam [, $iFlags [, $sTitle]]]]
В качестве $vParam можно передавать хоть массивы, а сама функция ($sFunction) будет принимать этот параметр опцинально (не смотрел пока как там делается вызов, но через Call это можно сделать):

Код: AutoIt [Выделить]
Func _HotKey($vParam)
    If IsDeclared($vParam) Then ....
EndFunc


очень было бы полезно.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #9, Отправлен: Октябрь 11, 2009, 01:12:38 »
CreatoR, может я туплю конечно, но зачем это нужно? Что в этом полезного? Передавать в функцию глобальный параметр... Это эквивалентно простому объявлению переменной

Код: AutoIt [Выделить]
Global $vParam


и проверяй ее где угодно.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7774
  • Репутация: 2276
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: HotKey - Установка горячих клавиш
« Ответ #10, Отправлен: Октябрь 11, 2009, 02:08:17 »
Yashied [?]
Цитировать
Передавать в функцию глобальный параметр... Это эквивалентно простому объявлению переменной
А кто говорил о глобальной переменной? Как раз наоборот, это будет полезно для избежания использования таких переменных:

Код: AutoIt [Выделить]
_HotKeyAssign($iKey, "_HotKey", "Параметр №1")
_HotKeyAssign($iKey, "_HotKey", "Параметр №2")


И ещё пару заметок:

[?]
Цитировать
Основные отличия от HotKeySet():
...
Назначение всего одной пользовательской функции для нескольких горячих клавиш.
Оно не отличается, в оригинале тоже можно задать одну функцию.

Цитировать
Для назначения горячих клавиш используется целочисленные значения, соответствующие таблице Virtual-Key Codes, а не их строковые "аббревиатуры".
Вот кстати, а было бы неплохо добавить поддержку и обычных строковых значении.

И ещё, как различать в одной функции какой хоткей был вызван? Сорри, я не внимателен.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #11, Отправлен: Октябрь 11, 2009, 04:17:57 »
Оно не отличается, в оригинале тоже можно задать одну функцию.

Поправил.

Добавлено: Октябрь 11, 2009, 22:25:34
Этот флаг может быть использован, например, для организации двойного нажатия клавиш.

Вот пример на эту тему. Функция срабатывает на двойное нажатие F12. Максимальный интервал между нажатиями (что бы это воспринималось как двойное нажатие) равен 250 мс.

Код: AutoIt [Выделить]
#Include <HotKey_17b.au3>

Global Const $VK_F12 = 0x7B

Global $Timer = 0

_HotKeyAssign($VK_F12, '_MyFunc', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL, $HK_FLAG_POSTCALL))

While 1
    Sleep(10)
WEnd

Func _MyFunc($iKey)
    If $iKey > 0 Then
        If ($Timer) And (TimerDiff($Timer) < 250) Then
            MsgBox(0, 'Hotkey Test Message', 'Hotkey has been pressed!')
            $Timer = 0
            Return
        EndIf
        $Timer = TimerInit()
    EndIf
EndFunc   ;==>_MyFunc

« Последнее редактирование: Октябрь 11, 2009, 22:25:34 от Yashied, Причина: Объединение сообщений »

Оффлайн Dreadfulangel [?]

  • Новичок
  • *
  • Сообщений: 19
  • Репутация: 11
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #12, Отправлен: Январь 11, 2010, 13:58:04 »
В AutoIt v3.3.2.0 эта UDF не работает, можно ли исправить UDF для совместимости с новой версией.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #13, Отправлен: Январь 11, 2010, 14:23:13 »
В AutoIt v3.3.2.0 эта UDF не работает, можно ли исправить UDF для совместимости с новой версией.

Что именно не работает? У меня все отлично работает во всех версиях AutoIt.

Оффлайн Dreadfulangel [?]

  • Новичок
  • *
  • Сообщений: 19
  • Репутация: 11
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #14, Отправлен: Январь 11, 2010, 14:34:34 »
При запуске Примера №1 возникает ошибка:
>Running AU3Check (1.54.19.0)  from:C:\Program Files\AutoIt3
F:\hot\HotKey.au3(200,56) : ERROR: Opt() called with illegal argument 1: "OnExitFunc"
Global $OnHotKeyExit = Opt('OnExitFunc', 'OnHotKeyExit')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
F:\hot\AutoIt v3 Script.au3 - 1 error(s), 0 warning(s)

В новой документации нашел:
The AutoItSetOption() option OnExitFunc has been removed. See the new functions OnAutoItExitRegister() and OnAutoItExitUnregister().

Русское сообщество AutoIt

Re: HotKey - Установка горячих клавиш
« Ответ #14 Отправлен: Январь 11, 2010, 14:34:34 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3787 Просмотров
Последний ответ Декабрь 27, 2009, 00:44:54
от Anton
3 Ответов
4220 Просмотров
Последний ответ Июнь 20, 2010, 15:47:45
от Vlasssov
5 Ответов
6022 Просмотров
Последний ответ Июль 06, 2012, 00:57:11
от CreatoR
2 Ответов
3771 Просмотров
Последний ответ Июль 11, 2011, 16:24:27
от Kaster
2 Ответов
4787 Просмотров
Последний ответ Февраль 13, 2012, 17:02:17
от madmasles
0 Ответов
1694 Просмотров
Последний ответ Февраль 13, 2012, 16:48:54
от CreatoR
1 Ответов
3191 Просмотров
Последний ответ Февраль 16, 2012, 23:37:42
от CreatoR
10 Ответов
3996 Просмотров
Последний ответ Апрель 21, 2012, 22:05:30
от C2H5OH
11 Ответов
3872 Просмотров
Последний ответ Апрель 11, 2013, 15:07:03
от dimid
1 Ответов
795 Просмотров
Последний ответ Май 27, 2015, 22:20:02
от alex33