UI Hacks (foo_ui_hacks)

Список разделов foobar2000 Плагины

Описание: Все о плагинах, компонентах, расширениях

Сообщение #1 DRON » 28.05.2009, 15:11

Компонент позволяет изменять поведение главного окна плеера и реакцию на некоторые действия пользователя. Настройки компонента можно найти на странице "UI Hacks" в окне конфигурации foobar2000.

Функционально компонент заменяет foo_lock, foo_noss, foo_minimize_on_close, foo_notaskbar, foo_snap, foo_fullscreen и foo_playpause_on_tray_click. Также имеется возможность настройки уведомлений (Balloon tooltip), за что благодарите Mr.Merak.

Увы, официальный сайт более недоступен, и судя по всему, разработка заморожена или вовсе прекращена. С каждой новой версией foobar2000 функционал становится все более несовместимым с плеером, поэтому возможно вам стоит отказаться от его использования в новейших версиях foobar2000.

Последнюю версию можно найти тут:
foo_ui_hacks_2013-02-19.zip
(124.19 КБ) Скачиваний: 9698

Иконки для опции "Use playback status icons":
StateIcons.7z
Иконки для опции "Use playback status icons".
(7.73 КБ) Скачиваний: 2901


ВНИМАНИЕ! Для работы функционала портативности, начиная с версии foobar2000 v1.6 необходимы некоторые действия, описанные ЗДЕСЬ.
Последний раз редактировалось DRON 24.12.2012, 02:48, всего редактировалось 11 раз(а).
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев


Сообщение #561 macarych » 26.09.2018, 15:18

kgena_ua, привет.
AutoItX3 - я это имел ввиду.
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца


Сообщение #563 macarych » 27.09.2018, 17:49

zeremy, thank you so mach .
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #564 Aliado_71 » 09.06.2020, 23:52

Последние версии CUI стали ругаться на плагин UI Hacks, кто знает в чем там несовместимость?
Aliado_71
Аватара
Откуда: Украина
Репутация: 200
С нами: 9 лет

Сообщение #565 Azaza » 10.06.2020, 00:57

Например, UI Hacks не позволяет CUI менять размер шрифта.
I just installed the new version 1.2 and detected a serious error. It does not allow you to correctly change the font size in "Colors and fonts". I had to reinstall version 1.0. Please can you verify that I am right?
Please remove UI Hacks (foo_ui_hacks).
https://hydrogenaud.io/index.php?topic=28647.7475
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #566 Aliado_71 » 10.06.2020, 01:39

Azaza:Например, UI Hacks не позволяет CUI менять размер шрифта.
Я понял спасибо! В общем ничего серьезного, просто что бы поменять шрифты нужно теперь сначала удалить UI Hacks, ну а после настроек шрифтов можно установить снова. :wink:
Aliado_71
Аватара
Откуда: Украина
Репутация: 200
С нами: 9 лет

Сообщение #567 LUR » 10.06.2020, 01:44

Azaza:Например, UI Hacks не позволяет CUI менять размер шрифта.
Это вы про последние версии? Прямо реально не дает?
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #568 Azaza » 10.06.2020, 01:54

Да, про последние. Да, не даёт.
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #569 Aum » 24.09.2020, 17:37

Народ, кто в силах адаптировать плагин под последнюю версию плеера 1.6? Там совсем все поломалось, рамки окна не отключаются, portability - не работает, печаль!
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #570 imfam » 24.09.2020, 18:53

Я пользуюсь только отключением рамки. Консоль ругается, но эта функция работает.
imfam M В сети
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев

Сообщение #571 VEG » 25.09.2020, 16:22

Увы, как пропал DRON внезапно в 2013 году, так и не появлялся с тех пор =(
Исходников нет, без исходников наверное проще аналог с нуля написать, чем адаптировать бинарник.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев

Сообщение #572 Truumann » 19.01.2021, 16:41

Aum:Там совсем все поломалось, рамки окна не отключаются, portability - не работает, печаль!
VEG:Увы, как пропал DRON внезапно в 2013 году, так и не появлялся с тех пор =(

Мда, печально :sad: В новых версиях dll для portability не хочет устанавливаться. Я правильно понимаю, что без этого компонента вот такие пути теперь не работают .\foo\bar\%2000%\%foobar2000%_*.* ? Можно ли как-то по-другому ссылаться на корневой каталог foobar без необходимости указывать полный путь? Может переменная вроде такой существует %root%\foo\bar\%2000%\%foobar2000%_*.* ?
Truumann
Репутация: 2
С нами: 10 лет 7 месяцев

Сообщение #573 SergPuh.68 » 21.01.2021, 13:50

Truumann, к сожалению при использовании версии foobar2000 1.6+ от компонента UI Hacks (foo_ui_hacks) придется отказаться.Некоторые функции конечно работают но вот с путями совсем проблема.Кое где работают такие .\foo\bar\%2000%\%foobar2000%_*.* кое где такие %ps_foobar2000_path%\profile\images\
SergPuh.68 M
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #574 SergPuh.68 » 13.04.2021, 14:15

Привет,никогда не задумывался зачем нужна папка assemblies.Почитал на форуме и так и не понял зачем она нужна?Что за библиотеки?Что они дают?
SergPuh.68 M
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #575 kgena_ua » 13.04.2021, 17:51

SergPuh.68, библиотеки такие:
assemblies.rar
(132.28 КБ) Скачиваний: 999

Я, например, изменяю размер окна фубара и т.д.
Почитайте тут:
Код: Выделить всё
//Additional libraries initialisation script by Zin-Uru, 2010
//Version 1.5.2, 15.01.2011
var lib_path = fb.FoobarPath + "assemblies\\";
var autoItX3, dynwrapx;
var libs_exist = utils.FileTest(lib_path + "AutoItX3.dll","e") && utils.FileTest(lib_path + "dynwrapx.dll","e");
var loaded = true;

function init_special_libraries(force) { //Use force=true if not need to patch foobar2000.exe
    var WshShell = new ActiveXObject("WScript.Shell");
    var pressed = -1;

    if(!libs_exist) {
        loaded = false;
        return;
    }
    try {
        autoItX3 = new ActiveXObject("AutoItX3.Control");
        dynwrapx = new ActiveXObject("DynamicWrapperX");
    } catch (e) {
        if(force || !window.GetProperty("Show message", true)) {
            loaded = false;
            return;
        } else {
            pressed = WshShell.Popup("It seems like libraries not found or you use not patched foobar2000.exe. Do you want to patch it now (recommended)? You can also do that manually with patch.cmd from the foobar2000 folder. Now press OK to go or Cancel to skip (be carefull - this message showed only once).",0,"Notice",33);
            if(pressed==1) {
                WshShell.run('"' + fb.FoobarPath + 'patch.cmd" run_foo');
                fb.RunMainMenuCommand("File/Exit");
            } else {
                window.SetProperty("Show message", false);
            }
            loaded = false;
            return;
        }
    }
   
    //Dynwrapx commands registration
    dynwrapx.Register("user32.dll", "ReleaseCapture");
    dynwrapx.Register("user32.dll", "SendMessage", "i=hlul", "r=l");
    dynwrapx.Register("user32.dll", "GetWindowLong", "i=hl", "r=l");
    dynwrapx.Register("user32.dll", "SetWindowLong", "i=hll", "r=l");
    dynwrapx.Register("user32.dll", "SetLayeredWindowAttributes", "i=hlbu", "r=b");
    dynwrapx.Register("user32.dll", "RedrawWindow", "i=huhu", "r=l");
}

//Helper functions
function get_hwnd(interface_name) {
    var hwnd;

    if(!libs_exist || !loaded) return;
    switch (interface_name) {
        case "CUI":
            hwnd = ("0x" + autoItX3.WinGetHandle("[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]"))*1;
            break;
        case "FUI":
            hwnd = ("0x" + autoItX3.WinGetHandle("[CLASS:foo_ui_func_window_class]"))*1;
            break;
        case "DUI":
            hwnd = ("0x" + autoItX3.WinGetHandle("[CLASS:{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}]"))*1;
            break;
        default:
            hwnd = ("0x" + autoItX3.WinGetHandle(interface_name))*1;
            break;
    }
    return hwnd;
}

function get_pss_hwnd(instance) { //CUI only
    if(!libs_exist || !loaded) return;
    return ("0x" + autoItX3.ControlGetHandle("[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]", "", "[CLASS:PSSWindowContainer; INSTANCE:" + instance + "]"))*1;
}

function get_class(interface_name) {
    var wclass;

    if(!libs_exist || !loaded) return;
    switch (interface_name) {
        case "CUI":
            wclass = "[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]";
            break;
        case "FUI":
            wclass = "[CLASS:foo_ui_func_window_class]";
            break;
        case "DUI":
            wclass = "[CLASS:{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}]";
            break;
        default:
            wclass = interface_name;
            break;
    }
    return wclass;
}

function GDI_RGB(b, g, r) {
   return (0xff000000 | (r << 16) | (g << 8) | (b));
}

function LParam(LoWord, HiWord){
    return ((HiWord << 16) | (LoWord & 0xffff));
}

var messages = {
    WM_NULL: 0x00,
    WM_CREATE: 0x01,
    WM_DESTROY: 0x02,
    WM_MOVE: 0x03,
    WM_SIZE: 0x05,
    WM_ACTIVATE: 0x06,
    WM_SETFOCUS: 0x07,
    WM_KILLFOCUS: 0x08,
    WM_ENABLE: 0x0A,
    WM_SETREDRAW: 0x0B,
    WM_SETTEXT: 0x0C,
    WM_GETTEXT: 0x0D,
    WM_GETTEXTLENGTH: 0x0E,
    WM_PAINT: 0x0F,
    WM_CLOSE: 0x10,
    WM_QUERYENDSESSION: 0x11,
    WM_QUIT: 0x12,
    WM_QUERYOPEN: 0x13,
    WM_ERASEBKGND: 0x14,
    WM_SYSCOLORCHANGE: 0x15,
    WM_ENDSESSION: 0x16,
    WM_SYSTEMERROR: 0x17,
    WM_SHOWWINDOW: 0x18,
    WM_CTLCOLOR: 0x19,
    WM_WININICHANGE: 0x1A,
    WM_SETTINGCHANGE: 0x1A,
    WM_DEVMODECHANGE: 0x1B,
    WM_ACTIVATEAPP: 0x1C,
    WM_FONTCHANGE: 0x1D,
    WM_TIMECHANGE: 0x1E,
    WM_CANCELMODE: 0x1F,
    WM_SETCURSOR: 0x20,
    WM_MOUSEACTIVATE: 0x21,
    WM_CHILDACTIVATE: 0x22,
    WM_QUEUESYNC: 0x23,
    WM_GETMINMAXINFO: 0x24,
    WM_PAINTICON: 0x26,
    WM_ICONERASEBKGND: 0x27,
    WM_NEXTDLGCTL: 0x28,
    WM_SPOOLERSTATUS: 0x2A,
    WM_DRAWITEM: 0x2B,
    WM_MEASUREITEM: 0x2C,
    WM_DELETEITEM: 0x2D,
    WM_VKEYTOITEM: 0x2E,
    WM_CHARTOITEM: 0x2F,
    WM_SETFONT: 0x30,
    WM_GETFONT: 0x31,
    WM_SETHOTKEY: 0x32,
    WM_GETHOTKEY: 0x33,
    WM_QUERYDRAGICON: 0x37,
    WM_COMPAREITEM: 0x39,
    WM_COMPACTING: 0x41,
    WM_WINDOWPOSCHANGING: 0x46,
    WM_WINDOWPOSCHANGED: 0x47,
    WM_POWER: 0x48,
    WM_COPYDATA: 0x4A,
    WM_CANCELJOURNAL: 0x4B,
    WM_NOTIFY: 0x4E,
    WM_INPUTLANGCHANGEREQUEST: 0x50,
    WM_INPUTLANGCHANGE: 0x51,
    WM_TCARD: 0x52,
    WM_HELP: 0x53,
    WM_USERCHANGED: 0x54,
    WM_NOTIFYFORMAT: 0x55,
    WM_CONTEXTMENU: 0x7B,
    WM_STYLECHANGING: 0x7C,
    WM_STYLECHANGED: 0x7D,
    WM_DISPLAYCHANGE: 0x7E,
    WM_GETICON: 0x7F,
    WM_SETICON: 0x80,
    WM_NCCREATE: 0x81,
    WM_NCDESTROY: 0x82,
    WM_NCCALCSIZE: 0x83,
    WM_NCHITTEST: 0x84,
    WM_NCPAINT: 0x85,
    WM_NCACTIVATE: 0x86,
    WM_GETDLGCODE: 0x87,
    WM_NCMOUSEMOVE: 0xA0,
    WM_NCLBUTTONDOWN: 0xA1,
    WM_NCLBUTTONUP: 0xA2,
    WM_NCLBUTTONDBLCLK: 0xA3,
    WM_NCRBUTTONDOWN: 0xA4,
    WM_NCRBUTTONUP: 0xA5,
    WM_NCRBUTTONDBLCLK: 0xA6,
    WM_NCMBUTTONDOWN: 0xA7,
    WM_NCMBUTTONUP: 0xA8,
    WM_NCMBUTTONDBLCLK: 0xA9,
    WM_KEYFIRST: 0x100,
    WM_KEYDOWN: 0x100,
    WM_KEYUP: 0x101,
    WM_CHAR: 0x102,
    WM_DEADCHAR: 0x103,
    WM_SYSKEYDOWN: 0x104,
    WM_SYSKEYUP: 0x105,
    WM_SYSCHAR: 0x106,
    WM_SYSDEADCHAR: 0x107,
    WM_KEYLAST: 0x108,
    WM_IME_STARTCOMPOSITION: 0x10D,
    WM_IME_ENDCOMPOSITION: 0x10E,
    WM_IME_COMPOSITION: 0x10F,
    WM_IME_KEYLAST: 0x10F,
    WM_INITDIALOG: 0x110,
    WM_COMMAND: 0x111,
    WM_SYSCOMMAND: 0x112,
    WM_TIMER: 0x113,
    WM_HSCROLL: 0x114,
    WM_VSCROLL: 0x115,
    WM_INITMENU: 0x116,
    WM_INITMENUPOPUP: 0x117,
    WM_MENUSELECT: 0x11F,
    WM_MENUCHAR: 0x120,
    WM_ENTERIDLE: 0x121,
    WM_CTLCOLORMSGBOX: 0x132,
    WM_CTLCOLOREDIT: 0x133,
    WM_CTLCOLORLISTBOX: 0x134,
    WM_CTLCOLORBTN: 0x135,
    WM_CTLCOLORDLG: 0x136,
    WM_CTLCOLORSCROLLBAR: 0x137,
    WM_CTLCOLORSTATIC: 0x138,
    WM_MOUSEFIRST: 0x200,
    WM_MOUSEMOVE: 0x200,
    WM_LBUTTONDOWN: 0x201,
    WM_LBUTTONUP: 0x202,
    WM_LBUTTONDBLCLK: 0x203,
    WM_RBUTTONDOWN: 0x204,
    WM_RBUTTONUP: 0x205,
    WM_RBUTTONDBLCLK: 0x206,
    WM_MBUTTONDOWN: 0x207,
    WM_MBUTTONUP: 0x208,
    WM_MBUTTONDBLCLK: 0x209,
    WM_MOUSEWHEEL: 0x20A,
    WM_MOUSEHWHEEL: 0x20E,
    WM_PARENTNOTIFY: 0x210,
    WM_ENTERMENULOOP: 0x211,
    WM_EXITMENULOOP: 0x212,
    WM_NEXTMENU: 0x213,
    WM_SIZING: 0x214,
    WM_CAPTURECHANGED: 0x215,
    WM_MOVING: 0x216,
    WM_POWERBROADCAST: 0x218,
    WM_DEVICECHANGE: 0x219,
    WM_MDICREATE: 0x220,
    WM_MDIDESTROY: 0x221,
    WM_MDIACTIVATE: 0x222,
    WM_MDIRESTORE: 0x223,
    WM_MDINEXT: 0x224,
    WM_MDIMAXIMIZE: 0x225,
    WM_MDITILE: 0x226,
    WM_MDICASCADE: 0x227,
    WM_MDIICONARRANGE: 0x228,
    WM_MDIGETACTIVE: 0x229,
    WM_MDISETMENU: 0x230,
    WM_ENTERSIZEMOVE: 0x231,
    WM_EXITSIZEMOVE: 0x232,
    WM_DROPFILES: 0x233,
    WM_MDIREFRESHMENU: 0x234,
    WM_IME_SETCONTEXT: 0x281,
    WM_IME_NOTIFY: 0x282,
    WM_IME_CONTROL: 0x283,
    WM_IME_COMPOSITIONFULL: 0x284,
    WM_IME_SELECT: 0x285,
    WM_IME_CHAR: 0x286,
    WM_IME_KEYDOWN: 0x290,
    WM_IME_KEYUP: 0x291,
    WM_MOUSEHOVER: 0x2A1,
    WM_NCMOUSELEAVE: 0x2A2,
    WM_MOUSELEAVE: 0x2A3,
    WM_CUT: 0x300,
    WM_COPY: 0x301,
    WM_PASTE: 0x302,
    WM_CLEAR: 0x303,
    WM_UNDO: 0x304,
    WM_RENDERFORMAT: 0x305,
    WM_RENDERALLFORMATS: 0x306,
    WM_DESTROYCLIPBOARD: 0x307,
    WM_DRAWCLIPBOARD: 0x308,
    WM_PAINTCLIPBOARD: 0x309,
    WM_VSCROLLCLIPBOARD: 0x30A,
    WM_SIZECLIPBOARD: 0x30B,
    WM_ASKCBFORMATNAME: 0x30C,
    WM_CHANGECBCHAIN: 0x30D,
    WM_HSCROLLCLIPBOARD: 0x30E,
    WM_QUERYNEWPALETTE: 0x30F,
    WM_PALETTEISCHANGING: 0x310,
    WM_PALETTECHANGED: 0x311,
    WM_HOTKEY: 0x312,
    WM_PRINT: 0x317,
    WM_PRINTCLIENT: 0x318,
    WM_HANDHELDFIRST: 0x358,
    WM_HANDHELDLAST: 0x35F,
    WM_PENWINFIRST: 0x380,
    WM_PENWINLAST: 0x38F,
    WM_COALESCE_FIRST: 0x390,
    WM_COALESCE_LAST: 0x39F,
    WM_DDE_FIRST: 0x3E0,
    WM_DDE_INITIATE: 0x3E0,
    WM_DDE_TERMINATE: 0x3E1,
    WM_DDE_ADVISE: 0x3E2,
    WM_DDE_UNADVISE: 0x3E3,
    WM_DDE_ACK: 0x3E4,
    WM_DDE_DATA: 0x3E5,
    WM_DDE_REQUEST: 0x3E6,
    WM_DDE_POKE: 0x3E7,
    WM_DDE_EXECUTE: 0x3E8,
    WM_DDE_LAST: 0x3E8,
    WM_USER: 0x400,
    WM_APP: 0x8000
}

function drag_window(interface_name) { //For use in on_mouse_lbtn_down
    if(!libs_exist || !loaded) return;
    dynwrapx.ReleaseCapture();
    dynwrapx.SendMessage(get_hwnd(interface_name), 0xA1, 2, 1);
}

function move_window(interface_name, x, y, w, h) {
    if(!libs_exist || !loaded) return;
    autoItX3.WinMove(get_class(interface_name), "", x, y, w, h);   
}

function get_window_states(interface_name) { //Returned array gives: exists, visible, enabled, active, minimized, maximized
    var result = Array(false, false, false, false, false, false);
    var state;
   
    if(!libs_exist || !loaded) return result;
    state = autoItX3.WinGetState(get_class(interface_name));
    if((state & 1)==1) result[0] = true;
    if((state & 2)==2) result[1] = true;
    if((state & 4)==4) result[2] = true;
    if((state & 8)==8) result[3] = true;
    if((state & 16)==16) result[4] = true;
    if((state & 32)==32) result[5] = true;
    return result;
}

function window_opacity(interface_name, opacity) {
    if(!libs_exist || !loaded) return;
    autoItX3.WinSetTrans(get_class(interface_name), "", Math.round(opacity*2.55));
    if(get_window_states(interface_name)[1]==true) dynwrapx.RedrawWindow(get_hwnd(interface_name), 0, 0, 0x400 | 0x80 | 0x4 | 0x1);
}

function get_window_dimensions(interface_name) { //Returned array gives: x, y, width, height (of the window)
    var title;
   
    if(!libs_exist || !loaded) return Array(0,0,0,0);
    title = get_class(interface_name);
    return Array(autoItX3.WinGetPosX(title),autoItX3.WinGetPosY(title),autoItX3.WinGetPosWidth(title),autoItX3.WinGetPosHeight(title));   
}

function set_window_on_top(interface_name, state) {
    if(!libs_exist || !loaded) return;
    autoItX3.WinSetOnTop(get_class(interface_name),"",state==false ? 0 : 1);
}

function set_transparent_color(interface_name, color, alpha) { //Use only GDI_RGB(r, g, b) to set up color
    var handle;

    if(!libs_exist || !loaded) return;
    handle = get_hwnd(interface_name);
    dynwrapx.SetWindowLong(handle, -20, dynwrapx.GetWindowLong(handle, -20) | 0x00080000);
    dynwrapx.SetLayeredWindowAttributes(handle, color, alpha, 0x00000001 | 0x00000002);
    if(get_window_states(interface_name)[1]==true) dynwrapx.RedrawWindow(handle, 0, 0, 0x400 | 0x80 | 0x4 | 0x1);
}
Внизу:
function drag_window, function move_window ......
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #576 SergPuh.68 » 13.04.2021, 19:19

Другими словами библиотеки будут полезны для использования в написанных скриптах,обычному пользователю можно не заморачиваться :smoke:
Архив не удалось посмотреть,антивирус категорически отказал в скачивании.
SergPuh.68 M
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #577 GLOT » 22.12.2021, 15:53

походу совсем поломался компонент
Не подскажете аналоги? Мне очень нравится регулировка громкости по наведению на панель задач
GLOT
Репутация: 0
С нами: 6 лет 5 месяцев

Сообщение #578 VEG » 22.12.2021, 17:04

GLOT, можете регулировать системную громкость при помощи 7+ Taskbar Tweaker. Поддерживает Windows 7, 8, 8.1 и 10. В Windows 11 работает только если активировать старую панель задачь из десятки. Под новую панель задач из Windows 11 пока что не портировали.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев

Сообщение #579 MrGrey » 05.12.2022, 11:33

За 10 лет аналогов не появилось :cry:
MrGrey M
Аватара
Откуда: Минск
Репутация: 29
С нами: 17 лет 5 месяцев

Сообщение #580 Aum » 21.02.2024, 17:52

Всем привет. Как заставить работать функцию Portability на последних версиях плеера? У меня всегда вопрос-добавить dll, перезагрузка и по кругу.
Спойлер
Снимок экрана 2024-02-21 163716.png
С версии 1.6 началось, я забил, думал не работает, а случайно глянул сборку от LUR, у него работает! Искал искал там эту заветную dll, не нашел :smile: Есть у кого-то мысли?
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Пред.След.

Вернуться в Плагины