Ru-Board.club
← Вернуться в раздел «Программы»

» AutoHotkey

Автор: creature_ws
Дата сообщения: 14.05.2012 18:58
Лучше сформулировать пункты необходимой функциональности без упоминаний существующего «почти подходящего» решения.
Очень уж «самобытны» скрипты по первой ссылке.
Автор: Quasus
Дата сообщения: 14.05.2012 19:16

Цитата:
Если бы можно было переделать обработку не на символ, а на скан или виртуальный код, все проблемы бы ушли.


Сдаётся, надо всё переделывать радикальным образом. Потому что символ — это через Input, а сканкод — это просто переопределять всю клавиатуру как горячие клавиши. (В частности, прощайте, автозамены).

Имхо сама идея с повторными нажатиями да ещё и тултипами не очень удачная.
Автор: Ludens
Дата сообщения: 14.05.2012 21:34
ошибка
Автор: monsoon
Дата сообщения: 16.05.2012 15:45
creature_ws

Цитата:
Лучше сформулировать пункты необходимой функциональности без упоминаний существующего «почти подходящего» решения.

Желаемая функциональность вообщем-то следует из приведенного скрипта, поэтому он и упоминается:
Например, очень часто, пытаясь набрать точку или запятую и нажимая эти клавиши в русской раскладке получаем "ю" или "б".
Хотелось бы увидев, что вставился не тот символ, следующими нажатиями выбрать и вставить нужный.
Например, чтобы при нажатии клавиши со сканкодом 034 с соответствующей ей буквой "ю" в русской раскладке первый раз вставился тот символ, который и д.б.
Если период ожидания повторного нажатия не истек и клавиша нажата повторно предложить для выбора, задаваемые в программе или ini-файле набор символов. В данном случае я бы добавил следующие символы ".", ">", "Ю", "ю"

Второй вариант, который хотел бы использовать - навесить на каждую цифровую клавишу numpad несколько каких-либо специальных символов.
Т.е. своего рода реализация программы SpecChar на AutoHotkey.
Аналогично предыдущему варианту: при первом нажатии вставляется цифра, если период ожидания повторного нажатия не истек и клавиша нажата повторно, для выбора предлагается соответствующий набор символов.

Не знаю, мне идея с использованием тултипов и использованием повторных нажатий клавиш нравится.
Например на том же donationcoder есть скрипт ClipStep, который сохраняет историю буфера обмена.
В нем если нажать Ctrl+V клип просто вставится. Если не отпуская Ctrl нажимать дальше клавишу 'V' в тултипе отображаются тексты предыдущих клипов.
Им не пользуюсь, т.к. использую более продвинутую специальную программу-менеджер буфера обмена.


Quasus

Цитата:
сканкод — это просто переопределять всю клавиатуру как горячие клавиши. (В частности, прощайте, автозамены).

Мне достаточно нескольких клавиш. Сложность вижу в том, чтобы вставить при первом нажатии символ в текущей раскладке и текущем регистре.
Непонятно как это повлияет на автозамены. Можете пояснить или еще лучше привести код с автозаменой, который для вышеприведенного скрипта не будет работать?
Автор: Zakkazak
Дата сообщения: 16.05.2012 16:30

Цитата:
Не знаю, мне идея с использованием тултипов и использованием повторных нажатий клавиш нравится.
Например на том же donationcoder есть скрипт ClipStep, который сохраняет историю буфера обмена.
В нем если нажать Ctrl+V клип просто вставится. Если не отпуская Ctrl нажимать дальше клавишу 'V' в тултипе отображаются тексты предыдущих клипов.

идея повторного нажатия действительно рациональная. Встречал только в двух-трех программах.
Не приходиться запоминать много клавиш - это самое главное. К сожалению редко используеться , разработчики не особо заботяться, что кроме их программы на компе уйма приложений, которым тоже нужны глобальные клавиши.
Автор: Quasus
Дата сообщения: 16.05.2012 16:42
[more]
Цитата:

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


Ну, если нескольких клавиш, тогда нефатально. Пример того, о чём говорю: если есть скрипт А
sc10::SendInput, q
и скрипт Б
::qqq::www
то при одновременной работе скриптов автозамена не будет функционировать.

Обсуждаемый скрипт, конечно, хитёр и требует мозгов. А я вот пользуюсь рабоче-крестьянской идеологией. Для ввода символов в «лабораторном масштабе» — большой скрипт с мнемоническими автозаменами (например, а-ля ТеХ, а-ля HTML, а-ля вимовские диграфы — по вкусу). А как альтернативу национальным раскладкам — небольшие скриптики. Например, если мне нравится в качестве модификатора использовать „/‟ (не очень нужно в жизни и удобно нажимать), то для немецкого с помощью этой клавиши настраиваю умлауты и эс-цет
a/ ⇒ ä
o/ ⇒ ö

s/ ⇒ ß
А для чешского с помощью этой же клавиши мог бы получать акуты и гачеки
a/ ⇒ á
c/ ⇒ č

С координацией скриптов-квазираскладок прекрасно справляется сам AHK.

Это я просто делюсь соображениями, если кому интересно. Кстати, этот пост благодаря AHK я полностью набрал с клавиатуры (включая „лапки‟ и юникодные многоточия). [/more]
Автор: creature_ws
Дата сообщения: 17.05.2012 01:57
Теперь идея понятна. Не вижу рациональности в повторном множественном нажатии для ввода специфического символа.
«Родным» способом ввода спецсимволов с клавиатуры ПК всегда было использование клавиши модификатора, чай пк не телефон, двумя пальцами печатать не обязывает.
Обсуждаемый способ лишь уменьшит скорость набора до «приемлемой для телефона».
Автор: Risovod
Дата сообщения: 09.06.2012 19:30
Здравствуйте.
Подскажите команду для выполнения скрипта: "Запуск сетевого подключения при загрузке системы".
Пробовал вот так, но не помогло:

Цитата:
sConnection = Сеть
NetConnect (bEnable, sConnection)
strEnableRus := "&Подключить"
CSIDL_CONNECTIONS := 0x31

где "сеть" - название сетевого подключения
Автор: creature_ws
Дата сообщения: 12.06.2012 13:24

Код: ToggleConnection("Сеть")

ToggleConnection(sConnection) {
For oConn In ComObjCreate("Shell.Application").Namespace(0x0031).Items
If (oConn.Name = sConnection) {
oConn.Verbs.Item(0).DoIt
return
}
msgbox Connection Not Found
}
Автор: Vitti
Дата сообщения: 12.07.2012 20:49
В инете прочитал что через Send русские символы отправляются, если в текущем приложении установлена русская раскладка, но у меня всеравно получаются квадраты. Как решить проблему?
Автор: Quasus
Дата сообщения: 12.07.2012 22:34
> В инете прочитал что через Send русские символы отправляются, если в текущем приложении установлена русская раскладка, но у меня всеравно получаются квадраты. Как решить проблему?

Хорошо бы больше информации, включая неработающий пример, версию AHK и кодировку скрипта. А так могу посоветовать установить AutoHotkey_L, и проблем с юникодом вообще не будет никаких. Только следите, чтобы скрипты были в UTF-8.
Автор: Vitti
Дата сообщения: 13.07.2012 00:07
Quasus
Версия АХК - AutoHotkey_L 1.1.07.03 - March 25, 2012
Процедура проста:
#0::
Send, Ля
Return

Скрип был в кодировке ОЕМ. Пересохранил в UTF-8 - стало работать как надо.
А в ОЕМ никак нельзя сделать чтоб работало? Конвертирование может какое сделать?

Добавлено:
Quasus
Вобщем я переконвертировал скрипты из досовской кодировки в утф-8. Проблема исчерпана. Большое спасибо!
Автор: Quasus
Дата сообщения: 13.07.2012 10:32
Рад помочь. Что касается OEM и AutoHotkey_L, думаю, вряд ли их так просто можно подружить, проще перекодировать.
Автор: creature_ws
Дата сообщения: 16.07.2012 18:00
На всякий случай сообщу — с версии 1.1.08 unicode сохранять скрипты следует в UTF-8 c BOM.
Автор: Vitti
Дата сообщения: 16.07.2012 23:50
В 1.1.08 корректно отрабатывает кириллица в кодировке 1251 в операторе Send. А в досовской кодировке уже не квадратики, а закорючки.
(относительно моего вопроса чуть выше)
Автор: creature_ws
Дата сообщения: 16.07.2012 23:55
В 1.1.08 от скриптов ожидается системная ANSI, закорючки потому как не oem -> Utf, а oem -> 1251
Автор: Real Root
Дата сообщения: 19.07.2012 00:58
Товарищи, прошу помощи.
Есть скрипт:
Loop
{
IfWinExist, Калькулятор Плюс
{
SoundSet, 1,, Mute
}
else
{
SoundSet, 0,, Mute
}
Sleep 500
}
Под XP работает, под семеркой не хочет - даже свой микшер не блокирует... Может есть какой сверхсвежий бета билд - может там это поправлено?
пробовал на версии 1.1.05.06
Автор: creature_ws
Дата сообщения: 19.07.2012 01:10
Интересно, а где вы такой «свежий» билд раскопали?
Актуальная версия 1.1.08.00

Под семёркой пример работать как ожидается будет лишь если скрипт скопмилировать и запустить в режиме совместимости с XP.

Можете отправлять нажатие кнопки Volume_mute или воспользоваться Vista Audio Control библиотекой с офф форума.
Автор: Real Root
Дата сообщения: 19.07.2012 01:18
Да прямо в шапке написано: Последняя версия: 1.1.05.06 31-12-2011

Добавлено:
версия 1.1.08.00 - тоже не изменила ситуацию.


Цитата:
ожете отправлять нажатие кнопки Volume_mute или воспользоваться Vista Audio Control библиотекой с офф форума.

Volume_mute - не устраивает, т.к. мне нужно не поочередное включение выключение а постоянное состояние включено или выключено. Проверка окна происходит каждые 30 сек.

А где достать эту самую Vista Audio Control и как ею пользоваться?
Автор: creature_ws
Дата сообщения: 19.07.2012 03:01
Нет сознательных «мемберов» способных редактировать шапку чаще чем раз в полгода.
Актуальная версия и не должна была «изменить ситуацию».

Цитата:
А где достать эту самую Vista Audio


Цитата:
с офф форума.
Автор: creature_ws
Дата сообщения: 19.08.2012 22:39
После быстрого двукратного нажатия Ctrl + C скопированный текст проговаривается «встроенным голосом»

Код: ~^vk43::(A_ThisHotkey == A_PriorHotkey && A_TimeSincePriorHotkey < 500) && Say(Clipboard)

Say(string)
{
static SAPIVoice := ComObjCreate("SAPI.SpVoice")
return SAPIVoice.speak(string)
}
Автор: OnMyDSeeAtAll
Дата сообщения: 19.08.2012 23:49
Тоже как-то игрался с SAPI, после того как натолкнулся на оффоруме на такой примерчик.

Код: MsgBox, 262144
,
% "Speak the text"(oSAPI:=ComObjCreate("SAPI.SpVoice")
,
oSAPI.Volume:=100, oWScSh:=ComObjCreate("WScript.Shell"))
,
% SampleText:="Hello World!"
,
% 1.5

oSAPI.Rate:=0, oSAPI.Speak(SampleText, 1)
oWScSh.Popup("Slow down the speech", 1, "rate: -7")
oSAPI.Rate:=-7, oSAPI.Speak(SampleText)
oWScSh.Popup("Speed up the speech", 1, "rate: 7")
oSAPI.Rate:=7, oSAPI.Speak(SampleText), oSAPI.Rate:=0 ; set to default
oWScSh.Popup("Lower the volume (ranges 0-100)", 1, "volume: 50")
oSAPI.Volume:=50, oSAPI.Speak(SampleText)
ExitApp
Автор: oshizelly
Дата сообщения: 28.10.2012 12:16
Подскажите или лучше ткните носом в описание в документах, как ли в AutoHotKey назначать горячие клавиши только для конкретного приложения. Допустим, назначаем для Windows Explorer комбинацию Shift+F6 для вставки текущей системной даты, а та же комбинацию Shift+F6 в браузере - переход на страницу Google.com, а если нет ни одного активного окна (открыт Рабочий Стол), то Shift+F6 запускает MS Word и открывает в нем документ mydocument.doc... Ну и так далее в таком духе.

Если вопрос глупый, прошу ногами не бить: сабжем пользуюсь второй день, и вообще чайник.

Спасибо!
Автор: creature_ws
Дата сообщения: 28.10.2012 13:40
Context-sensitive Hotkeys
Если горячая клавиша должна работать в неком списке окон, список окон (применимый для использования с директивами #IfWin) можно создать при помощи GroupAdd, WinTitle

FAQ
Tutorial
Guides, walkthroughs and tips
Alphabetical Command and Function Index
Variables and Expressions
Functions
Автор: Quasus
Дата сообщения: 28.10.2012 14:22
То есть вы привязываете клавиши не к приложениям, а к окнам. Для идентификации окон можно использовать их названия (или куски названий), а для большей надёжности — ahk_class. Информацию об открытом окне можно получить с помощью Window Spy (вызывается из контекстного меню к скриптам.)

Что-то никогда не пользовался GroupAdd. creature_ws, спасибо за тип.
Автор: creature_ws
Дата сообщения: 28.10.2012 14:58
К окнам приложений , если требуется, чтоб горячая клавиша срабатывала во всех окнах порождаемых неким процессом — в качестве WinTitle нужно указать ahk_exe имяпроцесса.exe
Автор: Quasus
Дата сообщения: 28.10.2012 15:23
Ой, я не в качестве исправлений, а просто чтобы резюмировать общую идеологию.
Автор: creature_ws
Дата сообщения: 28.10.2012 15:26
Я тоже. Для уточнения формулировки.
Автор: oshizelly
Дата сообщения: 28.10.2012 17:45
Почитал некоторые доки (не всё, конечно: этого материала и за неделю не осилить), но так и не нашёл ответа на до смешного простой вопрос: как добавить пробел после вставки переменной?

И ещё. Есть ли возможность назначить замену для комбинации с левым шифтом и альтом? Подчёркиваю, речь не о сабжевом хоткее с различением левого/правого альта и шифта (для этого используются символы < и >), а о замене назначенного в настройках Windows сочетания LeftShift+LeftAlt. Пробовал обойтись без уточнения, просто написал скрипт
Код: ^+CapsLock::!+
Автор: monsoon
Дата сообщения: 29.10.2012 08:48
oshizelly

Цитата:
Код:^+CapsLock::!+
(для циклического переключения раскладок клавиатуры),


Про переключение раскладок, в том числе и по CapsLock, посмотрите на русскоязычном форуме.

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: как добавить ивритские шрифты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.