Как использовать возвращенный «буфер» функции Electronjs «getNativeWindowHandle ()» в нативных функциях? - PullRequest
1 голос
/ 05 мая 2019

Я использую функцию Electronjs getNativeWindowHandle(), чтобы найти HWND главного окна электрона.

т.е. один журнал был: <Buffer@0x00000293A66F0450 ec 02 07 00 00 00 00 00>

Преобразовано в HEX: ec02070000000000

Но реальное значение HWND: 459500, полученное при

handleElectron.substring(0, 6).match(/.{1,2}/g), чтобы получить три первые пары строки, затем

newhandle = handleElectron[2] + handleElectron[1] + handleElectron[0]; потому что на рукоятке перевернуты первые два и третьи два знака.

Затем я использую parseInt(handleElectron, 16) << 8) / 256, чтобы получить десятичное число

Тот же результат: user32.FindWindowW(TEXT('Chrome_WidgetWin_1'), null); (нативная функция через node-ffi),

но мне нужно поместить его в цикл while, потому что FindWindowW иногда дает 0.

Есть ли более чистый и правильный способ преобразования результата getNativeWindowHandle() в HWND, который можно использовать FindWindowW или любыми другими встроенными функциями?

1 Ответ

1 голос
/ 07 мая 2019

Следующий код возвращает целочисленное значение, которое вы ищете:

const os = require("os")

function getNativeWindowHandle_Int(win) {
    let hbuf = win.getNativeWindowHandle()

    if (os.endianness() == "LE") {
        return hbuf.readInt32LE()
    }
    else {
        return hbuf.readInt32BE()
    }
}

Можно с уверенностью предположить, что Windows является Little-Endian, но, тем не менее, код проверяет порядковый номер, используя Node's os.endianness().Что касается чтения только 32 бит, в документации Microsoft говорится следующее:

При разделении дескриптора между 32-битными и 64-битными приложениями значимы только младшие 32 бита, поэтомубезопасно урезать дескриптор (при передаче его из 64-битного в 32-битный) [..]

Вызвать функцию в BrowserWindow следующим образом:

let myWin = new BrowserWindow()
console.log(getNativeWindowHandle_Int(myWin))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...