1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-16 00:03:45 +00:00

Added Clipboard helper

This commit is contained in:
Bryan Roe
2019-02-09 00:14:54 -08:00
parent 9697af5215
commit e8594d6b64
2 changed files with 53 additions and 0 deletions

50
modules/clipboard.js Normal file
View File

@@ -0,0 +1,50 @@
function nativeAddModule(name)
{
var value = getJSModule(name);
var ret = "duk_peval_string_noresult(ctx, \"addModule('" + name + "', Buffer.from('" + Buffer.from(value).toString('base64') + "', 'base64').toString());\");";
module.exports(ret);
}
function win_copytext(txt)
{
var GMEM_MOVEABLE = 0x0002;
var CF_TEXT = 1;
var GM = require('_GenericMarshal');
var user32 = GM.CreateNativeProxy('user32.dll');
var kernel32 = GM.CreateNativeProxy('kernel32.dll');
kernel32.CreateMethod('GlobalAlloc');
kernel32.CreateMethod('GlobalLock');
kernel32.CreateMethod('GlobalUnlock');
user32.CreateMethod('OpenClipboard');
user32.CreateMethod('EmptyClipboard');
user32.CreateMethod('CloseClipboard');
user32.CreateMethod('SetClipboardData');
var h = kernel32.GlobalAlloc(GMEM_MOVEABLE, txt.length + 2);
h.autoFree(false);
var hbuffer = kernel32.GlobalLock(h);
hbuffer.autoFree(false);
var tmp = Buffer.alloc(txt.length + 1);
Buffer.from(txt).copy(tmp);
tmp.copy(hbuffer.Deref(0, txt.length + 1).toBuffer());
kernel32.GlobalUnlock(h);
user32.OpenClipboard(0);
user32.EmptyClipboard();
user32.SetClipboardData(CF_TEXT, h);
user32.CloseClipboard();
}
switch(process.platform)
{
case 'win32':
module.exports = win_copytext;
break;
case 'linux':
break;
case 'darwin':
break;
}
module.exports.nativeAddModule = nativeAddModule;