Что нового

HotKey - Установка горячих клавиш

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
AutoIt: 3.3.0.0
Версия: 1.62

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

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

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

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

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

Синтаксис и параметры:
Синтаксис вызова:

Код:
_HotKeyAssign ( $iKey [, $sFunction [, $iFlags [, $sTitle]]] )


Параметры:

$iKey

16-битный код горячей клавиши, который состоит из младшего (VK - Virtual Key) и старшего (CK - Command Key) байтов. Значения битов для этих байтов показаны ниже.

0-7Определяет код горячей клавиши из таблицы Virtual-Key Codes. В файле vkConstants.au3 находятся значения кодов для всех этих клавиш. Коды клавиш мыши (0x01 - 0x06) и вспомогательных клавиш (0x11, 0x12 и т.д) не поддерживаются.
8Задает клавишу SHIFT.
9Задает клавишу CTRL.
10Задает клавишу ALT.
11Задает клавишу WIN.
12-15Не используются и должны быть установлены в нулевое значение.

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

Допустимые комбинации:

Код:
; SHIFT+F12
BitOR($CK_SHIFT, $VK_F12)
; SHIFT+A
BitOR($CK_SHIFT, $VK_A)
; CTRL+ALT+TAB
BitOR($CK_CONTROL, $CK_ALT, $VK_TAB)

Недопустимые комбинации:

Код:
; SHIFT+WIN
BitOR($CK_SHIFT, $CK_WIN)
; CTRL+Q+W
BitOR($CK_CONTROL, $VK_Q, $VK_W)

$sFunction (Опционально)

Название функции, которая будет вызвана при нажатии горячей клавиши $iKey. Если этот параметра равен нулю (по умолчанию), то горячая клавиша будет удалена из списка. Если в списке больше нет установленных горячих клавиш, то хук автоматически будет удален из цепочки хуков (для предотвращения этого используйте флаг $HK_FLAG_NOUNHOOK). Указанная функция должна иметь следующий заголовок:

Код:
Func _MyFunc()

или (в зависимости от флага $HK_FLAG_EXTENDEDCALL)

Код:
Func _MyFunc($iKey)

Не пытайтесь вызывать _HotKeyAssign(), _HotKeyEnable(), _HotKeyDisable() или _HotKeyRelease() из этой функции, это не является хорошей идеей. В любом случае это не будет работать, перечисленные выше функции будут возвращать ошибку и флаг @extended будет установлен в (-1). Тем не менее этого можно избежать (см. $HK_FLAG_NOERROR).

$iFlags (Опционально)

Управляющие флаги. Этот параметр может содержать одно или несколько из нижеперечисленных значений.

$HK_FLAG_NOBLOCKHOTKEYПредотвращает блокировку горячей клавиши для других приложений, стоящих ниже в цепочке хуков. Например, если необходимо зарегистрировать сам факт нажатия горячей клавиши (aka шпионим), но оставить возможность использовать эту клавишу другим приложениям. Таким образом, горячая клавиша будет работать в системе так, как и было до ее установки.
$HK_FLAG_NOUNHOOKПредотвращает удаление хука из цепочки хуков. Это может понадобиться, когда необходимо сохранить "приоритет" в цепочке хуков. Например, два приложения установили для себя одну и ту же горячую клавишу. В том случае, если первое приложение удалит горячую клавишу, а затем ее установит снова, оно автоматически получит приоритет над этой горячей клавишей, а второе приложение будет лишено возможности использовать указанную клавишу. Использование этого флага не допускает таких рокировок. Используется только при удалении горячей клавиши.
$HK_FLAG_NOOVERLAPCALLПредотвращает вызов пользовательской функции, если обработка предыдущего вызова (не обязательно для этой же горячей клавиши) не была завершена. Может понадобиться для синхронизации работы внутри программы. В основном используется для функций, которые приостанавливают работу основного цикла. Например, пользовательская функция использует функцию MsgBox() или создает свой собственный графический интерфейс.
$HK_FLAG_NOREPEATПредотвращает повторный вызов горячей клавиши, в случае ее удержания. Если этот флаг установлен, то функция будет вызвана только один раз при каждом нажатии горячей клавиши. Может понадобиться, когда горячая клавиша используется, например, для увеличени или уменьшения громкости звука в соответствующих программах.
$HK_FLAG_NOERRORПредотвращает возвращение ошибки, в случае, если из пользовательской функции вызывается любая функция (_HotKeyAssign(), _HotKeyEnable(), _HotKeyDisable() или _HotKeyRelease()) из этой библиотеки. Без этого флага все вышеперечисленные функции будут возвращать ошибку и устанавливать @extended в (-1). Этот флаг нужно использовать с осторожностью, так как неправильное удаление или выключение горячей клавиши непосредственно из ее функции обработки может вызвать сбои в программе или ее полное зависание.
$HK_FLAG_EXTENDEDCALLПередает в пользовательскую функцию 16-битный код нажатой горячей клавиши (аналогичный параметру $iKey). Это может понадобиться для определения нажатой клавиши, в случае, когда одна и та же функция была назначена для нескольких горячих клавиш. Если установлен этот флаг, то заголовок функции должен иметь следующий вид:

Func _MyFunc($iKey)

$HK_FLAG_WAITОстанавливает выполнение программы до тех пор, пока выполнение пользовательской функции не будет завершено. Если используется этот флаг, то $HK_FLAG_NOOVERLAPCALL не имеет никакого смысла и будет игнорирован. Применяется в основном для совместимости с программами, написанными с использованием более ранних версий (1.5 и ниже) HotKey библиотек. В большинстве случаев этот флаг не нужен.
$HK_FLAG_DEFAULTКомбинация $HK_FLAG_NOOVERLAPCALL и $HK_FLAG_NOREPEAT флагов. Используется по умолчанию или в случае, когда значение параметра $iFlags равно (-1).

$sTitle (Опционально)

Название окна, для которого необходимо установить горячую клавишу. Этот параметр аналогичен идентичному параметру для WinActive() функции. Если $sTitle равен нулю (по умолчанию), то указанная горячая клавиша будет работать для всех окон в системе.

Пример 1:
Код:
#Include <HotKey.au3>

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

; Assign "F12" with Message() and set extended function call
_HotKeyAssign($VK_F12, 'Message', BitOR($HK_FLAG_DEFAULT, $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', 'F12 (0x' & Hex($iKey, 4) & ') has been pressed!')
EndFunc   ;==>Message

Func Quit()
	Exit
EndFunc   ;==>Quit

Пример 2:
Код:
#Include <HotKey.au3>

Global Const $VK_OEM_PLUS = 0xBB
Global Const $VK_OEM_MINUS = 0xBD

Global $Form, $Label
Global $i = 0

$Form = GUICreate('MyGUI', 200, 200)
$Label = GUICtrlCreateLabel($i, 20, 72, 160, 52, 0x01)
GUICtrlSetFont(-1, 32, 400, 0, 'Tahoma')
GUISetState()

; Assign "CTRL-(+)" with MyFunc1() and "CTRL-(-)" with MyFunc2() for created window only
_HotKeyAssign(BitOR($CK_CONTROL, $VK_OEM_PLUS), 'MyFunc1', 0, $Form)
_HotKeyAssign(BitOR($CK_CONTROL, $VK_OEM_MINUS), 'MyFunc2', 0, $Form)

Do
Until GUIGetMsg() = -3

Func MyFunc1()
	$i += 1
	GUICtrlSetData($Label, $i)
EndFunc   ;==>MyFunc1

Func MyFunc2()
	$i -= 1
	GUICtrlSetData($Label, $i)
EndFunc   ;==>MyFunc2

Пример 3:
Код:
#Include <GUIConstants.au3>
#Include <HotKey.au3>

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

; Assign "F12" with Form()
_HotKeyAssign($VK_F12, 'Form')

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

While 1
	Sleep(10)
WEnd

Func Form()

	Local $Form, $Button, $Msg

	$Form = GUICreate('MyGUI', 350, 350, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
	$Button = GUICtrlCreateButton('Exit', 140, 315, 70, 23)
	GUICtrlSetState(-1, BitOR($GUI_DEFBUTTON, $GUI_FOCUS))
	GUISetState(@SW_SHOW, $Form)

	While 1
		Switch GUIGetMsg()
			Case $Button, $GUI_EVENT_CLOSE
				ExitLoop
		EndSwitch
	WEnd

	GUIDelete($Form)
EndFunc   ;==>Form

Func Quit()
	Exit
EndFunc   ;==>Quit

Источник: 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.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Yashied,
Наконец-то на форуме появился продукт с более подробным русскоязычным описанием.
Хорошая работа и отличное оформление .Давно использую эти ф-ии для назначение одной пользовательской функции для нескольких горячих клавиш.
Русский перевод синтаксиса и параметров позволит лучше разобраться и применять их. :IL_AutoIt_1:
В чем отличие новой версии 1.7b от 1.61 ? .
Что позволяет новый параметр : $HK_FLAG_POSTCALL ?

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Отвечу завтра. Сейчас пойду спать.

:sleeping:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
gregaz [?]
использую эти ф-ии для назначение одной пользовательской функции для нескольких горячих клавиш.
Вообще то это можно делать и встроенной функцией ;)
Код:
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'а кажется...
Добавлено:
Сообщение автоматически объединено:

Yashied [?]
библиотека не поддерживает работу с более чем одной горячей клавишей одновременно.
А вот это кстати было бы плюсом (в качестве опции/параметра), мне часто нужно было задать хоткей и чтобы не блокировалась вызываемая функции для следующего хоткея. А так библиотека просто незаменима, +5 по рейтенгу :ok:, спасибо.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
CreatoR сказал(а):
Вообще то это можно делать и встроенной функцией
Да , оказывается , можно.
Значит эта библиотека для более серьезных задач.

P.S. Хотя ф-ия HotKeySet очень капризна к форме написания горячих клавиш.
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
О боже! Вот оно! То самое... С большими функциями и возможностями! :laugh:


Спасибо огромное! :IL_AutoIt_1:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
...мне часто нужно было задать хоткей и чтобы не блокировалась вызываемая функции для следующего хоткея.

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

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

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

Код:
Func _HotKey()
	_MyFunc($Param1, $Param2, $Param3, $Param4)
EndFunc   ;==>_HotKey

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


gregaz сказал(а):
В чем отличие новой версии 1.7b от 1.61?

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

Описание для $HK_FLAG_POSTCALL:
Вызывает пользовательскую функцию при отжатии горячей клавиши. Если установлен этот флаг, то функция будет вызвана в тот момент, когда будет отжата (отпущена) горячая клавиша. Работает только совместно с $HK_FLAG_EXTENDEDCALL флагом. Когда горячая клавиша нажимается, в функцию передается положительное значение 16-битного кода клавиши ($iKey). При отжатии - передается отрицательное его значение (-$iKey). Этот флаг может быть использован, например, для организации двойного нажатия клавиш.

Пример для $HK_FLAG_POSTCALL:
Код:
#Include <HotKey_17b.au3>

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

_HotKeyAssign($VK_F12, 'MyFunc', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL, $HK_FLAG_POSTCALL))
_HotKeyAssign(BitOR($CK_CONTROL, $VK_ESCAPE), 'Quit')

While 1
	Sleep(10)
WEnd

Func MyFunc($iKey)
	If $iKey > 0 Then
		ConsoleWrite('F12 (0x' & Hex($iKey, 4) & ') pressed!' & @CR)
	Else
		MsgBox(0, 'Hot key Test Message', 'F12 (0x' & Hex(Abs($iKey), 4) & ') has been released!')
	EndIf
EndFunc   ;==>MyFunc

Func Quit()
	Exit
EndFunc   ;==>Quit
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Yashied сказал(а):
Введен флаг $HK_FLAG_POSTCALL. На этом различия для пользователя заканчиваются.
Ясно спасибо.

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
А зачем? Что должно передоваться в эту функцию?
Параметры:

Код:
_HotKeyAssign($iKey [, $sFunction [, $vParam [, $iFlags [, $sTitle]]]]

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

Код:
Func _HotKey($vParam)
    If IsDeclared($vParam) Then ....
EndFunc


очень было бы полезно.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR, может я туплю конечно, но зачем это нужно? Что в этом полезного? Передавать в функцию глобальный параметр... Это эквивалентно простому объявлению переменной

Код:
Global $vParam


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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Передавать в функцию глобальный параметр... Это эквивалентно простому объявлению переменной
А кто говорил о глобальной переменной? Как раз наоборот, это будет полезно для избежания использования таких переменных:

Код:
_HotKeyAssign($iKey, "_HotKey", "Параметр №1")
_HotKeyAssign($iKey, "_HotKey", "Параметр №2")


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

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

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

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
Оно не отличается, в оригинале тоже можно задать одну функцию.

Поправил.
Добавлено:
Сообщение автоматически объединено:

Yashied сказал(а):
Этот флаг может быть использован, например, для организации двойного нажатия клавиш.

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

Код:
#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
 

Dreadfulangel

Знающий
Сообщения
19
Репутация
11
В AutoIt v3.3.2.0 эта UDF не работает, можно ли исправить UDF для совместимости с новой версией.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Dreadfulangel сказал(а):
В AutoIt v3.3.2.0 эта UDF не работает, можно ли исправить UDF для совместимости с новой версией.

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

Dreadfulangel

Знающий
Сообщения
19
Репутация
11
При запуске Примера №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().
 

Крепыш

Новичок
Сообщения
105
Репутация
2
Yashied сказал(а):
Но если F1 отжата, то F2 будет работать не зависимо от того, завершилась обработка для F1 или нет (если только ты не выключил эту возможность с помощью флага $HK_FLAG_NOOVERLAPCALL).

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

Код:
#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
 

Крепыш

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

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Крепыш сказал(а):
Как назначить одну горячую клавишу для двух приложений, чтобы выполнялось действие, когда активно одно из них?
В функцию, запускаемую по нажатию горячей клавиши, добавить такой обработчик
Код:
$state = WinGetState("Тест", "")
If BitAnd($state, 8) Then
    MsgBox(0, "Пример", "Окно программы активно")
Else
    MsgBox(0, "Пример", "Окно программы НЕ активно")
EndIf
 

Крепыш

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