Скрипт для отправки команд из Икара в фубар для МПС
Для функционирования скрипта необходима библиотека автоит AutoItX3.dll(в корне папки сборки в папке "assemblies" и еще манифест AutoItX3.dll.manifest, в свежей сборке FLAT есть все что нужно).
И плагин foo_ui_hacks.
Пример кнопки для Икара:
B,5,120,250,113,"
SETVAR;SENDFB2K;nexttrack",
SENDFB2K --- переменная которую объявляем в икаре и читаем в js скрипте фубара
nexttrack --- команда которую прочитает фубар при например нажатии кнопки
Работает так, запускаем фубар из икара, скрипт в фубаре начинает работать, опрашивать переменную икара "SENDFB2K", как только из икара переменной присвоено какое то значение и если оно совпадает со значением в переключателе выполняется то что было прописано под этим значением, при выполнении переменная икара обнуляется.
Команды прописанные в переключателе(nexttrack, prevtrack, playorpause... и т.д.)прописаны как пример, можно прописывать что угодно, не забывая повесть команду на кнопку в икаре.
PHP код:
//--- send commands to fb2k(iCarDS<->fb2k)
var autoit_obj = new ActiveXObject("AutoItX3.Control");
var rr = undefined;
var rr_getinfo_timer = false;
var rr_obj_check_timer = false;
var rr_obj_check_timer_value = 5000; //--- таймаут проверки икара в мс, работает он или нет
var rr_getinfo_timer_value = 500; //--- таймаут опроса икара в мс
rr_check();
//--- ниже в rr_get_info() задаем свои команды которые будем отправлять из икара
//--- case ' тут пишем команду ':
//--- тут что то делаем при получении команды
//--- break;
function rr_get_info() {
try { //--- обработчик ошибок зацикленной схемой проверки на работающий икар
rr_get_ret = rr.getinfo("=$SENDFB2K$");
} catch (e) {
rr_get_ret = '0';
tt('>>> iCarDS GetInfo "SENDFB2K" Error...');
rr_getinfo_timer = false && rr_getinfo_timer.Dispose();
rr = undefined;
rr_obj_check_timer = window.CreateTimerInterval(rr_obj_check_timer_value);
};
switch (rr_get_ret) {
//switch (rr.getinfo("=$SENDFB2K$")) { //--- вариант без обработчика ошибок
case 'nexttrack':
rr.execute("SETVAR;SENDFB2K;0");
fb.Next();
break;
case 'prevtrack':
rr.execute("SETVAR;SENDFB2K;0");
fb.Prev();
break;
case 'playorpause':
rr.execute("SETVAR;SENDFB2K;0");
fb.PlayOrPause();
break;
case 'shuffle':
rr.execute("SETVAR;SENDFB2K;0");
fb.PlaybackOrder = 4;
break;
case 'default':
rr.execute("SETVAR;SENDFB2K;0");
fb.PlaybackOrder = 0;
break;
case 'random':
rr.execute("SETVAR;SENDFB2K;0");
fb.PlaybackOrder = 3;
break;
case 'test': //вместо "test" прописываем нужное значение/команду идущую из икара
rr.execute("SETVAR;SENDFB2K;0"); //обнуляем принятое значение или отправляем что то в икар
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
case '':
rr.execute("SETVAR;SENDFB2K;0");
// тут делаем что то
break;
};
};
//----------------------------------------------------------- rr get info end
function rr_check() {
if (icar_check()) {
rr_obj_check_timer = false && rr_obj_check_timer.Dispose();
rr = new ActiveXObject("RideRunner.sdk");
is_rr_on = true;
} else {
is_rr_on = false;
rr = undefined;
rr_obj_check_timer = window.CreateTimerInterval(rr_obj_check_timer_value);
};
is_rr_on ? rr_getinfo_timer = window.CreateTimerInterval(rr_getinfo_timer_value) : rr_getinfo_timer = false && rr_getinfo_timer.Dispose();
};
function icar_check() {
var ret_check = "";
ret_check = autoit_obj.ProcessExists("iCarDS.exe");
if (ret_check == 0) {
tt('>>> iCarDS not running...');
return false;
} else {
return true;
};
};
function on_timer(id) {
if (rr_getinfo_timer && id == rr_getinfo_timer.ID) {
rr_get_info();
};
if (rr_obj_check_timer && id == rr_obj_check_timer.ID) {
rr_check();
};
};
function tt(t) {
fb.trace(t);
};
- Поправил немного скрипт, добавил цикличный обработчик ошибок, т.е. теперь скрипт падать не будет, а будет ждать пока появится икар.
Видео по работе снимать не стал, разобраться не сложно... но если нужно сниму
Теперь не обязательно использовать фубар с командной строкой, команды приходящие из икара обрабатываются почти сразу фубаром, да и использовать так проще и выбор того что можно делать больше
