AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: Saliaz on April 02, 2016, 23:13:15

Title: Java отправка SendMessage
Post by: Saliaz on April 02, 2016, 23:13:15
Добрый день.
Пытаюсь с помощью Java отправить команду аимпу через библиотеку JNA(В библиотеке реализована возможность работы с WinApi).

Ранее не работал с WinApi и пробую работать с аимпом по примерам, которые нагуглил -_-

Собственно проблема следующая: делаю следующее

Code: [Select]
public static void main(String[] args) {
        //константы
        int WM_USER = 0x0400;
        int WM_AIMP_COMMAND = WM_USER + 0x75;

        //получаем Хандлер
        WinDef.HWND HWND = User32Ext.USER32EXT.FindWindow("Taimpmainform", null);

        //посылаем команду next
        //ID команды next 10 + 7
        int res = User32Ext.USER32EXT.SendMessage(HWND, WM_AIMP_COMMAND, 17, 0);
       
        System.out.println("result: " + res);

        System.out.println("ERROR: " + Native.getLastError());
        System.out.println("accept");
    }

и используемый класс для найденный на просторах:
Code: [Select]
public interface User32Ext extends User32 {

        User32Ext USER32EXT = (User32Ext) Native.loadLibrary("user32",
                User32Ext.class, W32APIOptions.DEFAULT_OPTIONS);

        HWND FindWindowEx(HWND lpParent, HWND lpChild, String lpClassName,
                String lpWindowName);

        HWND GetTopWindow(HWND hwnd);

        HWND GetParent(HWND hwnd);

        HWND GetDesktopWindow();

        int SendMessage(HWND hWnd, int dwFlags, byte bVk, int dwExtraInfo);

        int SendMessage(HWND hWnd, int Msg, int wParam, String lParam);

        int SendMessage(HWND hWnd, int Msg, int wParam, int lParam);

        LRESULT SendMessage(HWND hWnd, int Msg, WPARAM wParam, LPARAM lParam);

        void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

        void SwitchToThisWindow(HWND hWnd, boolean fAltTab);

    }

результат:
Code: [Select]
result: 0
ERROR: 0
accept


Подскажите, чего я не правильно делаю, так как аимп не реагирует на команды.
Буду благодарен за помощь.
Title: Re: Java отправка SendMessage
Post by: Artem on April 02, 2016, 23:56:13
1. В SDK есть документация по Remote API (через сообщения) + пара примеров, правда на дельфе, но код вполне читабельный
2. Как минимум у вас ошибка в том, что вы пытаетесь отправлять сообщения "Taimpmainform", а нужно это делать другому, сервисном окошку: "AIMP2_RemoteInfo"
Title: Re: Java отправка SendMessage
Post by: Saliaz on April 03, 2016, 00:03:15
Quote
2. Как минимум у вас ошибка в том, что вы пытаетесь отправлять сообщения "Taimpmainform", а нужно это делать другому, сервисном окошку: "AIMP2_RemoteInfo"
и правда ошибка >_<" спасибо заработало  :)

Дальше думаю дело пойдет быстрее  :-[

Решил реализовать управление плеера на ПК с помощью телефона.
Сейчас реализована серверная часть в JAVA на сокетах для приема кода команды, выполнения роботом эмуляции нажатия, ранее прописанных, комбинаций клавиш и ответ на клиента о выполнении.
И написана программа на Android для передачи команд и приема ответа о выполнении.

Теперь будут корректно переключаться песни, а не через эмуляцию нажатия хоткеев