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

Общий раздел по AutoIt => Примеры и рабочие проекты => UDF - Пользовательские функции => Тема начата: Yashied от Октябрь 10, 2009, 00:26:49

Название: HotKey - Установка горячих клавиш
Отправлено: Yashied от Октябрь 10, 2009, 00:26:49
AutoIt: 3.3.0.0
Версия: 1.62

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

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

Основные отличия от HotKeySet() (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm):


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

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

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

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

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

Источник: HotKey UDF (оффициальный форум) (http://www.autoitscript.com/forum/index.php?showtopic=90492)
Автор: Yashied (http://autoit-script.ru/index.php?action=profile;u=26)


Примечания:

Название: Re: HotKey - Установка горячих клавиш
Отправлено: gregaz от Октябрь 10, 2009, 06:49:24
Yashied,
Наконец-то на форуме появился продукт с более подробным русскоязычным описанием.
Хорошая работа и отличное оформление .Давно использую эти ф-ии для назначение  одной пользовательской функции для нескольких горячих клавиш.
Русский перевод синтаксиса и параметров позволит  лучше разобраться и применять их. :IL_AutoIt_1:
В чем отличие новой версии 1.7b от 1.61  ? .
Что позволяет новый параметр : $HK_FLAG_POSTCALL ?

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

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Октябрь 10, 2009, 07:08:34
Отвечу завтра. Сейчас пойду спать.

:sleeping:
Название: Re: HotKey - Установка горячих клавиш
Отправлено: CreatoR от Октябрь 10, 2009, 07:13:09
gregaz [?] (http://autoit-script.ru/index.php/topic,296.msg2062.html#msg2062)
Цитировать
использую эти ф-ии для назначение  одной пользовательской функции для нескольких горячих клавиш.
Вообще то это можно делать и встроенной функцией ;)
Код: 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 [?] (http://autoit-script.ru/index.php/topic,296.msg2043.html#msg2043)
Цитировать
библиотека не поддерживает работу с более чем одной горячей клавишей одновременно.
А вот это кстати было бы плюсом (в качестве опции/параметра), мне часто нужно было задать хоткей и чтобы не блокировалась вызываемая функции для следующего хоткея. А так библиотека просто незаменима, +5 по рейтенгу :ok:, спасибо.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: gregaz от Октябрь 10, 2009, 07:38:52
Вообще то это можно делать и встроенной функцией
Да , оказывается , можно.
Значит эта библиотека для более серьезных задач.

P.S. Хотя ф-ия HotKeySet очень капризна к форме написания горячих клавиш.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: SECTOR от Октябрь 10, 2009, 11:52:25
О боже! Вот оно! То самое... С большими функциями и возможностями!  :laugh:


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

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Октябрь 10, 2009, 16:58:05
...мне часто нужно было задать хоткей и чтобы не блокировалась вызываемая функции для следующего хоткея.

Функции не будут блокироваться, здесь речь идет о другом. Например, мы назначили две горячие клавиши: F1 и F2. Нажимаем F1 и, не отпуская ее, нажимаем F2. В этом случае F2 не будет работать, так как F1 еще не отжата. Это можно протестировать с помощью второго примера (см. первый пост). Но если F1 отжата, то F2 будет работать не зависимо от того, завершилась обработка для F1 или нет (если только ты не выключил эту возможность с помощью флага $HK_FLAG_NOOVERLAPCALL). Таке поведение (одновременное нажатие нескольких клавиш) в основном может понадобиться в играх (шутерах). Кстати, количество одновременно нажатых клавиш также зависит от самой клавиатуры. Дешевые клавиатуры поддерживают от силы 2-3 клавиши, в то время как игровые клавиатуры (http://wiki.pcmag.ru/index.php?title=Игровая_клавиатура) могу поддерживать до 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:
(нажмите для показа/скрытия)
Название: Re: HotKey - Установка горячих клавиш
Отправлено: gregaz от Октябрь 10, 2009, 21:14:30
Введен флаг $HK_FLAG_POSTCALL. На этом различия для пользователя заканчиваются.
Ясно спасибо.

А зачем? Что должно передоваться в эту функцию? Можно написать так (но какой в этом смысл):
Да можно, но это требует введения дополнительной промежуточной ф-ии _HotKey
Название: Re: HotKey - Установка горячих клавиш
Отправлено: CreatoR от Октябрь 11, 2009, 00:40:41
Yashied [?] (http://autoit-script.ru/index.php/topic,296.msg2090.html#msg2090)
Цитировать
А зачем? Что должно передоваться в эту функцию?
Параметры:

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

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


очень было бы полезно.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Октябрь 11, 2009, 01:12:38
CreatoR, может я туплю конечно, но зачем это нужно? Что в этом полезного? Передавать в функцию глобальный параметр... Это эквивалентно простому объявлению переменной

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


и проверяй ее где угодно.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: CreatoR от Октябрь 11, 2009, 02:08:17
Yashied [?] (http://autoit-script.ru/index.php/topic,296.msg2137.html#msg2137)
Цитировать
Передавать в функцию глобальный параметр... Это эквивалентно простому объявлению переменной
А кто говорил о глобальной переменной? Как раз наоборот, это будет полезно для избежания использования таких переменных:

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


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

[?] (http://autoit-script.ru/index.php/topic,296.msg2043.html#msg2043)
Цитировать
Основные отличия от HotKeySet() (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm):
...
Назначение всего одной пользовательской функции для нескольких горячих клавиш.
Оно не отличается, в оригинале тоже можно задать одну функцию.

Цитировать
Для назначения горячих клавиш используется целочисленные значения, соответствующие таблице Virtual-Key Codes (http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx), а не их строковые "аббревиатуры".
Вот кстати, а было бы неплохо добавить поддержку и обычных строковых значении.

И ещё, как различать в одной функции какой хоткей был вызван? Сорри, я не внимателен.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Октябрь 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

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Dreadfulangel от Январь 11, 2010, 13:58:04
В AutoIt v3.3.2.0 эта UDF не работает, можно ли исправить UDF для совместимости с новой версией.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Январь 11, 2010, 14:23:13
В AutoIt v3.3.2.0 эта UDF не работает, можно ли исправить UDF для совместимости с новой версией.

Что именно не работает? У меня все отлично работает во всех версиях AutoIt.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Dreadfulangel от Январь 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().
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Крепыш от Апрель 11, 2010, 11:41:59
Но если F1 отжата, то F2 будет работать не зависимо от того, завершилась обработка для F1 или нет (если только ты не выключил эту возможность с помощью флага $HK_FLAG_NOOVERLAPCALL).

Так ведь не работает:

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

Global Const $VK_ESCAPE = 0x1B
Global Const $VK_F1 = 0x70
Global Const $VK_F2 = 0x71

; Assign "F12" with Message() and set extended function call
_HotKeyAssign($VK_F1, 'Message', $HK_FLAG_EXTENDEDCALL)
_HotKeyAssign($VK_F2, 'Message', $HK_FLAG_EXTENDEDCALL)

; Assign "CTRL-ESC" with Quit()
_HotKeyAssign(BitOR($CK_CONTROL, $VK_ESCAPE), 'Quit')

While 1
    Sleep(10)
WEnd

Func Message($iKey)
    MsgBox(0, 'Hot key Test Message', '(0x' & Hex($iKey, 4) & ') has been pressed!')
EndFunc   ;==>Message

Func Quit()
    Exit
EndFunc   ;==>Quit

Название: Re: HotKey - Установка горячих клавиш
Отправлено: CreatoR от Апрель 11, 2010, 13:17:33
Крепыш  [?]
Цитировать
Так ведь не работает
Это из за блокирующего MsgBox.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Крепыш от Апрель 14, 2010, 22:36:42
Как назначить одну горячую клавишу для двух приложений, чтобы выполнялось действие, когда активно одно из них?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Redline от Апрель 15, 2010, 09:19:43
Как назначить одну горячую клавишу для двух приложений, чтобы выполнялось действие, когда активно одно из них?
В функцию, запускаемую по нажатию горячей клавиши, добавить такой обработчик
Код: AutoIt [Выделить]
$state = WinGetState("Тест", "")
If BitAnd($state, 8) Then
    MsgBox(0, "Пример", "Окно программы активно")
Else
    MsgBox(0, "Пример", "Окно программы НЕ активно")
EndIf
 

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Крепыш от Апрель 15, 2010, 16:10:17
Нужно написать функцию, которая при многократном вызове горячей клавиши один раз выводила бы сообщение, типа "клавиша нажата столько-то раз".
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Fever от Апрель 15, 2010, 16:28:02
"клавиша нажата столько-то раз".

Код: AutoIt [Выделить]
HotKeySet('d', '_count')
$i = 1

While 1
    Sleep(100)
WEnd

func _count()
    MsgBox(64, '', 'Кнопка нажата ' & $i & ' раз')
    $i = $i + 1
EndFunc

простой вариант :whistle:
Название: Re: HotKey - Установка горячих клавиш
Отправлено: madmasles от Апрель 15, 2010, 17:39:12
Или так
Код: AutoIt [Выделить]
HotKeySet("{UP}", "UP")
HotKeySet("{DOWN}", "DOWN")
$i = 0
While 1
    Sleep(10)
WEnd
Func UP()
    Sleep(10)
    $i += 1
    Return $i
EndFunc   ;==>UP

Func DOWN()
    MsgBox(0, "", "С начала работы скрипта клавиша UP нажата " & $i & " раз", 3)
EndFunc   ;==>DOWN

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Крепыш от Апрель 15, 2010, 20:25:07
Fever
madmasles

Не, не так. Имеется ввиду при нажатии клавиши несколько раз подряд (с интервалом не более 200 мс) выводится сообщение. Затем счётчик обнуляется, и отсчёт ведётся по-новой.
Но с HotKeySet я и сам могу. Типа так:
Код: AutoIt [Выделить]
HotKeySet("{UP}", "UP")
$i = 0
While True
  Sleep(10)
WEnd
Func UP()
  $i += 1
  Sleep(200)
  If $i > 0 Then
    ConsoleWrite('Нажата клавиша UP '&$i&' раз'&@CRLF)
  EndIf
  $i = 0
EndFunc


Или вот (это, вроде, твой код, madmasles, с руборда):
Код: AutoIt [Выделить]
HotKeySet("{UP}", "UP")
$i = 0
While 1
    Sleep(10)
    If $i > 0 Then
        MsgBox(0, "", "Нажата клавиша UP " & $i & " раз", 3)
        $i = 0
    EndIf
WEnd
Func UP()
    Sleep(200) ;пауза между нажатиями.
    $i += 1
    Return $i
EndFunc   ;==>UP


Хотя второй вариант не подходит: сообщение должно выводиться в самой функции.

А вот с _HotKeyAssign не получается.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Апрель 15, 2010, 21:30:20
Тормозить функции прерывания, даже Sleep'ом, плохой стиль программирования. Касаемо _HotKeyAssign(), она работает совершенно на другом принципе, в сравнении с HotKeySet(), здесь используется Hook со всеми его преимуществами и недостатками. Например можно назначить совершенно любую горячую клавишу (CTRL+ALT+DEL, F12, WIN+... и т.д.) или назначить клавишу, даже, если она была назначена другим приложением, при этом ваша программа получит наивысший приоритет. И многое другое, что нельзя осуществить с помощью HotKeySet().

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

Global Const $VK_UP = 0x26

Global $Timer, $Count = 0, $Int = 0

_HotKeyAssign($VK_UP, 'UP')

While 1
    Sleep(10)
    If ($Count) And (TimerDiff($Timer) > 200) Then
        ConsoleWrite('Нажата клавиша UP ' & $Count & ' раз' & @CRLF)
        $Count = 0
    EndIf
WEnd

Func UP()
    $Timer = TimerInit()
    $Count += 1
EndFunc   ;==>UP

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Крепыш от Апрель 25, 2010, 15:22:49
В самой функции UP() вывод сообщения можно как-нить реализовать?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Redline от Май 18, 2010, 13:29:16
Нельзя ли добавить расширение для функции _HotKeyRelease, что бы была возможность удалять конкретный хоткей? Бывают ситуации с переназначение только одной горячей клавиши, и чтобы удалить старое ее сочетание нужно после _HotKeyRelease заново назначать _HotKeyAssign для всех сочетаний.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Май 18, 2010, 13:42:30
Нельзя ли добавить расширение для функции _HotKeyRelease, что бы была возможность удалять конкретный хоткей? Бывают ситуации с переназначение только одной горячей клавиши, и чтобы удалить старое ее сочетание нужно после _HotKeyRelease заново назначать _HotKeyAssign для всех сочетаний.

Код: AutoIt [Выделить]
_HotKeyAssign($iKey, "")


или просто

Код: AutoIt [Выделить]
_HotKeyAssign($iKey)


Освобождает ранее установленную горячую клавишу $iKey. В принципе это написано в описании функции в первом посте.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 06, 2010, 08:37:48
Yashied

Код: AutoIt [Выделить]
#include <HotKey.au3>
#include <vkConstants.au3>
;_HotKeyAssign(BitOR(0x0800, 0xA2), '_Stroka')
_HotKeyAssign(BitOR($CK_CONTROL, $CK_WIN), '_Stroka')

Почему это не работает? В Arum Switcher (http://www.arumswitcher.com/) Win+Ctrl работает.


И ещё, в примере HotKeyInput.au3 в функции _GUICtrlCreateHotKeyInput хотелось бы использовать просмотр предыдущих горячих клавиш. Например, просто вставить их туда как текст-муляж или как реальные, ну чтобы было видно текущие и выбрать иные.


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

Что может неправильно быть в такой строке
Код: AutoIt [Выделить]
For $i = 1 to 8
    If GUICtrlRead($HotkeyInput1) <> 'None' Then
    _HotKeyAssign('0x' & StringRight(Hex(_GUICtrlReadHotKeyInput(Eval('HotkeyInput' & $i))), 4), '_Mode'&$i)
        RegWrite("HKCU\Software\TextCorrection","Hotkey"&$i,"REG_SZ",GUICtrlRead(Eval('HotkeyInput' & $i)))
    EndIf
Next


Похоже ошибка, что это не числовая переменная
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 07, 2010, 12:48:46
Почему это не работает?

Цитата: Yashied
Вы можете использовать функцию BitOR() для объединения VK- и CK-значений. Код клавиши не может состоять только из одного(их) CK-значения. Так же, не допускается использование более одного VK-значения. Функция не делает различий между левыми и правыми вспомогательными клавишами. Например, нельзя назначить горячую клавишу с использованием только левой клавиши CTRL. Это так же будет работать и для правой клавиши. Ниже показаны примеры допустимых и недопустимых комбинаций.

...в примере HotKeyInput.au3 в функции _GUICtrlCreateHotKeyInput хотелось бы использовать просмотр предыдущих горячих клавиш. Например, просто вставить их туда как текст-муляж или как реальные, ну чтобы было видно текущие и выбрать иные.

Ничего не понял.

Что может неправильно быть в такой строке...

Код: AutoIt [Выделить]
$iKey = _GUICtrlReadHotKeyInput($CtrlID)
RegWrite('...', '...', 'REG_DWORD', $iKey)

Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 01:19:07
Yashied
С RegWrite всё должно работать, я до неё ещё не дошёл.

Разгадал загадку, #Include <HotKey.au3> забыл добавить, добавил только #Include <HotKeyInput.au3>.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 02:54:19
Давй все по порядку.


Вообщем в пределах твоего кода нужно делать так:

Код: AutoIt [Выделить]
For $i = 1 To 8
    $iKey = _GUICtrlReadHotKeyInput(Eval('HotkeyInput' & $i))
    MsgBox(0, "Сообщение", "0x" & Hex($iKey, 4))
    _HotKeyAssign($iKey, "_Mode" & $i)
    RegWrite("HKCU\Software\TextCorrection", "Hotkey" & $i, "REG_DWORD", $iKey)
Next

Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 05:23:07
Yashied
Вот теперь заново всё переписывать, я уже в шестнадцатеричном виде сделал в ini. Массивы попробовал, не работает, может цифры можно загнать в массив, а я уж и элементы gui начал в массив загонять, в общем возвращаю и переделываю... отпишу потом.

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

Ctrl стал залипать, в чём причина? В скрипте используется _SendEx("^{INS}")
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 09:28:49
В скрипте используется _SendEx("^{INS}")...

Зачем?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 09:49:43
Для выделения текста, копирования и вставки. В "Arum Switcher" используется тот же метод, так как если смотреть в расширенном буфере, то видно восстановление буфера после операций вставки исправления текста.


(нажмите для показа/скрытия)
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 11:27:27
Если честно, то я мало понимаю что-либо в твоем коде, и Arum Switcher'а у меня нет. Я пользуюсь HotKey.au3 и HotKeyInput.au3 каждый день и уже не один год (XP, Vista и 7), и пока не замечал каких-либо "залипаний" и дугих необъяснимых глюков. Я уверен на 99%, что это связано с неправильным использованием этих библиотек. Приведи мне простой (небольшой) пример, где происходят залипания, я посмотрю. А пока можешь попробывать следующее:

Код: AutoIt [Выделить]
Func _SendEx($sSend_Data)
    _HotKeyDisable(BitOR($HK_FLAG_NOERROR, $HK_FLAG_NOUNHOOK))
    Local $hUser32DllOpen = DllOpen("User32.dll")
    While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
        Sleep(10)
    WEnd
    Send($sSend_Data)
    DllClose($hUser32DllOpen)
    _HotKeyEnable()
EndFunc   ;==>_SendEx

Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 12:38:08
Yashied
Так может не было случая комбинирования? Сейчас вставил мессаги в вызываемые функции и не залипает, проверю ещё без _SendEx, хотя врят ли, потом попробую урезанный пример сделать. Предложенный тобой код проверил, также.

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

Кстати, отжимать приходится оба Ctrl.
Частично проблема решилась такой комбинацией, но работает через раз.

Код: AutoIt [Выделить]
_SendEx("{LCTRL}")
_SendEx("{RCTRL}")



Вот пример с имитацией залипания.

(нажмите для показа/скрытия)
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 13:59:34
:blink:

Я не понял где у тебя залипания. У меня MsgBox(), не появляется до тех пор, пока не будет отжата клавиша Ctrl. Но так и должно быть, так как у тебя стоит цикл:

Код: AutoIt [Выделить]
While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
    Sleep(10)
WEnd

Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 14:35:26
Yashied
Когда я не использовал HotKey.au3 у меня же такого эффекта не было. То есть для отжатия хватало Sleep(130), а теперь я руками отжимаю.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 14:46:16
Если в твоем примере заменить _HotKeyAssign() на HotKeySet(), то будет все тоже самое.



Добавлено: Июнь 08, 2010, 15:06:42
Не проще ли сделать так, у меня все прекрасно работает:

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

Global Const $VK_ESCAPE = 0x1B
Global Const $VK_F12 = 0x7B

_HotKeyAssign(BitOR($CK_CONTROL, $VK_F12), 'Message')
_HotKeyAssign(BitOR($CK_CONTROL, $VK_ESCAPE), 'Quit')

While 1
    Sleep(1000)
WEnd

Func Message()
    ClipPut('')
    Send('^+{LEFT}')
    Sleep(30)
    Send('^{INS}')
    Sleep(30)
    MsgBox(0, '', ClipGet())
EndFunc   ;==>Message

Func Quit()
    Exit
EndFunc   ;==>Quit


Зачем вообще нужна _SendEx()?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 15:21:52
Yashied
А у меня так не работает. Мессага вылетает, но при прокрутке колёсика мыши шрифт изменяется, значит контрол зажат.

Код: AutoIt [Выделить]
Зачем вообще нужна _SendEx()?

Она каждые 10 милисекунд проверяет не нажаты ли клавиши Ctrl, Shift, Alt. И не продолжит пока клавиши не будут отжаты. Вот моя бывшая проблема (http://autoit-script.ru/index.php?topic=1863.0)
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 15:39:28
Добавь флаг $HK_FLAG_WAIT.

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

Global Const $VK_ESCAPE = 0x1B
Global Const $VK_F12 = 0x7B

_HotKeyAssign(BitOR($CK_CONTROL, $VK_F12), 'Message', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_WAIT))
_HotKeyAssign(BitOR($CK_CONTROL, $VK_ESCAPE), 'Quit')

While 1
    Sleep(1000)
WEnd

Func Message()
    ClipPut('')
    Send('^+{LEFT}')
    Sleep(30)
    Send('^{INS}')
    Sleep(30)
    ConsoleWrite(ClipGet() & @CR)
EndFunc   ;==>Message

Func Quit()
    Exit
EndFunc   ;==>Quit

Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 16:25:27
Не помогает. Когда тестировал TextCorrection все флаги перепробовал.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 16:49:39
Не помогает. Когда тестировал TextCorrection все флаги перепробовал.

У меня при любом раскладе и при любых скоростях нажатия никаких залипаний нет. Либо это проблема есть только у тебя, либо ты что-то не договариваешь... В последнем примере никаких залипаний быть не должно. Проверь еще раз. Без флага $HK_FLAG_WAIT при достаточно быстром отпускании клавиши да, наблюдались залипания, но с этим флагом залипаний я не обнаружил, сколько не старался.

И при чем здесь TextCorrection, мы сейчас решаем проблему на примере простого кода. Запусти последний пример еще раз.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 08, 2010, 17:09:01
Yashied
Цитировать
либо ты что-то не договариваешь...
с чего бы?


Yashied
Цитировать
Проверь еще раз.
Проверил ещё раз, тоже самое, хотя для меня один раз критерий. Выделение происходит и вместо прокрутки работает размер шрифта.

По той ссылке, что я приводил, у beve тоже проблем не было, хотя у меня была.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июнь 08, 2010, 22:47:03
AZJIO, извини, но я здесь не помощник, так как не могу воспроизвести данную проблему ни на одном компьютере, как бы я не старался. Пробывал на трех разных машинах, на XP и 7... Все OK, при любом раскладе.

:-\
Название: Re: HotKey - Установка горячих клавиш
Отправлено: AZJIO от Июнь 09, 2010, 11:03:49
Yashied
Проверил в LiveCD, работает всё чётко... TextCorrection работает стабильно.

__________________________

Пришлось версию 0.5 делать под LiveCD, соответственно при более тщательном тесте залипания были один раз на каждые 4-5 использования. Изменения задержек нажатия и паузы (SendKeyDownDelay, SendKeyDelay) не помогали. А когда добавил комбинацию

_SendEx("{LCTRL}")
_SendEx("{RCTRL}")

то не одного глючного вызова.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: WSWR от Ноябрь 20, 2010, 15:44:38
А перехват клавиш мыши - скан-коды 0x04, 0x05, 0x06 с помощью HotKey возможен?

Так не работает:

Код: AutoIt [Выделить]
#Include <HotKey.au3>
Global Const $VK_1 = 0x04
_HotKeyAssign($VK_1, 'Calc', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))
While 1
    Sleep(10)
WEnd
Func Calc($iKey)
 Run('Calc.exe')
EndFunc

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Ноябрь 20, 2010, 15:45:53
А перехват клавиш мыши - скан-коды 0x04, 0x05, 0x06 с помощью HotKey возможен?

Нет.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: WSWR от Ноябрь 20, 2010, 16:03:47
Нет.
Понятно :(
Название: Re: HotKey - Установка горячих клавиш
Отправлено: prokazzza от Февраль 17, 2011, 17:27:38
Подскажите как заблочить горячие кнопки к примеру Ctrl+Shift+Esc, чет не разберусь как должен выглядеть скрипт (((
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Февраль 17, 2011, 17:41:54
Подскажите как заблочить горячие кнопки к примеру Ctrl+Shift+Esc, чет не разберусь как должен выглядеть скрипт (((

CTRL+SHIFT+ESC в Windows 7 - это аналог CTRL+ALT+DEL в XP, и заблокировать эту комбинацию вам не даст Windows. А выглядеть это должно так:

Код: AutoIt [Выделить]
_HotKeyAssign(BitOR($CK_CONTROL, $CK_SHIFT, $VK_ESCAPE), 'MyFunc')

Название: Re: HotKey - Установка горячих клавиш
Отправлено: prokazzza от Февраль 17, 2011, 19:23:49
Помогите дописать скрипт, чтобы при нажатии на левый ALT+ левый SHIFT + TAB вызывался диспетчер задач

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

Global Const $VK_MENU = 0x12
Global Const $VK_SHIFT = 0x10
Global Const $VK_TAB = 0x1B

_HotKeyAssign(BitOR($VK_MENU, $VK_SHIFT, $VK_TAB), '')


Название: Re: HotKey - Установка горячих клавиш
Отправлено: prokazzza от Февраль 17, 2011, 20:14:56
Чет я нефига не понял, сделал вот такой скрипт

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

Global Const $VK_MENU = 0x12
Global Const $VK_SHIFT = 0x10
Global Const $VK_TAB = 0x1B

_HotKeyAssign(BitOR($VK_MENU, $VK_SHIFT, $VK_TAB), "_task")

Func _task()
run(@SystemDir & "\taskmgr.exe")
EndFunc


Скрипт отрабатывает и закрывается, никаких изменений в системе не замечаю (((( Help плиз!!!
Название: Re: HotKey - Установка горячих клавиш
Отправлено: CreatoR от Февраль 17, 2011, 20:25:26
prokazzza  [?]
Цитировать
Скрипт отрабатывает и закрывается
Надо же понимать, что скрипт ничего не удерживает, в нём нету цикла:

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

Global Const $VK_MENU = 0x12
Global Const $VK_SHIFT = 0x10
Global Const $VK_TAB = 0x1B

_HotKeyAssign(BitOR($VK_MENU, $VK_SHIFT, $VK_TAB), "_task")

While 1
    Sleep(10)
WEnd

Func _task()
    Run(@SystemDir & "\taskmgr.exe")
EndFunc


В таком варианте он будет работать вечно, для завершения нужна другая горячая клавиша с функцией выхода.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Февраль 18, 2011, 00:26:13
Одно замечание.

_HotKeyAssign(BitOR($CK_ALT, $CK_SHIFT, $VK_TAB), "_task")

Функция не воспринимает VK-константы для командных клавиш (CTRL, ALT, SHIFT и WIN).
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Февраль 20, 2011, 03:49:58
Обновил библиотеку до версии 1.62. Исправлен досадный баг, заключающийся в прекращении работы установленных горячих клавиш после выхода из экрана "Logon UI" (это то, что появляется при нажатии CTRL+ALT+DEL в Windows Vista/7) и в некоторых случаях после сообщений UAC. Несмотря на то, что в Windows XP эта ошибка не проявляется, я все же рекомендую всем использовать именно эту версию, как более стабильную.

Если нет возможности использовать новую версию этой библиотеки, то работоспособность горячих клавиш можно вернуть, повторно нажав и отпустив клавиши CTRL и ALT.

:)
Название: Re: HotKey - Установка горячих клавиш
Отправлено: wobl от Апрель 11, 2011, 19:44:11
Люди помогите я нуб тот еще,пытаюсь установить горячие клавиши, при помоши привиденных выше примеров, выдает ошибку ERROR: can't open include file <HotKey.au3> что делать?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: zlo-kazan от Апрель 11, 2011, 20:02:55
Скачай HotKey.au3 и помести его в C:\Program Files\AutoIt 3\Include.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: wobl от Апрель 11, 2011, 21:11:19
пробывал тот же результат
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Kaster от Апрель 11, 2011, 22:05:12
wobl  [?]
Цитировать
пробывал ...
http://forum.script-coding.com/viewtopic.php?pid=46555#p46555

Цитировать
тот же результат
не может быть
Название: Re: HotKey - Установка горячих клавиш
Отправлено: madmasles от Апрель 11, 2011, 22:37:10
OffTopicKaster  [?]
Цитировать
http://forum.script-coding.com/viewtopic.php?pid=46555#p46555
+1   ;D
Название: Re: HotKey - Установка горячих клавиш
Отправлено: wobl от Апрель 12, 2011, 20:48:09
Спасибо за орфографию.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: wobl от Апрель 12, 2011, 21:53:00
Спасибо всем, не получалось из-за того, autoit установил до того как нашел этот сайт, ошибка была в том что при установке не указал«Select a default option for *.au3 files.»
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Medved от Январь 05, 2012, 17:37:08
HotKey UDF у меня на одном хоткее дает странный глюк -- отпадает весь ввод с клавы, пока снова на хоткей не нажмешь. Связано с функций WinActivate, которая запускается в теле основного цикла программы по изменению флага обработчиком хоткея. На встроенной функции все хорошо.

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

Нажимаем на любом окне паузу, немного ждем и повторяем нажатие -- клава отпадает. Нажимаем 3 раз и возвращается. С встроенной функцией такого не наблюдается. Как видим, глючит место, которое к прерываниям вообще отношения не имеет :whistle:
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Январь 08, 2012, 17:33:17
Как не пытался, так и не смог воспроизвести указанную проблему. Какая у вас версия OC и AutoIt? И еще, может все же проблема не в WinActivate(), а в ControlSend(), которая в свою очередь генерирует низкоуровневое прирывание.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Dimmak от Апрель 08, 2012, 04:11:36
Код: AutoIt [Выделить]
#Include <HotKey.au3>
#Include <vkConstants.au3>

HotKeySet( '+1', '_set' ) ; активирует горячую клавишу
HotKeySet( '+2', '_release' ) ; деактивирует


Func _set()
    _HotKeyAssign(BitOR($CK_WIN, $VK_1), '_func')
EndFunc

Func _release()
    _HotKeyAssign(BitOR($CK_WIN, $VK_1) )
EndFunc


Func _func()

    _release() ; теоретически должна произойти деактивация, но нет...
        ShellExecute('C:\')

EndFunc

While 1
    Sleep(10)
WEnd
 


Не могу разобраться...  :stars: Помогите пожалуйста  ;)
Почему при вызове _func() не происходит деактивация( Win+1 )?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Апрель 08, 2012, 09:15:58
Это защита от вызова функций внутри callback'а. Отключить ее можно так:

Код: AutoIt [Выделить]
_HotKey_Assign(BitOR($CK_WIN, $VK_1), '', $HK_FLAG_NOERROR)

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Mancoffee от Июнь 20, 2012, 23:35:39
Можно ли определить какой программой занята горячая клавиша? Занята ли вообще узнал с помощью ActiveHotKey. А чем неизвестно
Название: Re: HotKey - Установка горячих клавиш
Отправлено: zarius от Февраль 05, 2013, 16:56:30
Проблема с использованием HotKey.au3: скрипт запускается, хоткеи отрабатываются нормально первые несколько раз, затем пару раз - отрабатываются через раз, затем вообще не отрабатываются? В чем может быть проблема?

Система: Win8Prof64  AutoIT: 3.3.8.1

Код: AutoIt [Выделить]
$script_ini_file = @ScriptDir & "\file.ini"

; прочитаем из файла значения горячих клавиш и назначим их в системе
$hk1 = IniRead($sчcript_ini_file, "HotKeys", "Proc1", BitOR($CK_CONTROL, $VK_RETURN))
$hk2 = IniRead($script_ini_file, "HotKeys", "Proc2", BitOR($CK_SHIFT, $VK_F1))
$hk3 = IniRead($script_ini_file, "HotKeys", "Proc3", BitOR($CK_SHIFT, $VK_F2))

_HotKeyAssign($hk1, 'Proc1', -1)
_HotKeyAssign($hk2, 'Proc2', -1)
_HotKeyAssign($hk3, 'Proc3', -1)

;цикл ожидания
While 1
    Sleep(10)
WEnd

 


На стандартной функции HotKeySet все отрабатывается нормально...
Название: Re: HotKey - Установка горячих клавиш
Отправлено: ABSOLUTE от Май 08, 2014, 08:23:35
Код: AutoIt [Выделить]
...
GUICreate("", 451, 224, 27, 82, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $StartMenu)
GuiCtrlCreateTab(0,0,401,224,$TCS_BUTTONS + $TCS_MULTILINE + $TCS_RAGGEDRIGHT + $TCS_RIGHTJUSTIFY + $TCS_FLATBUTTONS, 0x00000020)
GUICtrlCreateTabItem("[1]")
$t0hk1 = _GUICtrlCreateHotKeyInput(0,20,30,75,15,0,0x00000020)
...
...
; При нажатии на кнопку
$hotkey1 = _GUICtrlReadHotKeyInput($t0hk1)
_HotKeyAssign($hotkey1,'t0hk1')
...
...
; начало функции
 Func t0hk1()
   Send("Проверка скрипта")
   MsgBox(0,0,"123123123")
 EndFunc



Устанавливаю гор. клавишу в Input, жму кнопку: хоткей должен, по факту, приняться и выполнять функцию t0hk1, однако происходит это странным образом. В данном случае, выводит на экран только MsgBox, ничего не пишет. Если добавить к коду ещё:

Код: AutoIt [Выделить]
   Opt("SendKeyDelay", 40)
   Opt("SendKeyDownDelay",40)


Начинает писать подобное: "а скрипта" или "рипта".
И работает клавиша не постоянно: либо с залипанием, либо через раз. С чем может быть связано?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: madmasles от Май 08, 2014, 09:28:37
ABSOLUTE,
ПредупреждениеЗа нарушение правил форума (пункт В.11 (http://autoit-script.ru/index.php?action=rules#c.11)):
Цитировать
Любые отрывки AutoIt кода необходимо заключать в тег [autoit] (http://autoit-script.ru/Themes/default/images/bbc/autoit.gif) (подробнее (http://autoit-script.ru/index.php?topic=2721.0#post_autoit)), а обычный код соответственно в тег [code] (http://autoit-script.ru/Themes/default/images/bbc/code.gif) (подробнее (http://autoit-script.ru/index.php?topic=2721.0#post_code)). Также большие выдержки текста помещайте под тег [spoiler] (http://autoit-script.ru/Themes/default/images/bbc/spoiler.gif) (подробнее (http://autoit-script.ru/index.php?topic=2721.0#post_spoiler)), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: ikif от Сентябрь 04, 2014, 17:23:48
День добрый,
Я использую библиотеку HotKey.au3 и функцию _HotKey_Assign...
В Windows 7 and 8 работает нормально , а вот в Windows 8.1 не реагирует на ShortCutы и вылетает с ошибкой.
Продемострировать ошибку не могу , так как это не на моём компе 8.1.

Есть что с этим делать ? Или нет поддержки на 8.1 ?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: oesoes от Сентябрь 04, 2014, 17:35:00
Ну попросите того, на чьей машине исполняется скрипт привести скрин ошибки, в чем проблема?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: alex33 от Сентябрь 06, 2014, 20:05:20
Или на виртуалку поставить 8.1 и там запустить.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: winix от Июль 07, 2015, 08:08:29
Хорошо бы поправить в шапке что _HotKeyAssign не существует и надо писать _HotKey_Assign .

Теоретически если нажать f12 то должно быть нажато f11 и я увижу полноэкранный редактор, но ничего не проиходит, также как и с Send ("123") в блокноте.
Если я ставлю MsgBox то он работает.
Код: AutoIt [Выделить]
#include <Misc.au3>
#Include <HotKey.au3>

Global Const $VK_F12 = 0x7B

_HotKey_Assign($VK_F12, 'Message', BitOR($HK_FLAG_NOBLOCKHOTKEY,$HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))

While 1
    Sleep(10)
WEnd

Func Message($iKey)
Send ("{F11}")
 ;MsgBox(0, 'Hot key Test Message', 'F12 (0x' & Hex($iKey, 4) & ') has been pressed!')

EndFunc

Что сделать чтоб тут заработал Send ?

Задача проста, я нажимаю клавишу, скрипт активирует esc для вызова меню и тыкает в нужно место экрана. HotKeySet в проге не работает.


Добавлено: Июль 08, 2015, 01:36:15
Документация почти никакая, сделал в 2 скрипта.
Мало того что нужно вырубать HotKey так ещё кнопку надо писать в апострофах , хотя со встроенной HotKeySet всегда работали кавычки

Код: AutoIt [Выделить]
#include <Misc.au3>
#include <HotKey.au3>
#include <vkConstants.au3>

Dim $size[2] = [1280,1024]
AutoItSetOption("MouseCoordMode", 2)
$sProcName3 = "pzrun.exe"
If Not ProcessExists($sProcName3) Then Run($sProcName3)
_HotKey_Assign($VK_F9, 'kill0', BitOR($HK_FLAG_NOBLOCKHOTKEY,$HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))
While 1
    Sleep(200)
 WEnd

Func kill0($iKey)
_HotKey_Disable($iKey)
;#cs
Send ('{ESC}')
;MouseClick("left",$size[0]/2,$size[1]/2-142,1,3)
MouseMove($size[0]/2,$size[1]/2-142,0)
Sleep(50)
MouseDown("left")
Sleep(20)
MouseUp("left")
;#ce
Exit
EndFunc
 


pzrun перезапускатор
Код: AutoIt [Выделить]
$sProcName2 = "pzavt.exe"
Do
   If Not ProcessExists($sProcName2) Then Run($sProcName2)
   Sleep(1000)
Until 0

Название: Re: HotKey - Установка горячих клавиш
Отправлено: Yashied от Июль 09, 2015, 07:29:21
winix, если для вас слишком сложна документация, и вы не в состоянии ее понять, то просто не используйте эту библиотеку. UDF писалась совершенно для других целей, отсюда и непонятки.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: winix от Июль 28, 2015, 08:07:23
Никогда не мог понять этот кусок посреди кода, надеюсь его и не будет в рабочей проге.
While 1
Sleep()
WEnd
Вот както так получилось.
Код: AutoIt [Выделить]
_HotKey_Assign($VK_F9, 'kill0', BitOR($HK_FLAG_NOBLOCKHOTKEY,$HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL),$Client)
While 1
_HotKey_Enable()
Sleep(200)
WEnd

 Func kill0($iKey)
_HotKey_Disable($iKey)
Send ('{ESC}')
EndFunc


Невозможно сделать _HotKey_Enable() в конце функции, это нужно делать отдельно или вообще несколько раз чтоб попасть в тайминг
Название: Re: HotKey - Установка горячих клавиш
Отправлено: madmasles от Июль 28, 2015, 11:47:23
winix,
ПредупреждениеЗа нарушение правил форума (пункт В.11 (http://autoit-script.ru/index.php?action=rules#c.11)):
Цитировать
Любые отрывки AutoIt кода необходимо заключать в тег [autoit] (http://autoit-script.ru/Themes/ARC_Curve/images/bbc/autoit.gif) (подробнее (http://autoit-script.ru/index.php?topic=2721.0#post_autoit)), а обычный код соответственно в тег [code] (http://autoit-script.ru/Themes/ARC_Curve/images/bbc/code.gif) (подробнее (http://autoit-script.ru/index.php?topic=2721.0#post_code)). Также большие выдержки текста помещайте под тег [spoiler] (http://autoit-script.ru/Themes/ARC_Curve/images/bbc/spoiler.gif) (подробнее (http://autoit-script.ru/index.php?topic=2721.0#post_spoiler)), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.


Добавлено: Июль 28, 2015, 11:48:36
winix  [?]
Цитировать
Никогда не мог понять этот кусок посреди кода
Какое отношение Ваш вопрос имеет к текущей теме?
Название: Re: HotKey - Установка горячих клавиш
Отправлено: endpoints от Август 16, 2016, 12:03:13
Подскажите,пожалуйста, как исправить  данную ошибку  код скрипта  из Примера 1

>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\d\config_windows\autoit\hotk.au3"   
"C:\d\config_windows\autoit\hotk.au3" (7) : ==> Unknown function name.:
_HotKeyAssign($VK_F12, 'Message', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))
^ ERROR
Название: Re: HotKey - Установка горячих клавиш
Отправлено: Garrett от Август 16, 2016, 17:20:46
endpoints
Нет функции _HotKeyAssign, есть  функция _HotKey_Assign.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: endpoints от Октябрь 30, 2016, 07:27:27
перестает срабатывать хоткеи  если  активное окно- vmware player.
Подскажите,пожалуйста, как это лечится?
Название: HotKey Установка горячих клавиш
Отправлено: MissEnlila от Декабрь 04, 2016, 16:30:55
Можно эти комбинации клавиш просто выключить в Система -> Параметры -> Комбинации клавиш клавиатуры. А вот с комбинациями типа CTRLSHIFT и ALTSHIFT проблема, когда они совпадают с комбинацией для переключения раскладок клавиатуры.
Название: Re: HotKey - Установка горячих клавиш
Отправлено: endpoints от Январь 09, 2017, 11:37:40
в win 7 такого нету
Название: Re: HotKey - Установка горячих клавиш
Отправлено: neumexa от Февраль 22, 2017, 06:53:51
А как сделать, что бы одни и те же горячие клавиши, при нажатие выполняли один раз одно действие, а при повторном нажатие один раз другое действие?
Пример:
Код: AutoIt [Выделить]
#Include <HotKey.au3>
Global Const $VK_D = 0x44
_HotKey_Assign(BitOR($CK_WIN, $VK_D), 'XXX_Launch')
$hForm1 = GUICreate('', 100, 100, -1, -1, $WS_POPUP)
GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = -3

Func XXX_Launch()

Local $oShell = ObjCreate("shell.application") ;  один раз нажато
$oShell.MinimizeAll

Local $oShell = ObjCreate("shell.application") ;  следующий раз нажато
$oShell.UndoMinimizeAll

EndFunc

Название: Re: HotKey - Установка горячих клавиш
Отправлено: ra4o от Февраль 22, 2017, 09:23:20
Цитировать
при нажатие выполняли один раз одно действие, а при повторном нажатие один раз другое действие?
Ввести флаг, который при каждом выполнении функции будет менять своё значение на противоположное и далее в зависимости от состояния флага выполнять то или иное действие , например так :
(нажмите для показа/скрытия)