1 (изменено: flyer2001, 2013-01-06 10:35:21)

Тема: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Всех приветствую,

Приобрел педаль (http://www.pcsensor.com/index.php?_a=pr … oduct_id=2) для удобного управления воспроизведением плеера во время стенографирования аудиозаписей.
Этой педали можно с помощью встроенной программы присвоить любую клавишу и с помощью AHK нужно решить задачу, чтобы на время нажатия педали воспроизводила запись, а при отпускании снова восстанавливалась.

Назначил, чтобы педаль во время нажатия имитировала нажатие клавиши F10
В плеере foobar назначил глобальную горячую клавишу F9 - Play or Pause (т.е. при нажатии начинается воспроизведение, при очередном нажатии пауза и т.д.)

Для AHK написал вот такой простой код. Но очень буду рад, если сообщество поможет довести этот код до ума:


~f10::
send {f9}
keywait, f10
send {f9}
return

Код работает и вполне отлично. Есть несколько НО:
- если во время проигрывания начнешь нажимать педаль (кнопку) - получается обратное действие при нажатии запись останавливается при отпускании продолжает играть
- считаю костылями использование горячих клавиш для управления, думаю что можно управлять плеером напрямую посылая ему команды...ну либо использовать медиа-клавишу Play/Pause (надеюсь понятно выразился).

Прошу помочь доделать скрипт. Спасибо!

P.S.1 Сейчас ковыряюсь со старой мышкой. Такую педаль можно легко сделать из обычной кнопки (дверной звонок например) и старой usb-мышки. Но об этом позже.

P.S.2 Скажу что с педалью скорость набора стенограмм увеличилась на процентов 15, чем при использовании горячих клавиш.

2 (изменено: Indomito, 2013-01-03 20:03:53)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Ну первое что нужно это обеспечить не выгружаемость скрипта, так нажёжнее

;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance
return

~f10::
send {f9}
keywait, f10
send {f9}
return

Далее пишем хоткей для выхода, например Ctrl+F12

;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance
return

~f10::
 send {f9}
 keywait, f10
 send {f9}
return

^f12::
ExitApp

Теперь про ошибку. Клавиша F9 работает же в двух режимах запустить и остановить, а той скрипт об этом не знает... ИИ у AHK нет

Значит нужна переменная на сеанс работы скрипта - логическая, первое нажатие играть, а сл пауза хотя я не очень понимаю ведь так она и работает же или нужно удержание ?

Поясняю - пока нажата F10 играть, отжата пауза, верно?

Жду ответа, хотя если я прав то вместо keywait, f10 надо использовать GetKeyState

GetKeyState  Определяет состояние (нажата или отпущена) для клавиши клавиатуры или кнопки мыши/джойстика. Также определяет положение джойстика.

GetKeyState, OutputVar, KeyName [, Mode]
KeyIsDown := GetKeyState("KeyName" [, "Mode"])

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

3

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Indomito пишет:

Ну первое что нужно это обеспечить не выгружаемость скрипта, так нажёжнее


спасибо,  этого не хватало!

4 (изменено: Indomito, 2013-01-03 20:52:59)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

flyer2001 пишет:

спасибо,  этого не хватало!

Думаю стоит немного передать скрипт, не торопись радоваться - подумай.

flyer2001 пишет:

- считаю костылями использование горячих клавиш для управления, думаю что можно управлять плеером напрямую посылая ему команды...ну либо использовать медиа-клавишу Play/Pause (надеюсь понятно выразился).

конечно, только что бы послать на прямую надо знать как он/что он понимает.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

5 (изменено: Alectric, 2013-01-04 11:07:27)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Начать нужно с этого: "Какой плеер вы используете?".

"GetKeyState" имеет смысл использовать если вы использовали "Loop", а не горячую клавишу.

Попробуйте использовать такой вариант ожидания клавиши:

keywait,F10,L
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

6

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Alectric пишет:

Начать нужно с этого: "Какой плеер вы используете?".

Плеер foobar

Попробую поковыряюсь. Спасибо.

7 (изменено: flyer2001, 2013-01-05 17:46:30)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Немножко покопался, нашел два варианта обращения в плеер напрямую, а не через горячие клавиши

1) Командная строка:
Нашел ссылку, что команды плееру foobar2000 можно посылать с помощью командной строки - (http://foobar2000.ru/wiki/foobar2000/commandline)

Вводя эти команды получается через командную строку напрямую передавать команды прямо в плеер


D:\foobar2000>foobar2000.exe /play
D:\foobar2000>foobar2000.exe /pause

Проверил посылая эти команды через командную строку плеер начинает играть или всает на паузу соответственно

Стоит ли связываться с командной строкой или лучше все-таки через горячие клавиши управлять?

2) Медиа-клавиша {Media_Play_Pause}
Нашел в документации что с помощью команды send можно посылать нажатие медиа клавиши {Media_Play_Pause}, что делает это будет делать более уникальным скрипт и позволит использовать в других плеерах.
Но проблема, что эта кнопка работает только при активном окне плеера, что не подходит.

Если рассматривать этот вариант можно ли как-то сделать действие медиа-клавиши {Media_Play_Pause} глобальным?

8

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Indomito пишет:

Ну первое что нужно это обеспечить не выгружаемость скрипта, так нажёжнее


Теперь про ошибку. Клавиша F9 работает же в двух режимах запустить и остановить, а той скрипт об этом не знает... ИИ у AHK нет

Значит нужна переменная на сеанс работы скрипта - логическая, первое нажатие играть, а сл пауза хотя я не очень понимаю ведь так она и работает же или нужно удержание ?

Поясняю - пока нажата F10 играть, отжата пауза, верно?

Я наверное непонятно объяснил. Скрипт работает правильно только при условии если трек в это время не запущен.
Так как скрипт собираюсь использовать не для себя, то хотел бы сделать простую защиту на дурака и чтобы в случае, если до нажатия педали трек проигрывался - скрипт принудительно бы ставил трек на паузу и дальше отрабатывал как обычно. Но пока не нашел как это сделать принудительно. Ищу на форумах программа foobar

9

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

flyer2001 пишет:

в случае, если до нажатия педали трек проигрывался

То-есть, задача сводится к тому, чтобы определить, проигрывается ли в данный момент трек? На сколько я понял отсюда, реализовать это малореально.
Как альтернативу, можно использовать встроенный в Windows WMP, из него можно получить информацию.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Пытаясь обойти использование промежуточных горячих клавиш, назначаемых в плеере foobar есть вот такой вариант

~f8::
run, d:\foobar2000\foobar2000.exe /pause
keywait, f8, L
run, d:\foobar2000\foobar2000.exe /pause
return

работает как и требуется,  но мне кажется универсальнее будет посылать в неактивное окно плеера foobar нажатие медиа-клавиши  {Media_Play_Pause}, потому что эта клавиша не глобальная и работает только при активном окне плеера. Но перелопатив форум не нашел решения.

Есть такая команда controlsend, но вот в таком виде она не работает ни в какую

controlsend, , {Media_Play_Pause}, ahk_class {97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}

11

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Для определения кода клавиши воспользуйся скриптом

#Persistent
   OnExit, Exit
   hHookKeybd := DllCall("SetWindowsHookEx"
      , Int, WH_KEYBOARD_LL := 13
      , UInt, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , UInt, DllCall("GetModuleHandle", UInt, 0)
      , UInt, 0)
   Return
 
Exit:
   DllCall("UnhookWindowsHookEx", UInt, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam)
{
   Critical
   SetFormat, Integer, H
   ToolTip, % wParam . "| vkCode: " . NumGet(lParam+0, 0) . " scCode: " . NumGet(lParam+0, 4)
      . " Extended: " . NumGet(lParam+0, 8) & 1 . " Time: " . NumGet(lParam+0, 12)
   Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

и посылай или vk или sc коды.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

12

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Indomito пишет:

Для определения кода клавиши воспользуйся скриптом и посылай или vk или sc коды.

Не понял что делает этот скрипт....и где найти vk или sc-код клавиши {media_play_pause} тоже ))

13

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

flyer2001 пишет:

Не понял что делает этот скрипт....и где найти vk или sc-код клавиши {media_play_pause} тоже ))

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

14 (изменено: Indomito, 2013-01-05 19:39:54)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Сейчас подключу пульт и напишу нужные тебе коды.

Запустить плеер
0x101
vkCode 0xB5
scCode 0x0

Play|Pause
0x101
vkCode 0xB3
scCode 0x0

Ну и тд.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

15

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Indomito пишет:

Сейчас подключу пульт и напишу нужные тебе коды.

Спасибо!
А эти коды разные будут на разных клавиатурах или как?.... и как не подставлял ControlSend не хочет отправлять в неактивное окно никаких команд. Подскажи пожалуйста, как правильно написать команду?
И вообще стоит ли такой способ использовать (не проиграет ли в плане универсальности скрипта)?

16 (изменено: Indomito, 2013-01-05 23:36:48)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

flyer2001 пишет:

Спасибо!

не за что, я по сути взял код из скрипта который превращает беспроводную (очень маленькую клавиатуру, специально такую искал) в пульт для управления плеером Media Player Classic - Home Cinema x64. Просто кнопки по дефолту (мультимедийные) работали не так как было нужно, да и их было мало.

А эти коды разные будут на разных клавиатурах или как?...

проверял на трёх разных клавиатурах - всё ОК. 

Подскажи пожалуйста, как правильно написать команду?

обычный send

И вообще стоит ли такой способ использовать (не проиграет ли в плане универсальности скрипта)?

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

Так вот код, например.

Было (взял твой за основу)

~f8::
run, d:\foobar2000\foobar2000.exe /pause
keywait, f8, L
run, d:\foobar2000\foobar2000.exe /pause
return

Стало

~f8::
send, {vkB3} ;run, d:\foobar2000\foobar2000.exe /pause
keywait, f8, L
send, {vkB3} ;run, d:\foobar2000\foobar2000.exe /pause
return
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

17

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Indomito пишет:

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

Так и сделаю


Так вот код, например.

Было (взял твой за основу)

~f8::
run, d:\foobar2000\foobar2000.exe /pause
keywait, f8, L
run, d:\foobar2000\foobar2000.exe /pause
return

Стало

~f8::
send, {vkB3} ;run, d:\foobar2000\foobar2000.exe /pause
keywait, f8, L
send, {vkB3} ;run, d:\foobar2000\foobar2000.exe /pause
return

так код который был взят за основу он и так работал без проблем, потому что напрямую через командную строку передавал плееру команду "пауза" через командную строку.

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

Можно командой send посылать в неактивное окно нажатие клавиш?

18

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Для неактивного нужна команда ControlSend.

19

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

YMP пишет:

Для неактивного нужна команда ControlSend.

это я понял, только вот такой код не передает команду плееру (ничего не происходит), хотя если окно плеера активно, жму кнопку на клавиатуре - плеер встает на паузу

~f8::
controlsend, , {vkB3}, ahk_class {97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}
return

ahk_class взял из autoit window spy


>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
?? ??? ????? ??? ?????   [foobar2000 v0.9.6.8]
ahk_class {97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}

20

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Попробуйте в первый параметр ahk_parent поставить. Или посмотрите, какие в окне контролы есть, и их идентификаторы туда повставляйте.

21 (изменено: Alectric, 2013-01-06 14:03:53)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

OFF: Просьба к модераторам: "Сделайте пожалуйста функцию удаления своего поста, а то глупость написал, а удалить пост никак невозможно."

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

22

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Сообщения можно редактировать. Этого достаточно.

23

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

YMP пишет:

Попробуйте в первый параметр ahk_parent поставить. Или посмотрите, какие в окне контролы есть, и их идентификаторы туда повставляйте.

Первый параметр это так?

~f8::
controlsend, ahk_parent, {vkB3}, ahk_class {97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}
return

Просто я в этом деле ньюб, как узнать какие контролы у окна есть? ))

24

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Да, так. Контролы Window Spy показывает в строке, где ClassNN.

25 (изменено: flyer2001, 2013-01-08 16:28:34)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

http://img-fotki.yandex.ru/get/4116/18896453.17/0_98c9a_24792166_XXL.jpg

Подскажите по синтаксису чтобы послать контрол Play


~f8::
controlsend, {ClassNN}, , {ahk_class}
return

Верно?

Как заморозить окно AutoIt windows spy (shift+atl+tab не работают) ? ))) даже не знаю как эти цифири скопировать...конечно есть вариант набрать в ручную с скриншота.

26

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

На картинке не разобрать ничего, слишком мелко.
Скопировать — выделить мышью и через меню правой кнопки.

27 (изменено: Irbis, 2013-01-08 22:15:47)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Есть чуть более продвинутый инструмент, в нем контроллы подсвечиваются, и пауза по Ctrl+Alt+F работает
ссылка

28

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Битый архив, вроде, не открывается.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

Залил на другой ресурс вместо аттача.

30 (изменено: Indomito, 2013-01-09 04:38:40)

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

flyer2001 пишет:

плеере foobar...

вопрос может не в тему.
Почему ты используешь данный плеер?
Например с Media Player Classic - Home Cinema было бы всё намного проще и у него есть настраиваемый ini с которого можно считать кучу инфы о текущем файле + хоткей на все основные функции, а на что нет клавиши можно сделать в том же ini файле...
Ну я думаю ты меня понял.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

31

Re: AHK: Педаль (кнопка) для проигрывания плеера при удержании

flyer2001 пишет:

2) Медиа-клавиша {Media_Play_Pause}...
... эта кнопка работает только при активном окне плеера, что не подходит.

Работает (w7 x64) везде.

@flyer2001 Не знаю поможет, опробуйте ещё такой вариант:

; работает: foobar2000, Windows Media Player, может ещё с чем-нибудь...

WM_APPCOMMAND                 :=0x319
APPCOMMAND_MEDIA_NEXTTRACK    :=11<<16
APPCOMMAND_MEDIA_PREVIOUSTRACK:=12<<16
APPCOMMAND_MEDIA_STOP         :=13<<16
APPCOMMAND_MEDIA_PLAY_PAUSE   :=14<<16
APPCOMMAND_MEDIA_PLAY         :=46<<16
APPCOMMAND_MEDIA_PAUSE        :=47<<16
APPCOMMAND_MEDIA_FAST_FORWARD :=49<<16
APPCOMMAND_MEDIA_REWIND       :=50<<16

sc39:: ; space
   PostMessage, WM_APPCOMMAND
;               ,, APPCOMMAND_MEDIA_NEXTTRACK
;               ,, APPCOMMAND_MEDIA_PREVIOUSTRACK
;               ,, APPCOMMAND_MEDIA_STOP
              ,, APPCOMMAND_MEDIA_PLAY_PAUSE
;               ,, APPCOMMAND_MEDIA_PLAY
;               ,, APPCOMMAND_MEDIA_PAUSE
;               ,, APPCOMMAND_MEDIA_FAST_FORWARD
;               ,, APPCOMMAND_MEDIA_REWIND
              ,, ahk_class Progman
   KeyWait, % A_ThisHotkey
   Return

Раскомментируйте другие команды на пробу, если работает, расселите их на другие клавиши... Примерно так. Подробнее о WM_APPCOMMAND: EN/RU.