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

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

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 98
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: HotKey - Установка горячих клавиш
« Ответ #15, Отправлен: Апрель 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


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

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

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: HotKey - Установка горячих клавиш
« Ответ #16, Отправлен: Апрель 11, 2010, 13:17:33 »
Крепыш  [?]
Цитировать
Так ведь не работает
Это из за блокирующего MsgBox.


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


AutoIt is simple, subtle, elegant.


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


Мои работы

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 98
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: HotKey - Установка горячих клавиш
« Ответ #17, Отправлен: Апрель 14, 2010, 22:36:42 »
Как назначить одну горячую клавишу для двух приложений, чтобы выполнялось действие, когда активно одно из них?
« Последнее редактирование: Апрель 15, 2010, 09:11:53 от Крепыш »

Оффлайн Redline [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 506
  • Репутация: 368
  • Пол: Мужской
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #18, Отправлен: Апрель 15, 2010, 09:19:43 »
Как назначить одну горячую клавишу для двух приложений, чтобы выполнялось действие, когда активно одно из них?
В функцию, запускаемую по нажатию горячей клавиши, добавить такой обработчик
Код: AutoIt [Выделить]
$state = WinGetState("Тест", "")
If BitAnd($state, 8) Then
    MsgBox(0, "Пример", "Окно программы активно")
Else
    MsgBox(0, "Пример", "Окно программы НЕ активно")
EndIf
 

Уроки по регулярным выражениям на AutoIt: RegExp

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

Re: HotKey - Установка горячих клавиш
« Ответ #18 Отправлен: Апрель 15, 2010, 09:19:43 »

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 98
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: HotKey - Установка горячих клавиш
« Ответ #19, Отправлен: Апрель 15, 2010, 16:10:17 »
Нужно написать функцию, которая при многократном вызове горячей клавиши один раз выводила бы сообщение, типа "клавиша нажата столько-то раз".

Оффлайн Fever [?]

  • Скриптер
  • ****
  • Сообщений: 308
  • Репутация: 112
  • Пол: Мужской
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #20, Отправлен: Апрель 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:
http://vkontakte.ru/so_fever

Все мы ошибаемся. Одни больше, другие все время.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2312
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #21, Отправлен: Апрель 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


Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 98
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: HotKey - Установка горячих клавиш
« Ответ #22, Отправлен: Апрель 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 не получается.

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

Re: HotKey - Установка горячих клавиш
« Ответ #22 Отправлен: Апрель 15, 2010, 20:25:07 »

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #23, Отправлен: Апрель 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



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

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 98
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: HotKey - Установка горячих клавиш
« Ответ #24, Отправлен: Апрель 25, 2010, 15:22:49 »
В самой функции UP() вывод сообщения можно как-нить реализовать?

Оффлайн Redline [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 506
  • Репутация: 368
  • Пол: Мужской
    • Награды
Re: HotKey - Установка горячих клавиш
« Ответ #25, Отправлен: Май 18, 2010, 13:29:16 »
Нельзя ли добавить расширение для функции _HotKeyRelease, что бы была возможность удалять конкретный хоткей? Бывают ситуации с переназначение только одной горячей клавиши, и чтобы удалить старое ее сочетание нужно после _HotKeyRelease заново назначать _HotKeyAssign для всех сочетаний.

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #26, Отправлен: Май 18, 2010, 13:42:30 »
Нельзя ли добавить расширение для функции _HotKeyRelease, что бы была возможность удалять конкретный хоткей? Бывают ситуации с переназначение только одной горячей клавиши, и чтобы удалить старое ее сочетание нужно после _HotKeyRelease заново назначать _HotKeyAssign для всех сочетаний.

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


или просто

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


Освобождает ранее установленную горячую клавишу $iKey. В принципе это написано в описании функции в первом посте.

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: HotKey - Установка горячих клавиш
« Ответ #27, Отправлен: Июнь 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 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


Похоже ошибка, что это не числовая переменная
« Последнее редактирование: Июнь 07, 2010, 02:34:02 от AZJIO »

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #28, Отправлен: Июнь 07, 2010, 12:48:46 »
Почему это не работает?

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

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

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

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

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

« Последнее редактирование: Июнь 07, 2010, 13:13:32 от Yashied »

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: HotKey - Установка горячих клавиш
« Ответ #29, Отправлен: Июнь 08, 2010, 01:19:07 »
Yashied
С RegWrite всё должно работать, я до неё ещё не дошёл.

Разгадал загадку, #Include <HotKey.au3> забыл добавить, добавил только #Include <HotKeyInput.au3>.
« Последнее редактирование: Июнь 08, 2010, 04:55:25 от AZJIO »

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

Re: HotKey - Установка горячих клавиш
« Ответ #29 Отправлен: Июнь 08, 2010, 01:19:07 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3772 Просмотров
Последний ответ Декабрь 27, 2009, 00:44:54
от Anton
3 Ответов
4200 Просмотров
Последний ответ Июнь 20, 2010, 15:47:45
от Vlasssov
5 Ответов
5985 Просмотров
Последний ответ Июль 06, 2012, 00:57:11
от CreatoR
2 Ответов
3739 Просмотров
Последний ответ Июль 11, 2011, 16:24:27
от Kaster
2 Ответов
4762 Просмотров
Последний ответ Февраль 13, 2012, 17:02:17
от madmasles
0 Ответов
1684 Просмотров
Последний ответ Февраль 13, 2012, 16:48:54
от CreatoR
1 Ответов
3155 Просмотров
Последний ответ Февраль 16, 2012, 23:37:42
от CreatoR
10 Ответов
3964 Просмотров
Последний ответ Апрель 21, 2012, 22:05:30
от C2H5OH
11 Ответов
3832 Просмотров
Последний ответ Апрель 11, 2013, 15:07:03
от dimid
1 Ответов
775 Просмотров
Последний ответ Май 27, 2015, 22:20:02
от alex33