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

» AutoHotkey

Автор: OnMyDSeeAtAll
Дата сообщения: 12.11.2015 00:54
[more=Так]
Код: #Persistent
; SetTitleMatchMode, 2
SetTimer
, % "PressTheKey", 900000
Return

PressTheKey:
IfWinActive, % "Fallout4",,,, Send, {F5}
Return
Автор: shaggoth
Дата сообщения: 12.11.2015 20:35
Нет, всё равно не хочет жмакать
Автор: OnMyDSeeAtAll
Дата сообщения: 13.11.2015 06:55
Тогда снимите комментарий (;) со второй строки.
Автор: Samotek
Дата сообщения: 14.11.2015 11:54
Привет! Может кто-то работал с PotPlayer. Хочу послать клавиши именно ему, а не всему на компе - send работает, а для ControlSend никак не могу послать клавишу. Все ниже описанные варианты не работают!
potwin = PotPlayer
ControlSend, Afx:63250000:8:00010005:01900011:000000003, {F9}, ahk_class %PotWin%
ControlSend, class_nn Afx:63250000:8:00010005:01900011:000000003, {F9}, ahk_class %PotWin%
ControlSend, AfxWnd120su5, {F9}, ahk_class %PotWin%
ControlSend, AfxWnd120su4, {F9}, ahk_class %PotWin%
ControlSend, , {F9}, ahk_class %PotWin%
ControlSend, ahk_parent, {F9}, ahk_class %PotWin%

То-есть даже не понимаю какому контролу посылать! Из того, что показал WinSpy. Подскажите, пожалуйста, как реализовать?
Автор: Krot66
Дата сообщения: 14.11.2015 15:23
У PotPlayer скиновый интерфейс, а не "правильные" контролы Windows.
Куда проще использовать конструкции, позволяющие привязывать множество клавиш к активному окну:

Код:
#IfWinActive ahk_class PotPlayer
Hotkey::Send {F9}
..........
..........
#IfWinActive
Автор: Samotek
Дата сообщения: 14.11.2015 17:24
Krot66
Спасибо, но к активному не интересно. (((
Автор: D1D1D1D
Дата сообщения: 17.11.2015 19:10
Samotek
Попробуйте так:

Код: 1::
PostMessage, 0x111, 10195,,, ahk_class PotPlayer
RETURN
Автор: Krot66
Дата сообщения: 17.11.2015 19:32
D1D1D1D
Путей в общем-то два:
1. Если приложение, как MPC, позволяет выводить полный путь в названии окна, с помощью RegExMatch вытащить его оттуда.
2. Если приложение запущено вместе с файлом, можно вытащить его из командной строки с помощью такой функции:

Код: GetPath(title)
{
    WinGet pr, ProcessName, % title
    Process, Exist, % pr
    pid := ErrorLevel
    for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
    If (process.ProcessId = pid)
    cmdline := process.CommandLine
    If cmdline contains Explorer.exe
        cmdline:=""
    fp:=RegExMatch(cmdline,"i)[a-z]:\\.*\.[a-z0-9]{2,5}",f_path,6)
    return f_path
}
Автор: D1D1D1D
Дата сообщения: 17.11.2015 20:00
Krot66

А если забросить в окно очередное видео или перейти к нему через закладку, будет ли работать? (сам проверить затруднился)
Автор: Krot66
Дата сообщения: 17.11.2015 20:56
Нет, эта примочка определяет путь через аргумент командной строки запуска программы (тот, что показывают продвинутые диспетчеры задач вроде Process Explorer'a). Когда подгружается другой файл, там ничего не меняется
Автор: Samotek
Дата сообщения: 18.11.2015 09:18
D1D1D1D

Цитата:
Попробуйте так:

Спасибо, попробую.
Автор: helbvtynec
Дата сообщения: 18.11.2015 10:16
Samotek

Цитата:
ControlSend, , {F9}, ahk_class PotPlayer

должно работать, команда просто не дружит с переменными

D1D1D1D
Если про PotPlayer речь, с именем не изощряйтесь, используйте заголовок — он и так из имени файла и названия плеера состоит. RegEx вида "(.+)\s-\sDaum\sPotPlayer$"
Автор: Samotek
Дата сообщения: 18.11.2015 10:46
helbvtynec

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

Но не работает!
Автор: Krot66
Дата сообщения: 18.11.2015 12:10
При правильном синтаксисе никакой разницы между переменными и постоянными нет и быть не может
Автор: Samotek
Дата сообщения: 18.11.2015 14:41
D1D1D1D

Цитата:
Для получения кодов сообщений нужна программа Winspector.

А нельзя ли прямую ссылку? А то по дурости вирусняка нахватал (((
Автор: D1D1D1D
Дата сообщения: 18.11.2015 16:10
Samotek
http://rghost.ru/6R8YlcqwG

helbvtynec
Для PotPlayer я сейчас путь получаю, открывая диалоговое окно по F3, извлекая из него путь с названием и прочее.
Автор: Samotek
Дата сообщения: 18.11.2015 18:47
D1D1D1D

Цитата:
Samotek
http://rghost.ru/6R8YlcqwG

Спасибо, скачал, буду разбираться...
Автор: Lichtenshtein
Дата сообщения: 12.12.2015 16:37
Как правильно забиндить две кнопки на одну? Нужно повесить кнопки W и G на среднюю кнопку мыши.
Автор: OnMyDSeeAtAll
Дата сообщения: 15.12.2015 15:28
Как-то [more=так]
Код: ; в этом варианте отправляются короткие нажатия
MButton::Send, % "{vk57}{vk47}" ; vk57 - w/ц, vk47 - g/п
Автор: user7c7
Дата сообщения: 02.01.2016 14:55
Подскажите, а можно сделать так, чтобы правый shift работал как enter при одиночном нажатии и как обычный shift в сочетании с другими клавишами?
Автор: helbvtynec
Дата сообщения: 03.01.2016 14:13
user7c7
Можно, и даже аналогично для Enter:

Код: Enter::
    if (!enterdown)
    {
        enterdown := true
        enterdowntime := A_TickCount
        Send {shift down}
    }
return
Enter up::
    enterdown := false
    Send {shift up}
    if (A_TickCount - enterdowntime < 350 and A_PriorKey == "Enter")
        Send {Enter}
return


~RShift::
    if (!shiftdown)
    {
        shiftdown := true
        shiftdowntime := A_TickCount
    }
return
~RShift up::
    shiftdown := false
    if (A_TickCount - shiftdowntime < 350 and A_PriorKey == "RShift")
        Send {Enter}
return
Автор: Risovod
Дата сообщения: 08.01.2016 10:12
Здравствуйте помогите составить скрипт для закрытия окна. Дело в том, что у окна нет названия и это затрудняет мне самому сделать скрипт. Окно появляется один раз - при загрузке ОС.
[more=Информация об окне, которое при появлении нужно закрыть] [/more]
Автор: OnMyDSeeAtAll
Дата сообщения: 11.01.2016 02:59

Цитата:
Дело в том, что у окна нет названия...
У Вас уже есть имя класса (#32770) следует добавить ещё критерий соответствия по имени процесса. На картинке Active Window Info устаревшей версии и он не показывает название процесса окна. Следует обновить дистрибутив AHK. Затем выяснив имя процесса можно уже будет пробовать закрывать нужное окно поместив ссылку на скрипт (либо сам сценарий) в папку Автозагрузки. [more=Пример] [/more] с микшером громкости.
Автор: Dror54
Дата сообщения: 17.01.2016 00:32
AutoHotkey 1.1.23
[more=Ченчлог]Added Menu Insert sub-command.

Added MenuGetHandle().

Added MenuGetName().

Added menu item options: Radio, Right, Break and BarBreak.

Improved the Menu command to allow identifying items by position: 1&

Added LoadPicture().

Added hicon/hbitmap: syntax for passing handles to commands which normally load an image from file.

Added built-in variables: A_CoordModeToolTip/Pixel/Mouse/Caret/Menu, A_DefaultGui, A_DefaultListView, A_DefaultTreeView, A_KeyDelayPlay, A_KeyDuration/Play, A_MouseDelayPlay, A_SendLevel, A_SendMode and A_StoreCapslockMode.

Added Ix Hotkey option to set the hotkey variant's input level to x.

Improved Picture control to support BackgroundTrans with icons.

Improved Picture control to reduce flicker when loading large images.

Small optimizations to the menu code and built-in var lookups.

Fixed conversion of menu items to/from separators.

Fixed A_ThisMenuItemPos to support duplicate item names.

Fixed sub-menus sometimes not being recreated after a menu is deleted.

Fixed AutoHotkeyXXX.exe to launch AutoHotkey.chm, not AutoHotkeyXXX.chm.[/more]
Автор: vadim3sh
Дата сообщения: 28.01.2016 03:42
OnMyDSeeAtAll

Цитата:
Как-то так, наверное.

Не могу даже сформулировать запрос в Google... а можно сделать так, чтобы какое-то действие происходило дополнительно к основному функционалу кнопки мышки?
Ну, например, когда жмем левую кнопку, дополнительно происходило нажатие клавиши "W".

OnMyDSeeAtAll
Спасибки. Как всегда, шляпа долой!
Автор: OnMyDSeeAtAll
Дата сообщения: 28.01.2016 12:42
@vadim3sh Правим [more=код]
Код: ~LButton::Send, % "{vk57}"
Автор: monsoon
Дата сообщения: 29.01.2016 09:19
Есть скрипт, показывающий координаты каретки кликом левой кнопки мыши:

Код:
~LButton::
Sleep, 100
CoordMode, Caret
(A_CaretX = "" && AccObjectFromPoint())
ToolTip % "A_CaretX = " A_CaretX "`nA_CaretY = " A_CaretY
Return

AccObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
{
static VT_DISPATCH := 9, h := DllCall("LoadLibrary", Str, "oleacc", Ptr)

(x = "" || y = "") ? DllCall("GetCursorPos", Int64P, pt) : pt := x & 0xFFFFFFFF | y << 32

VarSetCapacity(varChild, 8 + 2*A_PtrSize, 0)
if DllCall("oleacc\AccessibleObjectFromPoint", Int64, pt, PtrP, pAcc, Ptr, &varChild) = 0
Return ComObjEnwrap(VT_DISPATCH, pAcc, 1), _idChild_ := NumGet(varChild, 8, "UInt")
}
Автор: m00slim25
Дата сообщения: 06.02.2016 16:04
Доброго дня!
Вопрос такой: имеем [more=скрипт]

#NoEnv
#Warn
SetWorkingDir %A_ScriptDir%
UIMenuState := 0

SendMode, Event
SetKeyDelay, 0, 50

SetScrollLockState, Off    ; Используется для индикации работы скрипта
Suspend                    ; Выключаем по умолчанию

~ScrollLock::Suspend    ; Собственно сам выключатель

; При посадке (включается клавишей выпуска шасси) клавиши {r}{w} работают как боковые трастеры
; поэтому лучше вообще отключать скрипт

; **********************************************

#IfWinActive, Elite - Dangerous (CLIENT)

; Игра позволяет назначить несколько функций на одну клавишу
; в зависимости от того в каком режиме полета, либо элементе интерфейса мы находимся

~2::                    ; ****************************
~3::                    ; Проверка - в меню ли мы (их в интерфейсе корабля 3 шт)
~4::                    ; ****************************
If UIMenuState = 0
UIMenuState := 1
Else
UIMenuState := 0    ; Из меню можно выйти кнопкой самого меню {2}{3}{4} или кнопкой выхода {LShift}
Return

~LShift::                ; У клавиши 2 функции: 1. Вертикальный трастер 2. Выход из меню
UIMenuState := 0
KeyWait, LShift
Return

~*z::                    ; Подаем энергию на подсистему двигателей
Send, {Up}{Up}{Up}{Up}
Return

~*w::                    ; Если мы в меню - листаем вкладки меню влево. Иначе - подаем энергию на подсистему щитов
If UIMenuState = 0
Send, {Left}{Left}{Left}{Left}
Return

~*r::                    ; Если мы в меню - листаем вкладки меню вправо. Иначе - подаем энергию на подсистему орудий
If UIMenuState = 0
Send, {Right}{Right}{Right}{Right}
Return
[/more]

Все работает. Все прекрасно. Есть лишь одно маленькое неудобство - если зажат Shift (работает вертикальный трастер), и нажать любую из клавиш {r, w, z}, то действие Shift'а кратковременно прерывается, а после отпускания {r, w, z} - возобновляется.
Возможно ли как то избежать этой паузы в обработке Shift ?
Автор: helbvtynec
Дата сообщения: 08.02.2016 09:55
m00slim25
Использовать {blind} в команде Send, тогда никакие модификаторы не будут виртуально отжиматься.
Автор: m00slim25
Дата сообщения: 08.02.2016 11:42
helbvtynec

Цитата:
Использовать {blind} в команде Send

Помогло. Премного благодарен!

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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