Ответы пользователя по тегу API
  • Как работать с MappingFile сторонего приложения в JAVA?

    @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);
        }
    Ответ написан
    Комментировать