Как работать с MappingFile сторонего приложения в JAVA?

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

Собственно решил сделать распознавание проигрываемых файлов и более гибко реализовать работу с AIMP через их API.
Но в самой AIMP API кроме кроме списка констант ничего толком нет.
Так как вся работа осуществляется через передачу команд напрямую приложению например через стандартную виндовс функцию sendMessage(kernel32.dll), а вся информация о проигрываемом файле хранится в MappingFile и хранится это в виде массива.

Собственно вопросов несколько:
1. Как научить JAVA подключаться к mappingFile винды?
2. Как научить JAVA отправлять в другое приложение команды посредством виндовых библиотек?

В интернете информации мало.
Из официальной документации JNA мало чего понятно, да и примеров работы с JNA не так много, которые помогли бы мне с моей задачей.
Буду очень благодарен за помощь. По окончании успешной реализации выложу написанные программы для тестирования и/или в постоянное пользование.
  • Вопрос задан
  • 358 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Saliaz Автор вопроса
2. Как научить JAVA отправлять в другое приложение команды посредством виндовых библиотек?

С этим разобрался.
Пример:
private static final WinDef.HWND HWND = User32Ext.USER32EXT.FindWindow("AIMP2_RemoteInfo", null);
    private static final int WM_USER = 0x0400;
    private static final int WM_AIMP_COMMAND = WM_USER + 0x75;

    public static void main(String[] args) {
        sendMsgToAimp(17);
    }

    public interface User32Ext extends User32 {

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

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

    private static WinDef.HWND getHandler() {
        return HWND == null ? User32Ext.USER32EXT.FindWindow("AIMP2_RemoteInfo", null) : HWND;
    }

    private static void sendMsgToAimp(int cmdId) {
        User32Ext.USER32EXT.SendMessage(getHandler(), WM_AIMP_COMMAND, cmdId, 0);
    }


А вот с:
1. Как научить JAVA подключаться к mappingFile винды?

немного застопорился >_>"

Проблема следующая: получаю Pointer из функции MapViewOfFile.
Если смотреть в пример для C# ( https://github.com/trofimchuk-t/AIMP.NET-Remote-AP... ) метода CurrentTrackInfo, то нужно привести полученный Pointer к структуре файла и считать с файла информацию. Но как это сделать понятия не имею Т_Т.

Помогите разобраться, как вытащить информацию из полученного "поинтера"?

Пример: получение самого поинтера
public static void main(String[] args) {

        String nameFile = "AIMP2_RemoteInfo";
        WinDef.HWND HWNDkernel = Kernel32Ext.KERNEL_INS.OpenFileMapping(WinNT.GENERIC_READ, true, nameFile);
        Pointer pointer = Kernel32Ext.KERNEL_INS.MapViewOfFile(HWNDkernel, WinNT.SECTION_MAP_READ, 0, 0, 2048);

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

    public interface Kernel32Ext extends Kernel32 {

        Kernel32Ext KERNEL_INS = (Kernel32Ext) Native.loadLibrary("Kernel32",
                Kernel32Ext.class, W32APIOptions.DEFAULT_OPTIONS);

        HWND OpenFileMapping(int dwDesiredAccess, boolean bInheritHandle, String name);
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы