PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Разработка программ (http://pccar.ru/forumdisplay.php?f=27)
-   -   AHK и RR (http://pccar.ru/showthread.php?t=6185)

vad3 08.09.2008 14:08

AHK и RR
 
Никак не могу заставит работать 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

Цитата:

Сообщение от vad3 (Сообщение 71854)
есть вариант
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

Цитата:

Сообщение от SBorovkov (Сообщение 72999)
Сюда ходи... 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

Цитата:

Сообщение от SBorovkov (Сообщение 73112)
Музыкой точно лучше управлять напрямую винампом, посылая ему сообщения (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

Цитата:

Сообщение от SBorovkov (Сообщение 73882)
а я тут задумался и не нашел как сделать одну штуку:

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

Цитата:

Сообщение от SBorovkov (Сообщение 73897)
У меня в РР даже когда я на кнопки нажимаю 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.p...3009#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 почему-то перестает быть активным, в отличие от любого другого приложения :-).


Часовой пояс GMT +4, время: 20:18.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot