Просмотр полной версии : AHK и RR
Никак не могу заставит работать ControlSend с RR
Никто не сталкивался?
Задача: Урпавлять RR не активируя окно.
есть вариант
ControlSend, ahk_parent, z, ahk_class Winamp v1.x
но он не катит т.к. идёт тормоз отображения в RR
SBorovkov
25.09.2008, 13:51
есть вариант
ControlSend, ahk_parent, z, ahk_class Winamp v1.x
но он не катит т.к. идёт тормоз отображения в RR
Сюда ходи... http://compcar.ru/forum/showthread.php?p=13024
^!+f:: ; NEXT теперь передаём сразу винампу
PostMessage, 0x111, 40048,,, ahk_class Winamp v1.x ; следующий трек
return
^!+g:: ; PREV теперь передаём сразу винампу
PostMessage, 0x111, 40044,,, ahk_class Winamp v1.x ; предыдущий трек
return
^!+h:: ; PLAY/PAUSE теперь передаём сразу винампу
SendMessage, 0x400,, 104,, ahk_class Winamp v1.x ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class Winamp v1.x ; включить воспроизведение
Else ; если воспроизводится, то...
PostMessage, 0x111, 40046,,, ahk_class Winamp v1.x ; поставить на паузу
return
Сюда ходи... http://compcar.ru/forum/showthread.php?p=13024
^!+f:: ; NEXT теперь передаём сразу винампу
PostMessage, 0x111, 40048,,, ahk_class Winamp v1.x ; следующий трек
return
^!+g:: ; PREV теперь передаём сразу винампу
PostMessage, 0x111, 40044,,, ahk_class Winamp v1.x ; предыдущий трек
return
^!+h:: ; PLAY/PAUSE теперь передаём сразу винампу
SendMessage, 0x400,, 104,, ahk_class Winamp v1.x ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class Winamp v1.x ; включить воспроизведение
Else ; если воспроизводится, то...
PostMessage, 0x111, 40046,,, ahk_class Winamp v1.x ; поставить на паузу
return
попробую, но это похоже на описанное мной выше и идёт торможение....
в любом случае хочется найти как управлять именно RR, т.к. кроме управления музыкой хочется ещё и переключаться в скринах RR. но тут возникает проблема в активности. Тоесть если включен GPS то активно окно навигационной проги...
(За точность кода не отвечаю, но приерно...)
Вариант 1:
WinActivate ahk_class TForm1
Send {F11}
Тормозит(не сильно, но при прокручивании на несколько треков очень заметно и неприятно), и не работает если RR свёрнут.
Вариант 2:
ControlSend, ahk_parent, z, ahk_class Winamp v1.x
подходит только для управления музыкой. так жк как и глобальные хоткеи в более новых Winamp
Вариант 3:
ControlSend, ahk_parent, ^{Left}, ahk_class ThunderRT6FormDC
Вобще работает через раз....
SBorovkov
27.09.2008, 01:41
Подожди, у тебя какая задача?
Если надо активировать РР и нужное окно скина в нем, то все просто:
Только что попробовал, все получается:
script.ahk:
F7::
{
ifWinExist, ahk_class ThunderRT6FormDC
{
WinActivate
Send, {Esc}
return
}
else
{
MsgBox, not found
return
}
}
return
При этом KeyTbl.ini имеет такую строчку:
27,"AUDIO"
(У меня стоит DigitalFX3)
Работает так: в любой проге винды жму f7, если РР был запущен, то на экран вылезает РР, в нем активируется окно аудио.
С тем же успехом можно было прописать туда переход в навигашку другой строкой
27,"MyApp48"
а "MyApp48" в Exec.tbl прописан следующим образом:
"MyApp48","LOAD;iGO.skin;iGO8;C:\igo\iGo_pc.exe;iGO8||ACTIVAT E;iGO8"
Тогда при нажатии F7 активируется РР и Igo в нем...
А зачем ты РР сворачиваешь? Просто у меня все необходимое (типа IGo) встроено в РР и переключения между экранами (музыкой, навигацией и прочим) делается на раз через KeyTBL.ini.
Хотя тот же Ozi нормально не встраивается в РР, насколько я знаю :-(.
Музыкой точно лучше управлять напрямую винампом, посылая ему сообщения (SendMessage-PostMessage). Тормозить вообще не должно! Это самый низкий из возможных уровней.
А тебе надо оперировать именно РР, но при этом не делая его активным? Просто пока не втыкаю зачем это надо...
Музыкой точно лучше управлять напрямую винампом, посылая ему сообщения (SendMessage-PostMessage). Тормозить вообще не должно! Это самый низкий из возможных уровней.
А тебе надо оперировать именно РР, но при этом не делая его активным? Просто пока не втыкаю зачем это надо...
Тормозит не переключение, а отображение этого дела в RR. Тоесть играет уже другой трек, а написан предыдущий...
Вот как управлять РР не делая активным не нашел ((( А во многих случаях было бы полезно....
SBorovkov
05.10.2008, 22:28
а я тут задумался и не нашел как сделать одну штуку:
1. Кнопки на джойстике prev, next должны работать и для MP3 и для радио, причем для радио - переключать памяти.
2. Кнопка source должна менять источник звука, mp3-radio, ну или на крайний случай - должны быть две кнопки, одна переключает на радио, другая - на mp3
Вот как сделать это, пусть даже с активацией RR, но без выхода из имплантированной в RR навигации?... Пока ума не приложу.
а я тут задумался и не нашел как сделать одну штуку:
1. Кнопки на джойстике prev, next должны работать и для MP3 и для радио, причем для радио - переключать памяти.
2. Кнопка source должна менять источник звука, mp3-radio, ну или на крайний случай - должны быть две кнопки, одна переключает на радио, другая - на mp3
Вот как сделать это, пусть даже с активацией RR, но без выхода из имплантированной в RR навигации?... Пока ума не приложу.
1. prev, next проще простого -
ControlSend, ahk_parent, ^{Left}, ahk_class ThunderRT6FormDC
или
WinActivate ahk_class ThunderRT6FormDC
Send ^{Left}
Насколько я помню с радио работает точно так же как и mp3
2. Нужно порыться в командах РР...
Но как решение "в лоб через Ж..." можно на радио и адио повесить хоткеи в (KeyTBL.ini), а после активации их сразу закрывать(return)... Вероятно в AHK между этими операциями придётся делать sleep. но это очень некрасивое решение...
SBorovkov
06.10.2008, 00:15
У меня в РР даже когда я на кнопки нажимаю prev-next вне самого окна radio, он не переключается на предыдущую/следующую станцию, а увеличивает/уменьшает частоту на 0.1 мегагерца :-(.
У меня в РР даже когда я на кнопки нажимаю prev-next вне самого окна radio, он не переключается на предыдущую/следующую станцию, а увеличивает/уменьшает частоту на 0.1 мегагерца :-(.
а в KeyTBL.ini
2037,"RRPREV"
2039,"RRNEXT"
остались?
SBorovkov
10.10.2008, 14:15
Собрался тут, попробовал все.
Итог:
1. для того, чтобы переключать радио и mp3 одинаковым образом, команду на переключение трека надо давать не винампу, а РР.
2. Когда я переключаю трек кликая на кнопку РР, то у него срабатывает скрипт, который работает по-разному в зависимости от того, что за .skin файл находится на экране. К примеру, igo.skin после отдавания команды Next затем активирует igo_pc.exe. Я же могу либо клинкуть на экране, либо каким-либо образом послать в РР напрямую команду Next.
Получается, что когда я шлю в RR команду Next, то igo перестает быть активным приложением и перестает работать.
Я пробовал посылать ему текстовую команду напрямую, через wm_copydata. Итог тот же - RR становится активным приложением (видимо, у него это изнутри заложено) и IGO перестает работать...
Получается, что надо клинать на экране?...
То есть я получил ту же проблему, надо управлять RR, не вызывая его активацию.
я igo не пользую, а ситигид работает нормально неактивным.
может попробовать обратно активировать навигашку как тут:
http://compcar.ru/forum/showthread.php?p=13009#post13009
^!+f:: ; RR command NEXT
IfWinExist, RoadRunner
{
WinGet, active_pid, PID, A
WinActivate, RoadRunner
WinWaitActive, RoadRunner, , 2
Send n
WinActivate, ahk_pid %active_pid%
}
return
SBorovkov
10.10.2008, 22:52
По поводу управления RR без акти вации его: я таки ступил, mw_copydata не активирует RR!
вот код.
Send_WM_COPYDATA( ParameterToSent, TargetTC ) ; функция высылки Тоталу пользовательской команды em_xyz
{
VarSetCapacity( CopyDataStruct, 12 ) ; устанавливаем размер высылаемой структуры данных
InsertInteger( 1, CopyDataStruct ) ; вставляем в структуру то, что требует ТС для исполнения команд
InsertInteger( StrLen( ParameterToSent ), CopyDataStruct, 4 ) ; добавляем собственно команду (+ символ конца строки)
InsertInteger( &ParameterToSent, CopyDataStruct, 8 ) ; добавляем указатель на собственно команду
SendMessage, 0x4A,, &CopyDataStruct,, %TargetTC% ; шлём команду Тоталу, обязательно Send, а не Post (0x4A = WM_COPYDATA)
Return, ErrorLevel ; выходим из функции и возвращаем ответ SendMessage'а
}
;-----------------------------------------------------------------------------
InsertInteger( pInteger, ByRef pDest, pOffset = 0, pSize = 4 ) ; функция заполнения структуры данными
{
Loop, 4 ; копируем каждый байт целого числа в структуру как сырые двоичные данные
{
DllCall("RtlFillMemory" ; заполняем структуру нашими данными
, "UInt" , &pDest + pOffset + A_Index-1 ; указатель на адрес, с которого начинается заполнение
, "UInt" , 1 ; размер заполняемой структуры в байтах
, "UChar", pInteger >> 8*( A_Index-1 ) & 0xFF) ; содержимое заполняемого байта
}
}
F7::
{
ifWinExist, ahk_class ThunderRT6FormDC
{
Send_WM_COPYDATA( "Next", "RoadRunner" ) ; шлём команду РР
return
}
else
{
MsgBox, not found
return
}
}
F6::
{
ifWinExist, ahk_class ThunderRT6FormDC
{
Send_WM_COPYDATA( "Prev", "RoadRunner" ) ; шлём команду РР
return
}
else
{
MsgBox, not found
return
}
}
Пробовал запускать и жать F6 и F7, текущее приложение не меняется, РР активным не становится, это то, что тебе надо!
зы. но Igo почему-то перестает быть активным, в отличие от любого другого приложения :-).
Работает на vBulletin® версия 3.8.4. Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot