PDA

Просмотр полной версии : AHK и RR


vad3
08.09.2008, 14:08
Никак не могу заставит работать ControlSend с RR
Никто не сталкивался?
Задача: Урпавлять RR не активируя окно.

vad3
09.09.2008, 03:58
есть вариант
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

vad3
26.09.2008, 21:11
Сюда ходи... 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). Тормозить вообще не должно! Это самый низкий из возможных уровней.

А тебе надо оперировать именно РР, но при этом не делая его активным? Просто пока не втыкаю зачем это надо...

vad3
05.10.2008, 22:16
Музыкой точно лучше управлять напрямую винампом, посылая ему сообщения (SendMessage-PostMessage). Тормозить вообще не должно! Это самый низкий из возможных уровней.

А тебе надо оперировать именно РР, но при этом не делая его активным? Просто пока не втыкаю зачем это надо...

Тормозит не переключение, а отображение этого дела в RR. Тоесть играет уже другой трек, а написан предыдущий...

Вот как управлять РР не делая активным не нашел ((( А во многих случаях было бы полезно....

SBorovkov
05.10.2008, 22:28
а я тут задумался и не нашел как сделать одну штуку:

1. Кнопки на джойстике prev, next должны работать и для MP3 и для радио, причем для радио - переключать памяти.
2. Кнопка source должна менять источник звука, mp3-radio, ну или на крайний случай - должны быть две кнопки, одна переключает на радио, другая - на mp3

Вот как сделать это, пусть даже с активацией RR, но без выхода из имплантированной в RR навигации?... Пока ума не приложу.

vad3
06.10.2008, 00:09
а я тут задумался и не нашел как сделать одну штуку:

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 мегагерца :-(.

vad3
06.10.2008, 00:49
У меня в РР даже когда я на кнопки нажимаю 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, не вызывая его активацию.

vad3
10.10.2008, 15:18
я 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 почему-то перестает быть активным, в отличие от любого другого приложения :-).