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

» AutoHotkey

Автор: PPavlukha
Дата сообщения: 18.06.2013 21:17
Почему не работает (и как правильно сделать) конструкция:
#IfWinActive ahk_class xxx || #IfWinActive ahk_class yyy
<CODE>

Код выполняется только во втором окне. Если оно активно, конечно.
Автор: vadim3sh
Дата сообщения: 19.06.2013 02:10
Здравствуйте

Прошу прощения за, наверное, тупой вопрос.. Может быть кто-то может помочь понять принцип использования "Return" после "Loop". Никак не получается разобраться. Скрипты иногда с Return, иногда без.

Скрипт из учебника


Код:
F7::
Loop 3
{
    MsgBox Это окошко будет показано три раза.
}
Return
Автор: aidomars
Дата сообщения: 19.06.2013 07:43
vadim3sh
Return это окончание действия горячей клавиши. В примере видно, что после Return нет больше ничего, сл-но Return необязателен.
А вот тут он нужен, иначе скрипт продолжит работу:
Код:
F7::
Loop 3
MsgBox Это окошко будет показано три раза.
Return
F8::
Loop 3
MsgBox Это окошко будет показано три раза.
Автор: vadim3sh
Дата сообщения: 19.06.2013 09:46
О, спасибо..
Этот вариант не додул. А я уже сел писать, что понял все сам..
Я так понимаю, что еще он необходим, если количество циклов не задано (просто Loop), а внутри фигурных скобок есть условие и брейк после выполнения этого условия


Код: ;MButton long time = alt+c
~MButton::
TimeButtonDown = %A_TickCount%
; Wait for it to be released
Loop
{Sleep 10
GetKeyState, MButtonState, MButton, P
if MButtonState = U ; Button has been released.
break
elapsed = %A_TickCount%
elapsed -= %TimeButtonDown%
if elapsed > 600 ; Button was held down long enough
{Send !{vk43}
exit
}
}
return
Автор: aidomars
Дата сообщения: 19.06.2013 10:05

Цитата:
Я так понимаю, что еще он необходим, если количество циклов не задано

Не совсем так. Break это выход из Loop, т.е. потом программа продолжится пока не встретится Return или до окончания кода, а Return это выход из горячей клавиши или сам останов программы.
Автор: PPavlukha
Дата сообщения: 19.06.2013 21:41

Цитата:
PPavlukha

Почему не работает (и как правильно сделать) конструкция:
#IfWinActive ahk_class xxx || #IfWinActive ahk_class yyy
<CODE>

Код выполняется только во втором окне. Если оно активно, конечно.

Автор: aidomars
Дата сообщения: 20.06.2013 01:18
PPavlukha
#IfWinActive только последний работает.
Автор: OnMyDSeeAtAll
Дата сообщения: 20.06.2013 02:06
@PPavlukha Тут несколько вариантов как можно оформить условие соответствия:
Код: #IfWinActive ahk_class Notepad
~LButton::
TrayTip,,
% "condition is match"
Sleep, 1250
TrayTip
Return
#IfWinActive
ahk_class CalcFrame
~LButton::
TrayTip,,
% "condition is match"
Sleep, 1250
TrayTip
Return
#IfWinActive
~LButton::
TrayTip,,
% "do something else"
Sleep, 250
TrayTip
Return
Автор: vadim3sh
Дата сообщения: 21.06.2013 02:17
A можно как-то назначить одну горячую клавишу для 2 и более разных скриптов?


И еще...


Код: .....
Send ^{vk43}
Автор: PPavlukha
Дата сообщения: 21.06.2013 17:58

Цитата:
OnMyDSeeAtAll
Тут несколько вариантов как можно оформить условие соответствия:


Спасибо!

Автор: OnMyDSeeAtAll
Дата сообщения: 21.06.2013 18:12
@vadim3sh

Цитата:
A можно как-то назначить одну горячую клавишу для 2 и более разных скриптов?
Можно, нужно поставить префикс ~ перед каждой горячей клавишей в каждом скрипте, пример:
Код: ~Space::MsgBox, 262144, % A_LineNumber, % A_ScriptName ;, % 1.5
Автор: vadim3sh
Дата сообщения: 21.06.2013 19:55
OnMyDSeeAtAll





Код: !^vk43::
Send, ^{Ins}
Автор: OnMyDSeeAtAll
Дата сообщения: 22.06.2013 04:09
Ну это как бы сама комбинация горячих клавиш.
Автор: vadim3sh
Дата сообщения: 08.07.2013 03:45
Привет
Братцы, только не бейте ногами.. По простоте ошибки понимаю, что спрашиваю глупость. Но в каком месте, найти не могу.
Я ее в скрипте отлавливал сутки. Отловил где, но не понимаю: почему..

Как переназначение клавиш влияет на появление месседж бокса?


Код:
^g::!m ; если эту строчку убираем, MsgBox начинает появляться


MyVar2 = 123

if MyVar2 = 123
{
    MsgBox MyVar2 имеет значение %MyVar2%
}
Автор: coherent
Дата сообщения: 13.07.2013 18:05
Друзья, подскажите, пожалуйста, скрипт, который выполнял бы следующее:
по двойному клику мышки с нажатой клавишей Ctrl (левый) на слове (в любом документе, поддерживающем копирование текста) -> это слово выделяется и выполняется Ctrl+С+С.
Заранее благодарен.
Автор: vadim3sh
Дата сообщения: 14.07.2013 01:42
Имеется в виду при зажатом Ctrl двойное нажатие на C?
Автор: LonerDergunov
Дата сообщения: 14.07.2013 03:54

Цитата:
Имеется в виду при зажатом Ctrl двойное нажатие на C?

Тогда вот тут несколько вариантов решения.
Автор: coherent
Дата сообщения: 14.07.2013 16:27
vadim3sh

Цитата:
Имеется в виду при зажатом Ctrl двойное нажатие на C?

Да, именно так. Все же уточню. Действие: нажимаю Ctrl и двойной клик мышкой на слове. Результат: слово выделяется и выполняется команда Ctrl+С+С (при зажатом Ctrl двойное нажатие на C).

LonerDergunov

Цитата:
Тогда вот тут несколько вариантов решения.

Буду разбираться, спасибо за ссылку! Просто для меня - это совершенно новая территория, осталось начать и разобраться.

К сожалению не то. Меня интересует двойной клик мышкой с зажатой клавишей Ctrl.
Автор: vadim3sh
Дата сообщения: 14.07.2013 22:01
Наверное, стоит еще определить: время между нажатиями "с" лимитировано (такое для меня странное сочетание - наверное, какая-то программа просит?)?
Автор: coherent
Дата сообщения: 14.07.2013 23:08

Цитата:
Наверное, стоит еще определить: время между нажатиями "с" лимитировано

Лимитировано, два последовательных нажатия (достаточно быстро).
Автор: vadim3sh
Дата сообщения: 14.07.2013 23:53
Ну ка ся.. Чего будет?

Код:
~^LButton::
If DoubleClick(400)
SendInput {CtrlDown}{vk43}{vk43}
Return

DoubleClick(clickTimeout)
{
return A_TimeSincePriorHotkey<clickTimeout and A_ThisHotkey = A_PriorHotkey
}

Автор: coherent
Дата сообщения: 15.07.2013 10:01
vadim3sh
Спасибо за скрипт!
К сожалению сразу не могу проверить, целый день буду за компьютером (не своим), где не установлен AutoHotkey. Ближе к вечеру проверю и дам знать.

добавлено
Все работает, как задумано! Огромное спасибо, Вы мне очень помогли!
Автор: newbie2k6
Дата сообщения: 17.07.2013 14:55
У меня AutoHotkey 1.1.08.01. Подскажите, пожалуйста, как с помощью регулярного выражения произвести следующую замену:
"текст текст текст [111]" -> "текст текст текст #111"

Здесь "текст текст текст" — произвольный текст, а "[111]" — число длиной от 1 до 3 символов, заключенное в квадратные скобки.

Следующий код работает не так, как хотелось бы, а именно не вставляет символ #, зато обрезает первую цифру:

Код: NewText := RegExReplace(OldText, "^(.*).\[([0-9]{1,3})\]$", "$1 #$2")
Автор: creature_ws
Дата сообщения: 17.07.2013 16:22

Код: MsgBox % RegExReplace("текст текст текст [111]", "\[(\d{1,3})\]$", "#$1")
Автор: newbie2k6
Дата сообщения: 18.07.2013 06:47
creature_ws

Цитата:

Код: MsgBox % RegExReplace("текст текст текст [111]", "\[(\d{1,3})\]$", "#$1")
Автор: coherent
Дата сообщения: 20.07.2013 19:47
vadim3sh
Использования скрипта с различными документами показал, что он не срабатывает в случае pdf-документов. Скрипт использую для передачи слова для перевода в GoldenDict. При двойном клике на слове в рdf-документе (который поддерживает копирование текста!) передается не это слово, а то, которое уже находится в буфере обмена и которое туда попало при последнем корректном срабатывании скрипта в других документах, например в Опере. Т.е., например в Опере последним словом было "word1", оно осталось в буфере, и теперь при попытке передать (при помощи скрипта) любое слово из рdf-документа в GoldenDict всегда передается именно это слово "word1". При этом издается звук, свидетельствующий о том, что кому-то что-то не нравится! При всем при этом, если просто выделить слово двойным кликом (без нажатой клавиши Ctrl) и нажать Ctrl+С+С, то слово передастся в GoldenDict без проблем.
В этой связи просьба, возможно в скрипте можно что-то изменить, чтобы он работал и с рdf-документами.
Автор: LonerDergunov
Дата сообщения: 20.07.2013 20:02

Цитата:
не срабатывает в случае pdf-документов

Самое главное-то не указали.
В любой программе просмотра Pdf-файлов или в какой-то определённой/определённых программах ?
С любыми pdf (с OCR-слоем и изначально компьютерными) или с какими-то определёнными ?
Автор: coherent
Дата сообщения: 20.07.2013 21:32
LonerDergunov

Цитата:
В любой программе просмотра Pdf-файлов или в какой-то определённой/определённых программах ?

Использую PDF-XChange Viewer.

Цитата:
С любыми pdf (с OCR-слоем и изначально компьютерными) или с какими-то определёнными ?

Не знаю, корректно ли я отвечу на вопрос, но речь идет о PDF, созданных из текстовых форматов. Т.е. они поддерживаю поиск, выделение и копирование текста.
Автор: vadim3sh
Дата сообщения: 21.07.2013 04:21
Привет.
Подумаю на досуге, пока что, как вариант, можно попробовать сделать так:

(в принципе, не вижу особой разницы - все равно к кллаве тянуться) двойной клик, и потом нажатие горячей клавиши, эмулирующей Ctrl C C.

Может, так попробуйте:



Код:
~^LButton::
If DoubleClick(400)
Send {Click 2}
SendInput {CtrlDown}{vk43}{vk43}
Return

DoubleClick(clickTimeout)
{
return A_TimeSincePriorHotkey<clickTimeout and A_ThisHotkey = A_PriorHotkey
}
Автор: coherent
Дата сообщения: 24.07.2013 22:36
vadim3sh
Извините, не было возможности даже дорваться до интернета!
Сейчас проверил, к сожалению тоже самое. Для чистоты эксперимента проверил и на Adobe Reader-е, такое же поведение.
Хотя, возможно я не понял скрипт. Какая должна быть последовательность действий? Что означает новая строка Send {Click 2}?

Цитата:
потом нажатие горячей клавиши, эмулирующей Ctrl C C.

Если это не очень нахально с моей стороны, можно ли в качестве горячей клавиши использовать одновременное нажатие Win+Shift или Win+z (типа как при переключении языка Ctrl+Shift Alt+Shift)? Двойной клик мышкой по-любому выделяет слово (ничего дополнительно делать не надо), а горячей клавишей (Win+Shift или Win+z) эмулировать нажатие Ctrl+C+C.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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