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

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

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #30, Отправлен: Июнь 08, 2010, 02:54:19 »
Давй все по порядку.

  • Пример нерабочий.
  • В функцию _HotKeyAssign() нужно передавать не строковое выражение, а числовое - код горячей клавиши. Кстати, именно его и возвращает функция _GUICtrlReadHotKeyInput().
  • Не нужно для элементов HotKey Input использовать GUICtrlRead(), для чтения введенной клавиши используй _GUICtrlReadHotKeyInput().
  • У тебя получился безбашенный код. Почему бы не использовать масивы? Здесь они сами напрашиваются.

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

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



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

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

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

Оффлайн AZJIO [?]

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

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

Ctrl стал залипать, в чём причина? В скрипте используется _SendEx("^{INS}")
« Последнее редактирование: Июнь 08, 2010, 06:36:49 от AZJIO »

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #32, Отправлен: Июнь 08, 2010, 09:28:49 »
В скрипте используется _SendEx("^{INS}")...

Зачем?

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: HotKey - Установка горячих клавиш
« Ответ #33, Отправлен: Июнь 08, 2010, 09:49:43 »
Для выделения текста, копирования и вставки. В "Arum Switcher" используется тот же метод, так как если смотреть в расширенном буфере, то видно восстановление буфера после операций вставки исправления текста.


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

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

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

Оффлайн Yashied [?]

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

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

« Последнее редактирование: Июнь 08, 2010, 11:46:54 от Yashied »

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: HotKey - Установка горячих клавиш
« Ответ #35, Отправлен: Июнь 08, 2010, 12:38:08 »
Yashied
Так может не было случая комбинирования? Сейчас вставил мессаги в вызываемые функции и не залипает, проверю ещё без _SendEx, хотя врят ли, потом попробую урезанный пример сделать. Предложенный тобой код проверил, также.

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

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

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



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

(нажмите для показа/скрытия)
« Последнее редактирование: Июнь 08, 2010, 13:35:05 от AZJIO »

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #36, Отправлен: Июнь 08, 2010, 13:59:34 »
:blink:

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

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


Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: HotKey - Установка горячих клавиш
« Ответ #37, Отправлен: Июнь 08, 2010, 14:35:26 »
Yashied
Когда я не использовал HotKey.au3 у меня же такого эффекта не было. То есть для отжатия хватало Sleep(130), а теперь я руками отжимаю.

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

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

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #38, Отправлен: Июнь 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()?
« Последнее редактирование: Июнь 08, 2010, 15:07:52 от Yashied, Причина: Объединение сообщений »

Оффлайн AZJIO [?]

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

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

Она каждые 10 милисекунд проверяет не нажаты ли клавиши Ctrl, Shift, Alt. И не продолжит пока клавиши не будут отжаты. Вот моя бывшая проблема

Оффлайн Yashied [?]

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

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


Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: HotKey - Установка горячих клавиш
« Ответ #41, Отправлен: Июнь 08, 2010, 16:25:27 »
Не помогает. Когда тестировал TextCorrection все флаги перепробовал.

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #42, Отправлен: Июнь 08, 2010, 16:49:39 »
Не помогает. Когда тестировал TextCorrection все флаги перепробовал.

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

И при чем здесь TextCorrection, мы сейчас решаем проблему на примере простого кода. Запусти последний пример еще раз.
« Последнее редактирование: Июнь 08, 2010, 16:59:03 от Yashied »

Оффлайн AZJIO [?]

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


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

По той ссылке, что я приводил, у beve тоже проблем не было, хотя у меня была.

Оффлайн Yashied [?]

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

  • Автор темы
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: HotKey - Установка горячих клавиш
« Ответ #44, Отправлен: Июнь 08, 2010, 22:47:03 »
AZJIO, извини, но я здесь не помощник, так как не могу воспроизвести данную проблему ни на одном компьютере, как бы я не старался. Пробывал на трех разных машинах, на XP и 7... Все OK, при любом раскладе.

:-\

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

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

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3789 Просмотров
Последний ответ Декабрь 27, 2009, 00:44:54
от Anton
3 Ответов
4221 Просмотров
Последний ответ Июнь 20, 2010, 15:47:45
от Vlasssov
5 Ответов
6026 Просмотров
Последний ответ Июль 06, 2012, 00:57:11
от CreatoR
2 Ответов
3773 Просмотров
Последний ответ Июль 11, 2011, 16:24:27
от Kaster
2 Ответов
4789 Просмотров
Последний ответ Февраль 13, 2012, 17:02:17
от madmasles
0 Ответов
1695 Просмотров
Последний ответ Февраль 13, 2012, 16:48:54
от CreatoR
1 Ответов
3192 Просмотров
Последний ответ Февраль 16, 2012, 23:37:42
от CreatoR
10 Ответов
3998 Просмотров
Последний ответ Апрель 21, 2012, 22:05:30
от C2H5OH
11 Ответов
3873 Просмотров
Последний ответ Апрель 11, 2013, 15:07:03
от dimid
1 Ответов
797 Просмотров
Последний ответ Май 27, 2015, 22:20:02
от alex33