2
node-ffi 및 user32 라이브러리를 사용하여 노드에 특정 창의 크기를 가져 오려고합니다. Rect 포인터가 전혀 작동하지 않을 수 있습니다. 출력이 NULL이거나 치명적인 오류가 발생합니다.node ffi Rect 유형
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633503(v=vs.85).aspx
아웃 LPRECT lpRect 왼쪽 상단을 포함하고 오른쪽 아래 모서리의 좌표한다.
var ffi = require('ffi');
var ref = require('ref');
var Struct = require('ref-struct');
var lpctstr = {
name: 'lpctstr',
indirection: 1,
size: ref.sizeof.pointer,
get: function(buffer, offset) {
var _buf = buffer.readPointer(offset);
if(_buf.isNull()) {
return null;
}
return _buf.readCString(0);
},
set: function(buffer, offset, value) {
var _buf = ref.allocCString(value, 'ucs2');
return buffer.writePointer(_buf, offset);
},
ffi_type: ffi.types.CString.ffi_type
};
var lpdwordPtr = ref.refType(ref.types.ulong);
var pointStruct = new Struct({
'x': 'long',
'y': 'long'
});
var rectStruct = new Struct({
left : pointStruct,
top : pointStruct,
right : pointStruct,
bottom : pointStruct
});
var rectPtr = ref.refType(rectStruct);
var user32 = ffi.Library('user32', {
FindWindowW: ['int', [lpctstr, lpctstr]],
GetWindowThreadProcessId: ['int', ['int', lpdwordPtr]],
SetForegroundWindow: ['bool', ['int']],
GetWindowRect: [rectPtr, ['int']]
});
var hwnd = user32.FindWindowW(null, 'Calculator');
user32.SetForegroundWindow(hwnd);
var Rect = user32.GetWindowRect(hwnd);
console.log(JSON.stringify(Rect));