![]() |
AHK и RR
Никак не могу заставит работать ControlSend с RR
Никто не сталкивался? Задача: Урпавлять RR не активируя окно. |
есть вариант
ControlSend, ahk_parent, z, ahk_class Winamp v1.x но он не катит т.к. идёт тормоз отображения в RR |
Цитата:
^!+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 Вариант 2: Код:
ControlSend, ahk_parent, z, ahk_class Winamp v1.x Вариант 3: Код:
ControlSend, ahk_parent, ^{Left}, ahk_class ThunderRT6FormDC |
Подожди, у тебя какая задача?
Если надо активировать РР и нужное окно скина в нем, то все просто: Только что попробовал, все получается: 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). Тормозить вообще не должно! Это самый низкий из возможных уровней. А тебе надо оперировать именно РР, но при этом не делая его активным? Просто пока не втыкаю зачем это надо... |
Цитата:
Вот как управлять РР не делая активным не нашел ((( А во многих случаях было бы полезно.... |
а я тут задумался и не нашел как сделать одну штуку:
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 2. Нужно порыться в командах РР... Но как решение "в лоб через Ж..." можно на радио и адио повесить хоткеи в (KeyTBL.ini), а после активации их сразу закрывать(return)... Вероятно в AHK между этими операциями придётся делать sleep. но это очень некрасивое решение... |
У меня в РР даже когда я на кнопки нажимаю prev-next вне самого окна radio, он не переключается на предыдущую/следующую станцию, а увеличивает/уменьшает частоту на 0.1 мегагерца :-(.
|
Цитата:
Код:
2037,"RRPREV" |
Собрался тут, попробовал все.
Итог: 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.p...3009#post13009 Код:
^!+f:: ; RR command NEXT |
По поводу управления 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 почему-то перестает быть активным, в отличие от любого другого приложения :-). |
Часовой пояс GMT +4, время: 20:18. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot