Показать сообщение отдельно
Старый 18.05.2018, 23:48   #3401
duzzy
Гуру
 
Регистрация: 01.06.2013
Регион: 78, 98
Машина: SUBARU Impreza WRX
Сообщений: 1,766
duzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond reputeduzzy has a reputation beyond repute
По умолчанию

Скрипт для отправки команд из Икара в фубар для МПС

Для функционирования скрипта необходима библиотека автоит 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);
}; 
- Поправил немного скрипт, добавил цикличный обработчик ошибок, т.е. теперь скрипт падать не будет, а будет ждать пока появится икар.

Видео по работе снимать не стал, разобраться не сложно... но если нужно сниму

Теперь не обязательно использовать фубар с командной строкой, команды приходящие из икара обрабатываются почти сразу фубаром, да и использовать так проще и выбор того что можно делать больше

Последний раз редактировалось duzzy; 19.05.2018 в 01:04.
duzzy вне форума   Ответить с цитированием