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

» AutoHotkey

Автор: vadim3sh
Дата сообщения: 25.07.2013 01:22
coherent

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


Цитата:
Что означает новая строка Send {Click 2}

Это как бы разные вариаты.. 1 строчка это больше мысли вслух. 2- Send {Click 2}, это как бы принудительный двойной клик в месте расположения курсора. Хочу видеть PDF файл, а то как-бы это туда-сюда геморройно очень. Мне на почту скиньте, пожалуйста..

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

Можно то оно можно, но
1.Мне с тем разобраться теперь интересно (я же больше для самообразования все это пытаюсь победить)
2. PDF файл все равно нужен, а то варианты проверять тоскливо очень в смысле ожидания результата..
Автор: coherent
Дата сообщения: 25.07.2013 22:01
vadim3sh
файл выложил в личку. В принципе может быть и другая комбинация нажатий, необязательно Ctrl+DoubleClick (мышкой).
Автор: vadim3sh
Дата сообщения: 30.07.2013 04:39
Привет

Ребята, что может быть не так? Ставлю скрипты на паузу. Они становятся красными, но продолжают работать.

P.S. по поводу Ctrl c c..
Короче, добили мы эту тему через личку. Такая вот конструкция работает для GoldenDict и с PDF и с Opera.


Код: ^LButton::
Send {Click 2}
SendInput {CtrlDown}{vk43}{vk43}{CtrlUp}
Return
Автор: Eden1nMyHeart
Дата сообщения: 22.08.2013 16:39
Прошу помочь с кодом программы.
Нужна программа такого рода:
Landerfire: PgUp::sendinput, {f}{s}{f}{s}{f}{s}
Loop 10

{
Send {PgUp down} ; Автоповтор состоит из цепочки событий Down (без Up).
; Пауза в миллисекундах между нажатиями (либо используйте SetKeyDelay).
}
Send {PgUp up} ; Отпустить клавишу.
PgDn::send {f 10}
В общем программа должна юзать клавиши [f] и [s] поочередно очень много раз за очень короткое время при нажатии на клавишу,и при нажатии на другую деактивироваться.
Автор: OnMyDSeeAtAll
Дата сообщения: 23.08.2013 09:19

Цитата:
...Автоповтор состоит из цепочки событий Down (без Up).
Написать в коде можно всё что угодно, но по сути будет одно нажатие до того времени, как не последует команда на отжатие клавиши.
Автор: 1ANP
Дата сообщения: 02.09.2013 02:54
Подскажите, можно ли в качестве горячей клавиши использовать:
1) Win + Left или левый Win (LWin+Left);
2) Двойное нажатие Win + Left;
3) Одновременное нажатие Win + Left + Right.

Добавлено:
Win+Left - понял, это #SC14B
двойной клик Win+Left - тоже нашел решение.
Остаются открытым вопросы:
1) LWin+Left
2) Win+Left+Right

Добавлено:
И еще вопросик:

Код:
starttime := A_TickCount
doubleclick:=0

~#SC14B::
elapsedtime := A_TickCount - starttime
IF (elapsedtime < 250) and (doubleclick=1)
{
Run, Notepad.exe
soundbeep, 1000, 50
doubleclick:=0
}
else
{
doubleclick := 1
}
starttime := A_TickCount
return

f12::exitapp
Автор: Any_utka
Дата сообщения: 04.09.2013 13:41
Подскажите, пожалуйста, такую вот вещь. Если вместо клавиши <Windows> (которой на моей клавиатуре вообще нет) назначить, допустим, клавишу <Pause>, то при этом все системные сочетания тоже будут переназначены автоматически? Например, нажатие <Pause>+<D> будет работать как <Win> + <D>, то есть, сворачивать и разворачивать все активные окна? Или же каждую комбинация <Windows> с другими клавишами надо будет назначать отдельно?

И второй вопрос. на клавиатуре есть специальная фирменная клавиша <Access IBM>, вот здесь она на картинке видна синяя продолговатая справа от <Esc>.
http://www.serverpartswarehouse.com/Assets/ProductImages/02R0400.jpg

Ее можно как-то переназначить? И если да, то как выяснить ее код?

Спасибо заранее!
Автор: OnMyDSeeAtAll
Дата сообщения: 06.09.2013 18:42
@1ANP
Цитата:
Остаются открытым вопросы:
1) LWin+Left
2) Win+Left+Right
1):
Код: LWin & Left::MsgBox, 262144, % A_Space, % A_ThisHotkey, 1.5
Автор: vadim3sh
Дата сообщения: 17.09.2013 10:40
DEL






Автор: oshizelly
Дата сообщения: 17.09.2013 11:05
Подскажите, может ли сабж определить, что к лаптопу отключено/подключено электропитание? Сама Windows этот момент легко определяет, автоматически переключаясь с одного режима электросбережения на другой и меняя вид соответствующей иконки в системном трее. Значит, и сторонние приложения это должны уметь.

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

Также удалось нарыть страницу, на которой Microsoft честно приводит коды, как это работает в Windows.

Спасибо!
Автор: vadim3sh
Дата сообщения: 18.09.2013 00:31
Oчень многим нравится переключать раскладку нажатием CapsLock. И всем не нравится, что индикатор CapsLock при этом перестает фунициклировать.
Для управления индикатором без изменения состояния клавиши есть решение, но на моей win 7 не идет никак
http://www.autohotkey.com/board/topic/9587-keyboard-led-control-capslocknumlockscrolllock-lights/page-2
http://superuser.com/questions/613747/using-capslock-led-for-other-purposes

P.S. Почти работает! Надо токо сбои устранить.

Объясните, пожалста, зачем в этом скрипте {CtrlUp} ??


Код:
#Include led.ahk
global PersionLayout := 0

CapsLock::
Send, {ALTDOWN}{SHIFTDOWN}{SHIFTUP}{CTRLUP}{ALTUP}
PersionLayout := !PersionLayout
If PersionLayout = 1
KeyboardLED(7, "on")
Else
KeyboardLED(7, "off")
Автор: OnMyDSeeAtAll
Дата сообщения: 18.09.2013 21:52
@oshizelly Извините, сим девайсом не обладаю.
@vadim3sh Так уж повелось для меня, что если занимаю какую-либо клавишу своим функционалом, то стараюсь оставить при ней и нативную её функцию (если таковой вариант востребован). К примеру в этом коде CapsLock переключает раскладку при двойном нажатии:
Код: SetStoreCapslockMode, Off
WM_INPUTLANGCHANGEREQUEST:=0x0050, INPUTLANGCHANGE_FORWARD:=0x0002

CapsLock::
SendEvent, {CapsLock}
If A_TimeSincePriorHotkey Between 0 And 300
{
PostMessage,
WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD,,, % "ahk_id"hWnd:=WinActive("A")
KeyWait,
% A_ThisHotkey
HKL:=DllCall("GetKeyboardLayout", "UInt", DllCall("GetWindowThreadProcessId", "Ptr", hWnd, "UInt*", 0, "UInt"), "Ptr")
TrayTip,
% "Текущая раскладка", % HKL&16 ? "Русская":"Английская",, 1
Sleep, 1000
TrayTip
Return
}
KeyWait,
% A_ThisHotkey
Return
Автор: oshizelly
Дата сообщения: 18.09.2013 22:47
OnMyDSeeAtAll 21:52 18-09-2013
Цитата:
@oshizelly Извините, сим девайсом не обладаю.

В смысле, лаптопом или нетбуком? Я думал, у всех уже есть хотя бы один
А без тестирования - никак?

Добавлено:

OnMyDSeeAtAll 21:52 18-09-2013

Цитата:
К примеру в этом коде CapsLock переключает раскладку при двойном нажатии...
PostMessage, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD,,, % "ahk_id"hWnd:=WinActive("A")
     
KeyWait,
% A_ThisHotkey
     
HKL:=DllCall("GetKeyboardLayout", "UInt", DllCall("GetWindowThreadProcessId", "Ptr", hWnd, "UInt*", 0, "UInt"), "Ptr"[color=#C60000][/color]


Если я правильно понимаю, этот код переключает раскладку клавиатуры на следующий из нескольких языков, и так по кругу до бесконечности?
А можно ли сделать, чтобы переключение происходило на определённую раскладку? Тогда можно было бы сделать чуть более интересно, допустим, по одинарному нажатию переключается язык на следующий, по двойному - на русский, по тройному - на английский, по четверному - на язык кечуа и т.д. Больше, чем тройное нажатие, будет уже неюзабельно, но три - ещё достаточно удобно.
Автор: vadim3sh
Дата сообщения: 18.09.2013 23:59
oshizelly
Я не проверял, но гляньте здесь
http://forum.script-coding.com/viewtopic.php?id=8188
Автор: OnMyDSeeAtAll
Дата сообщения: 19.09.2013 02:43

Цитата:
...у всех уже есть хотя бы один
Увы, ни тем, ни другим.
Цитата:
...без тестирования - никак?
Нет.
Цитата:
А можно ли сделать, чтобы переключение происходило на определённую раскладку? Тогда можно было бы сделать...
Ну почти так как Вы хотели, только родную функцию я всё же оставил, четыре раза жать под ряд конечно не сподручно, по этому добавил альтернативу:
Код: SetStoreCapslockMode, Off
WM_INPUTLANGCHANGEREQUEST:=0x0050, INPUTLANGCHANGE_FORWARD:=0x0002
enLocale:=67699721, ruLocale:=68748313, vk14i:=checkUp:=""

CapsLock::
KeyWait,
% A_ThisHotkey
vk14i+=(bState:=A_TimeSinceThisHotkey>300) ? 4:1
SetTimer,
% "Countervk14", % "-"(bState ? 0:250)
Return

Countervk14:
IfGreater,
vk14i, 4, Goto, % "ByPass"
hWnd:=WinActive("A")
Gosub,
% ("Action"vk14i)"vk14"
If vk14i Between 2 And 4
{
Sleep, 25
HKL:=DllCall("GetKeyboardLayout", "UInt", DllCall("GetWindowThreadProcessId", "Ptr", hWnd, "UInt*", 0, "UInt"), "Ptr")
TrayTip,
% checkUp ? "Текущая":"Установлена", % (HKL&16 ? "Русская":"Английская")" раскладка",, 1
Sleep, 1000
TrayTip
}
ByPass:
bState:=hWnd:=HKL:=vk14i:=checkUp:=""
Return

Action1vk14: ; одно нажатие - нативная функция клавиши
SendEvent, {CapsLock}
Return

Action2vk14: ; два нажатия - переключение на русскую раскладку
PostMessage, WM_INPUTLANGCHANGEREQUEST,, ruLocale,, % "ahk_id"hWnd
Return

Action3vk14: ; три нажатия - переключение на английскую раскладку
PostMessage, WM_INPUTLANGCHANGEREQUEST,, enLocale,, % "ahk_id"hWnd
Return

Action4vk14: ; четыре нажатия/отжим после небольшого удержания - переключение на следующую раскладку
PostMessage, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD,,, % "ahk_id"hWnd
checkUp
:=1
Return
Автор: oshizelly
Дата сообщения: 19.09.2013 10:19
OnMyDSeeAtAll 02:43 19-09-2013
Цитата:
Ну почти так как Вы хотели,

Спасибо!
А где можно посмотреть эти цифровые идентификаторы для разных языков (enLocale:=67699721, ruLocale:=68748313 и т.д.) ? Спрашивал в Гугле, но там тоже не знают, предлагают только буквенные аббревиатуры или вообще вот так


Цитата:
родную функцию я всё же оставил, четыре раза жать под ряд конечно не сподручно, по этому добавил альтернативу...

Код: Action4vk14: ; четыре нажатия/отжим после небольшого удержания - переключение на следующую раскладку
   
PostMessage, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD,,, % "ahk_id"hWnd
   checkUp
:=1

Автор: OnMyDSeeAtAll
Дата сообщения: 19.09.2013 14:21

Цитата:
А где можно посмотреть эти цифровые идентификаторы для разных языков (enLocale:=67699721, ruLocale:=68748313 и т.д.) ?
Значения переменных enLocale (67699721) и ruLocale (68748313) это десятичный формат идентификаторов языка ввода, в шестнадцатиричном формате будут выглядеть так: английский - 0х4090409, русский - 0х4190419. В [more=этом]
Код: #SingleInstance, Force
IfEqual
, A_IsAdmin, % False, Run, % "*RunAs """A_ScriptFullPath """"

; выясняем сколько вообще
nBuff:=DllCall("GetKeyboardLayoutList", "Int", 0, "Ptr", 0, "Int")
; получаем значения в переменную lpList
DllCall
("GetKeyboardLayoutList", "Int", nBuff, "Ptr", VarSetCapacity(lpList, A_PtrSize*nBuff)*0|&lpList)
; обрабатываем lpList присваивая значения полей динамическим переменным
Loop
, % nBuff
locale%A_Index%:=ConvertFormat(NumGet(lpList, A_Index=1 ? 0:A_PtrSize*(A_Index-1), "UInt"))
; нумерация по порядку добавления в систему через:
; Панель управления/Язык и региональные стандарты/Язык и клавиатуры>Изменить клавиатуру.../Языки и службы текстового ввода

; проверяем текущую, активируем любое окно и жмём пробел
ListLines, Off
SoundBeep, 12500, 250
KeyWait, Space, % "D"
ListLines,
On
threadId:=DllCall("GetWindowThreadProcessId", "Ptr", DllCall("GetForegroundWindow", "Ptr"), "UInt*", 0, "UInt")
HKL:=ConvertFormat(DllCall("GetKeyboardLayout", "UInt", threadId, "UPtr"))

; просмотр результатов, жмём пробел для выхода
ListLines, Off
ListVars
SendEvent
, % "#{Right}"
KeyWait, Space, % "L"
KeyWait, Space, % "D"

ConvertFormat(p)
{
Static
s:=A_IsUnicode ? "W":"A"

DllCall("wsprintf"
s, "Str", res:="ahk4rever", "Str", "0x%08X", "UInt", p, "Cdecl")
Return,
res
}
Автор: Any_utka
Дата сообщения: 19.09.2013 18:53
OnMyDSeeAtAll

Цитата:

Цитата: Если вместо клавиши <Windows> (которой на моей клавиатуре вообще нет) назначить, допустим, клавишу <Pause>...
...при этом все системные сочетания тоже будут переназначены автоматически?

Эта клавиша Вам не подойдёт, потому как если сделать переназначение на неё, то не будет возможности эмулировать комбинации где Windows клавиша удерживается.
Автор: LonerDergunov
Дата сообщения: 20.09.2013 06:06
Наверное было много раз, но не могу найти.
Подскажите - как переназначить нажатие клавиши, но оставить её хоткеи?
Нужно переназначить клавишу Win, чтобы при её нажатии срабатывал клик RButton.
Но в то же время оставить рабочими все хоткеи в сочетании с Win (Win+R, Win+Pause и все прочие).
Автор: LonerDergunov
Дата сообщения: 21.09.2013 03:17
Можно ли через AHK получить дату файла, лежащего на сервере (через http) ?
Цель - сравнить дату файла на локальном компьютере и на сервере, и если на сервере новая версия - закачать её.
Автор: Any_utka
Дата сообщения: 21.09.2013 16:04
Уточню предыдущий вопрос, так как он, наверное, для местных гуру слишком сложный. Можно ли как-то задействовать клавишу Fn (синенькая такая
Пробовала определить ее код так, как посоветовал OnMyDSeeAtAll, но в окне истории нажатий клавиш нажатие на нее вообще никак не отражается. Это значит, что нельзя? Или можно, но нужен какой-нибудь хитрый трюк?


Заранее большое спасибо за совет!
Автор: vadim3sh
Дата сообщения: 22.09.2013 01:03
пишут так:


"sintet писал(а)вопрос конкретно про клавишу Fn. Возможно ли перехватить её код?

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

Я как-то пробовал - ничего не вышло,,
Автор: OnMyDSeeAtAll
Дата сообщения: 23.09.2013 13:45
@LonerDergunov
Цитата:
Нужно переназначить клавишу Win, чтобы при её нажатии срабатывал клик RButton...
У Вас же их две, сделайте на правую переназначение, левая останется стоковой:
Код: RWin::RButton
Автор: LonerDergunov
Дата сообщения: 24.09.2013 22:06
OnMyDSeeAtAll

Цитата:
Не скачивая файл, наверное нет

Похоже, как-то можно, нашёл обсуждения вот тут и тут. Теперь буду пытаться их осознать.


Цитата:
У Вас же их две, сделайте на правую переназначение, левая останется стоковой:
RWin::RButton

С RButton - это была моя описка, на самом деле хотел написать MButton. Хотя не суть важно.
Предложенное решение не подходит. Оно неуниверсальное в целом и не подходит в моём случае в частности.
В случае двух Win - в частных случаях решение сгодится. А если кнопка одна?
Например, переназначить какую-нибудь букву: r::MButton. При этом не будет работать хоткей Win+R.
Потому интересно как реализовать универсально подобные переназначения. Собственные потуги ни к чему не привели.
Такое впечатление, что-то подобное обсуждалось на русскоязычном форуме. Не могу найти поиском, может ткнёте в тему (если действительно обсуждалось).

А во-вторых, всё началось с моего частного случая, который не удаётся решить.
У мыши Logitech T400 средняя кнопка сенсорная и разделена на две части - без громоздких драйверов почти вся кнопка вызывает меню Пуск, и лишь маленькая зона работает непосредственно как средняя кнопка. Цель - сделать чтобы вся кнопка отрабатывала как MButton.
RWin::MButton - ни к чему не приводит.
LWin::MButton - работает, но "отваливаются" все хоткеи с использованием Win-кнопки. А на клавиатуре она только одна - левая (правой Win нету).
Автор: OnMyDSeeAtAll
Дата сообщения: 25.09.2013 15:46

Цитата:
Например, переназначить какую-нибудь букву: r::MButton. При этом не будет работать хоткей Win+R.

Код: #If GetKeyState("LWin")
vk52::vk52
#If
vk52::MButton
Автор: oshizelly
Дата сообщения: 25.09.2013 18:16
OnMyDSeeAtAll 15:46 25-09-2013
Цитата:

Цитата: Например, переназначить какую-нибудь букву: r::MButton.  При этом не будет работать хоткей Win+R.


Цитата:
#If GetKeyState("LWin")
   
vk52::vk52
#If
vk52::MButton

Автор: OnMyDSeeAtAll
Дата сообщения: 25.09.2013 21:31

Цитата:
...пояснить значение условий.
В данном случае условие тут одно.
Цитата:
...хочется понять точно.
Создаём контекстно-зависимую горячую клавишу (данная клавиша будет переназначена на саму себя), контекстом её будет возвращённый результат (булево значение) проверки состояния LWin возвращаемый встроенной функцией GetKeyState. Закрываем границу воздействия этой директивы прописывая ещё раз её название но без параметра (#If), в том случае если ниже в коде есть ещё какие-либо горячии клавиши, если оные расположены/прописаны выше данной директивы, то прописывать пустую директиву нет необходимости.
Автор: vadim3sh
Дата сообщения: 26.09.2013 13:50
Привет

При переключении между окнами windows 7 операционка запоминает язык ввода для каждого приложения и потом услужливо пь&#235;т кровь перключая раскладку автоматом.
Не знает ли кто-нибудь скрипта, который не только переключает раскладку, но и предотвращает от переключения раскладки виндой при переходе между окнами. Или какое-то другое решение...
А то использование LED на Caps LOck теряет всякий смысл из-за этой &#163;$%%??$$? "фичи".

Спасибо
Автор: OnMyDSeeAtAll
Дата сообщения: 27.09.2013 03:19
К примеру сделал-бы так:
Код: #SingleInstance, Force
IfEqual
, A_IsAdmin, % False, Run, % "*RunAs """A_ScriptFullPath """"
SetStoreCapslockMode,
Off
OnExit
, % "ExitScript"

""
.Base.
WM_INPUTLANGCHANGEREQUEST:=0x0050, "".Base.INPUTLANGCHANGE_FORWARD:=0x0002
"".Base.
HSHELL_WINDOWACTIVATED:=4, "".Base.suffix:=A_IsUnicode ? "W":"A"
""
.Base.
inputLocaleId:=CheckUpLayout()

DllCall("RegisterShellHookWindow", "Ptr", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage"("".
suffix), "Str", "SHELLHOOK", "UInt"), "ShellMessage")

~
CapsLock::
If A_TimeSincePriorHotkey Between 0 And 300
{
SendWindowMessage()
KeyWait, CapsLock
"".Base.
inputLocaleId:=CheckUpLayout()
Return
}
KeyWait, CapsLock
Return

ExitScript:
DllCall("DeregisterShellHookWindow", "Ptr", A_ScriptHwnd)
ExitApp

CheckUpLayout()
{
Return, DllCall("GetKeyboardLayout", "UInt"
, DllCall("GetWindowThreadProcessId", "Ptr", WinActive("A"), "UInt*", 0, "UInt")
, "UInt")
}

SendWindowMessage(param:="")
{
DllCall("SendMessage"("".
suffix), "Ptr", WinActive("A")
, "UInt", "".
WM_INPUTLANGCHANGEREQUEST
, "Ptr", param ? 0:"".INPUTLANGCHANGE_FORWARD
, "Ptr", param ? param:0)
}

ShellMessage(aParams*)
{
`(
aParams.1="".HSHELL_WINDOWACTIVATED) And CheckUpLayout()<>"".inputLocaleId And SendWindowMessage("".inputLocaleId)
}
Автор: vadim3sh
Дата сообщения: 27.09.2013 09:28
OnMyDSeeAtAll

Цитата:
К примеру сделал-бы так:



Спасибо буду пробовать и разбираться

P.S. (Через несколько часов ) Разбираюсь...(для меня это очень высокий уровень) При переходе из окна с англ раскладкой в русскую сохраняется англ. Если наоборот - то русская не сохраняется. Так и было задумано?
P.P.S Нет... Бабушка, никак... Если это не великая наглость, помогите разобраться:

A_ThisHotkey:

"When a hotkey is first created -- either by the Hotkey command or a double-colon label in the script -- its key name and the ordering of its modifier symbols becomes the permanent name of that hotkey"

Поскольку, вроде как, команды "Hotkey" не содержится, она где-то создается через :: , но где...?
или мне необходимо в

Код: CapsLock::
SendEvent, % "{"A_ThisHotkey "}"

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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