Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// Get a "handle" of the active window
const activeWindowHandle = user32.GetForegroundWindow();
if (isNull(activeWindowHandle)) {
return undefined; // Failed to get active window handle
}
// Get memory address of the window handle as the "window ID"
const windowId = address(activeWindowHandle);
// Allocate a buffer to store the process ID
const processIdBuffer = alloc('uint32');
// Write the process ID creating the window to the buffer (it returns the thread ID, but it's not used here)
user32.GetWindowThreadProcessId(activeWindowHandle, processIdBuffer);
// Get the process ID as a number from the buffer
const processId = get(processIdBuffer);
// Create a new instance of Rect, the struct required by the `GetWindowRect` method
const bounds = new Rect();
// Get the window bounds and save it into the `bounds` variable
const getWindowRectResult = user32.GetWindowRect(activeWindowHandle, bounds.ref());
if (getWindowRectResult === 0) {
return undefined; // Failed to get window rect
}
return {
platform: 'windows',
id: windowId,
owner: {
processId,
},
// This assumes using the "Basic Multilingual Plane" of Unicode, only 2 characters per Unicode code point
// Include some extra bytes for possible null characters
const windowTextBuffer = Buffer.alloc((windowTextLength * 2) + 4);
// Write the window text to the buffer (it returns the text size, but it's not used here)
user32.GetWindowTextW(activeWindowHandle, windowTextBuffer, windowTextLength + 2);
// Remove trailing null characters
const windowTextBufferClean = ref.reinterpretUntilZeros(windowTextBuffer, wchar.size);
// The text as a JavaScript string
const windowTitle = wchar.toString(windowTextBufferClean);
// Allocate a buffer to store the process ID
const processIdBuffer = ref.alloc('uint32');
// Write the process ID creating the window to the buffer (it returns the thread ID, but it's not used here)
user32.GetWindowThreadProcessId(activeWindowHandle, processIdBuffer);
// Get the process ID as a number from the buffer
const processId = ref.get(processIdBuffer);
// Get a "handle" of the process
const processHandle = kernel32.OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, false, processId);
if (ref.isNull(processHandle)) {
return undefined; // Failed to get process handle
}
// Set the path length to more than the Windows extended-length MAX_PATH length
const pathLengthBytes = 66000;
// Path length in "characters"
const pathLengthChars = Math.floor(pathLengthBytes / 2);
// Allocate a buffer to store the path of the process
const processFileNameBuffer = Buffer.alloc(pathLengthBytes);
// Create a buffer containing the allocated size for the path, as a buffer as it must be writable
const processFileNameSizeBuffer = ref.alloc('uint32', pathLengthChars);
// Write process file path to buffer
exports.MQDLH.getHeader = function(buf) {
var jsdlh = new exports.MQDLH();
_copyDLHfromC(ref.get(buf,0,_MQDLHffi_t),jsdlh);
return jsdlh;
};
exports.MQRFH2.getHeader = function(buf) {
var jsRFH2 = new exports.MQRFH2();
_copyRFH2fromC(ref.get(buf,0,_MQRFH2ffi_t),jsRFH2);
return jsRFH2;
};