Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
var cp = require('child_process');
var ffi = require('ffi');
var ref = require('ref');
var voidPtr = ref.refType(ref.types.void);
var stringPtr = ref.refType(ref.types.CString);
var dwordPtr = ref.refType(ref.types.ulong);
var bindings = {
    EnumWindows: ['bool', [voidPtr, 'int32']],
    GetWindowTextA: ['long', ['long', stringPtr, 'int32']],
    GetClassNameA: ['long', ['long', stringPtr, 'int32']],
    GetWindowThreadProcessId: ['long', ['long', dwordPtr]]
};
var user32 = ffi.Library('user32', bindings);
var windowProc = ffi.Callback('bool', ['long', 'int32'], function(hwnd, lParam) {
    var buf = new Buffer(255);
    var buf2 = new Buffer(255);
    var resWindText = user32.GetWindowTextA(hwnd, buf, 255);
    var resClassName = user32.GetClassNameA(hwnd, buf2, 255);
    var pid = ref.alloc(ref.types.ulong);
    var tid = user32.GetWindowThreadProcessId(hwnd, pid);
    
    var windText = ref.readCString(buf, 0);
    var className = ref.readCString(buf2, 0);
    console.log('Title: ' + windText, 'Class: ' + className, 'wHandle: ' + hwnd, 'TID: ' + tid, 'PID: ' + ref.get(pid));
    return true;
});
var notepad = cp.spawn('c:\\Windows\\Notepad.exe');
console.log('NOTEPAD.EXE PID: ' + notepad.pid);
/* если запустить EnumWindows непосредственно после порождения дочернего процесса - 
- notepad.exe будет отсутствовать в списке процессов */
//var bool = user32.EnumWindows(windowProc, 0);
/* Так работает и выводит инофрмацию о Notepad.exe */
setTimeout(function() {
    var bool = user32.EnumWindows(windowProc, 0);
}, 100);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
xsoulfulxpro
0viewers