Как можно преобразовать параметры обратного вызова hookWindowMessage WM_COPYDATA в JavaScript в Electron / NodeJS? - PullRequest
0 голосов
/ 03 апреля 2020

Наше приложение C ++ отправляет сообщение WM_COPYDATA:

typedef struct tagNotificationStruct {
    char msg[255];
} NotificationStruct;

void __stdcall LogMessageWrite()
{
    const char* pszMessage = "Test 1 2 3";

    NotificationStruct notification;
    strcpy(notification.msg, pszMessage);

    COPYDATASTRUCT copyDataStruct;
    copyDataStruct.dwData = 73; // random identification number
    copyDataStruct.cbData = sizeof(NotificationStruct);
    copyDataStruct.lpData = &notification;

    string text = "my window title";
    wchar_t wtext[15];
    mbstowcs(wtext, text.c_str(), text.length());
    LPWSTR ptr = wtext;
    HWND hwDispatch = FindWindow(NULL, ptr);

    if (hwDispatch != NULL) {
        SendMessage(hwDispatch, WM_COPYDATA, NULL, (LPARAM)(LPVOID)& copyDataStruct);
    }
}

В нашем приложении Electron мы слушаем сообщения WM_COPYDATA в JavaScript:

browserWindow.hookWindowMessage(0x4A /* = WM_COPYDATA */, (wParam, lParam) => {
                console.log('wParam = ', wParam);
                console.log('lParam = ', lParam);
            });

Мы получаем сообщение и он выводит на консоль:

wParam =  <Buffer@0x0000018C305F7160 00 00 00 00 00 00 00 00>
lParam =  <Buffer@0x0000018C305F6EC0 a0 f2 cf 42 8a 00 00 00>

Как мы можем интерпретировать это в JavaScript, чтобы мы могли прочитать строку, отправленную из программы C ++?

...