diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 867cb68..b5cf4f0 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2358,7 +2358,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('PE_Parser', Buffer.from('eJytV0tz2kgQvlPFf+j1RSjL8rJCEVM+EOxUqPWCC4FTOQ7SCKYsZrSjkTGbyn/fHkkIiad2KzogNNPzdffXL6n5oVoZimAr2XKloNNq92DEFfVhKGQgJFFM8GqlWnliDuUhdSHiLpWgVhQGAXHwlu7U4YXKEKWh02hBTQvcpFs3Zr9a2YoI1mQLXCiIQooILASP+RTou0MDBYyDI9aBzwh3KGyYWsVaUoxGtfI9RRALRVCYoHiAT15eDIjS1gJeK6WCu2Zzs9k0SGxpQ8hl00/kwubTaPg4th//QGv1iTn3aRiCpH9HTKKbiy2QAI1xyAJN9MkGhASylBT3lNDGbiRTjC/rEApPbYik1YrLQiXZIlIFnnamob95AWSKcLgZ2DCyb+DzwB7Z9Wrl22j2dTKfwbfBdDoYz0aPNkymMJyMH0az0WSMT19gMP4Of47GD3WgyBJqoe+B1NajiUwzSF2ky6a0oN4TiTlhQB3mMQed4suILCksxRuVHH2BgMo1C3UUQzTOrVZ8tmYqToLw2CNU8qGpyWs2YUpVJDnygmrW8QEgCxGpJM70nTqR0lRWK17EnXg/IDKkNdx6JmplVis/kri9EYlhUC/Eh3v48bO/X/VCXEkjVDO80DDzmy5uemFDBJTbW+7sgOtgyEVBcrFVNJxS4ubWXBF+xRX07x4+R55HZYP4vnBqXSt/lKvTUp2ClAhSsf4uF2OCiBuT9zCxYRVvJ3uZOYn9Ev/F9ntufW9WHVp16Fp42yliHtSy7fjUHAu33X16rLXMhhI2Jhpf1tpd/TAPMLJDgnSb8Ns9GB8H1oNhJkAp7fpSKyk2UDMiLqkjlpz9oyuBcSK3kMQ1I/LnKdfGs9Ke7ZiMHds9NHzKlzpkx47ddtCxbsvMu58dC3VV1xDIynlurOi7kbrbsj628Lrgsm5LBJ4f45aU91LfQuxGziqnsEC3VaT7WIeDxIPRthzjTtN120FO1X5bX0nCNxKSkS7jvdc1+kWZBWp97R/C9rpdK8HtWmVwUfoKrks9EvkqxpzzVy42/DKobgwe49S9AJzlS3oYawR7APETQm3MNAQ6zW8ny/mzZweuGzfA+wuZA7/jeDtZkTu8QvJmRXxY62eN3Fl5Ke0z1Djvs6cSia/NL/aiaD19GRzQX+BpuKLOqx2tn8V1Ziz86VpFnjWzE28oXB2bva2F45Z56syI42wkvu4fD0SR88d7J4/PeWmAdsfM3N6V6bHo9bZ4tmpbn/NVm3bDYp5nkThj46eO2T9ZQUMqlR7FRNGZHo77ND7rba8kVFpR53Buy5qkccrmD6KeBpVvxFZEqrJlqsE+dUu1v84uPkn3+1/xabfKsno9QJb1awJk/ZdAlw6Q1ft1AWq3D6N9bpAUpXYTNx0tgPoj/XaKbSx+R53suvFfZMmcOzBQ15mea12s6MvTqOj9ENXrUZakStZR9FvG5VQ47hv5yUIi/OWKObqHOnsEbP3cx28Xnqxiy9KP+oTHZKgAz8itucfU/X7lHo2iQo4cjhqUj4cM3rPxcsWXHFoqmbP5ULnGLeRGy7xkzjFgbN3xckljMSv2nl21/ISa/YviAvMFX4sugzxsnmJVCHbC82Jeoe+OL0KaOp+bcfobKc0ovRq/Fa2FG/m0gR9xQipde/GHUZyD1cq/OIedMw==', 'base64'));"); // Windows Message Pump, refer to modules/win-message-pump.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-message-pump', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-message-pump', Buffer.from('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', 'base64'), '2021-12-10T08:38:50.000-08:00');"); duk_peval_string_noresult(ctx, "addCompressedModule('win-console', Buffer.from('eJytWFtv4kgWfkfiP5zNw2B6aXMJyWYSRSs6mMRaLhEmHfW+IMcUuHaMy1MummTS+e97qmzANwLRxIoUXHWu37nUKde/lEs3LHjhdOEKaDWaF19bjVYDTF8QD24YDxi3BWV+uVQu9alD/JDMYOXPCAfhEugEtoP/4p0afCc8RGpo6Q3QJMFJvHVSvSqXXtgKlvYL+EzAKiQogYYwpx4B8uyQQAD1wWHLwKO27xBYU+EqLbEMvVz6EUtgT8JGYhvJA3ybJ8nAFtJawMcVIris19frtW4rS3XGF3UvogvrffPGGFrGV7RWcjz4HglD4OTPFeXo5tML2AEa49hPaKJnr4FxsBec4J5g0tg1p4L6ixqEbC7WNifl0oyGgtOnlUjhtDEN/U0SIFK2DycdC0zrBL51LNOqlUuP5uRu9DCBx8543BlOTMOC0RhuRsOuOTFHQ3zrQWf4A/5jDrs1IIgSaiHPAZfWo4lUIkhmCJdFSEr9nEXmhAFx6Jw66JS/WNkLAgv2k3AffYGA8CUNZRRDNG5WLnl0SYVKgjDvESr5Upfg/bQ5TLj9YjrM73n2IoTrKAav0T/5DM3edGBYVufWuITGcyN6mrU0hYmeJrZbme2JeZ/YbWd2rUlnkhR+kRU+7I12281GZvv2wezutlvZ7bHR6U/MQUJBO0ti3Y0eUyZeSIokzWDa6SaUNNISBtPBqGv2fuwFaDDtGn0j5WQrQ2AZk97o5sFKkJzmSb4bY8tMQd2OaN6uonAORxM0RIZjGtNO23AN7Xh7gOmGqTN5CQgGG17hET27V55fSK/k+4NljJWCdqOh5M5XviNTCR6pP2Pr8AazinlEq5ZLcaLQOWgBZw5K1wPPFpizS7i+hsqa+qetSjWXVbKL6NPR0/+II8wuRJRfnUhw5SpLOLB56Noe0sWFrlWmt8QnnDrxVqWaY/oDi4N4py3kSknRbzixBRliefwk95w9v2gnG1p95nkneVHY+PhxgiLKPWK2WiLGAREum2knt0TEkEYAH81ZkZwrzokvJi5uzApQiA1Ka7Rctt6rq5Cjz+yZucTU6RzJ8QpL9eMSpJVx3nUqNWSRlnZpGNjCcS+hCW95iaFLvONCV7EiUgl5gfuxoAxuimc6ZILOVfPrKM4sr4utFA+R62wMsvHScmqX1McG/Jfk3RaPVk0WQA68XUi0pPYanCelv2U14fkhGP8URb+/q8ils0/R0nhXS4hsn6HlLKslH10PM5pi7FPqqEzxe1u4Ob2ye7rbXIj176pCa9QKU/W7zakcRRKSa9BEGKK/7ZkGv+IX2Ya3L/Ksql5BvQ798bQ/6nR749GgZ/YNpMAV664zNrrR767R6zz0J5b5XyNtOCdixdE1Nw9JChCLiM0skIQksayxQE0U1R1nAUgzW9h76nYLRnrznlEcXbmlCgbPKvg3nDUu4BLOWhdJo+VTr8eHhO6xhVbBsWzlCAijWqvAP5V6LHtcOMA64copdeTFA46ca9GQWFLsrR4tZqUpPYJ9W83nhGtVXY6V5AFn8NNW39B2VsQZn8dJIKryHEZtqRlMjwcmDGt+PTY0LS1tKMpLnvJ6dMKjP80iD7qEk/nheDTPMRytdg3a1f1O5wFLK5RTwj82RD77ZnseYz5W2g6LX0VgyPnvCt6KxG2kyUKuprdfIfOkt+VzQC0OUVd5JtUI4ir5CIR4Q7uE01a2TSQosymWjK10UA8i2i388iKlKVsSQclKyeF2lNFfoPV+sJuFBXFsOrVkOjXe17CJzt9R1FaJ2z494EzR1FxcteFfExp8NPJtaQN628z3s0im6c/ZB4U2z2U+Nf91XoPW2fl+sRMq1AzzIdRUrrZPUfZ5AQ7JwlN4yBKOkNXnnC0zm1Gaqt+pNJWZuV+stH2/XLW7ESxfPihZofK++IgkqUOt5BQVZUncgO9XyyB5Z5F3nGW09TXAvUo2bHhWf1fXnFfYXo5wgE7fu/RNq8JhOqHoEnyyTi5sj+vUmLUxMVJl/MS7Q5i0kaiVSlWnvov3KxFqEWWxqRG/7qjjXb3gwcrsUNx41PmDzPZ4WMQmPbqTXzQ+wKNU4VVCfvzYq0wfRTiglzEixWQJ6PTEJBTtHmaJbhPdaPqR1XaYJR3XeGg6zIaTWIU8U4Hx345pzDdwRXPYTKV1atJRaSi3FUSqGlQL2DipTuDkAt4qlhgJTSZ4+nb2jkXu2p+lLbrDFRw7M8dy/ozLDGa3TMDd47CbC6d8NjUqtSFgbgGJW3xOKg93QUr2wkx9FbXG+Ng+grKaOYvzBtI9ajd31dztVMsOJ+pzVGzSzqWqrprHNU6ceaUFuEfYg8XkTV1+RlxjUcGaM3+RJ8601GOzIm536cSIHY9ptWW4OJwkCBrS6bE86WU6ZUfp4fNoANQ4p26NMp/mtheSgpyKLABlwjqwua0+bzXht99ALnm7pUbr9wLl7xggn7QrZEkPtdHks7MeL0P7jH/7Gz6dNVuf49L+Fv+Z/hTnxVN02xj53svGw4zTWi6SF/DrV1F8PzHA+w+v/ezb7vz5GB5Z5ZEFyc8EG5sO1rFyZf8h+LEuGH1Vr+WFJppigfM58lCwoBDPGfGIIHmGjSnHs2RvZXlg1Vea4mEr/8UMA6VmzyWbrRA18hwwrgY5OQRmv9Nf/R+GdORq', 'base64'));"); // Windows Cert Store, refer to modules/win-certstore.js diff --git a/modules/win-message-pump.js b/modules/win-message-pump.js index 2f69682..28e7cfd 100644 --- a/modules/win-message-pump.js +++ b/modules/win-message-pump.js @@ -37,22 +37,50 @@ function WindowsMessagePump(options) this._user32 = GM.CreateNativeProxy('User32.dll'); this._user32.mp = this; + this._user32.CreateMethod('BeginPaint'); this._user32.CreateMethod('CreateWindowExW'); this._user32.CreateMethod('DefWindowProcW'); this._user32.CreateMethod('DestroyWindow'); this._user32.CreateMethod('DispatchMessageW'); + this._user32.CreateMethod('EndPaint'); + this._user32.CreateMethod('FillRect'); + this._user32.CreateMethod('GetClientRect'); + this._user32.CreateMethod('GetDC'); this._user32.CreateMethod('GetMessageW'); + this._user32.CreateMethod('InvalidateRect') this._user32.CreateMethod('PostMessageA'); this._user32.CreateMethod('RegisterClassExW'); + this._user32.CreateMethod('SendMessageW'); this._user32.CreateMethod('SetWindowPos'); this._user32.CreateMethod('ShowWindow'); + this._user32.CreateMethod('SystemParametersInfoA'); this._user32.CreateMethod('TranslateMessage'); + this._user32.CreateMethod('IsDlgButtonChecked'); + this._user32.CreateMethod('CheckDlgButton'); + + this._gdi32 = GM.CreateNativeProxy('Gdi32.dll'); + this._gdi32.mp = this; + this._gdi32.CreateMethod('CreateFontW'); + this._gdi32.CreateMethod('CreateSolidBrush'); + this._gdi32.CreateMethod('SetBkColor'); + this._gdi32.CreateMethod('SetBkMode'); + this._gdi32.CreateMethod('SetTextColor'); + + this._pendingCreate = []; this.wndclass = GM.CreateVariable(GM.PointerSize == 4 ? 48 : 80); this.wndclass.mp = this; this.wndclass.hinstance = this._kernel32.GetModuleHandleA(0); //this.wndclass.cname = GM.CreateVariable('MainWWWClass'); + + if (options && options.window && options.window.background != null) + { + console.info1('SETTING BACKGROUND BRUSH'); + this.wndclass.bkbrush = this._gdi32.CreateSolidBrush(options.window.background); + this.wndclass.bkbrush.pointerBuffer().copy(this.wndclass.Deref(GM.PointerSize == 4 ? 32 : 48, GM.PointerSize).toBuffer()) + } + this.wndclass.cnamew = GM.CreateVariable('MainWWWClass', { wide: true }); this.wndclass.wndproc = GM.GetGenericGlobalCallback(4); this.wndclass.wndproc.mp = this; @@ -83,9 +111,17 @@ function WindowsMessagePump(options) } else { - var r = GM.CreatePointer(); - r.Val = msgRet; - this.EndDispatcher(r); + console.info1('RETURN VALUE DETECTED', msgRet._ObjectID); + if (msgRet._ObjectID == '_GenericMarshal.Variable') + { + this.EndDispatcher(msgRet); + } + else + { + var r = GM.CreatePointer(); + r.Val = msgRet; + this.EndDispatcher(r); + } } } else if(this.mp._hwnd == null && this.CallingThread() == this.mp._user32.RegisterClassExW.async.threadId()) @@ -148,8 +184,40 @@ function WindowsMessagePump(options) } }); }); + this._addAsyncMethodCall = function addAsyncMethodCall(func, args) + { + var promise = require('promise'); + var ret = new promise(promise.defaultInit); + + this._pendingCreate.push({ func: func, args: args, p: ret }); + return (ret); + } + this._addCreateWindowEx = function _addCreateWindowEx(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam) + { + var args = []; + for (var i in arguments) + { + args.push(arguments[i]); + } + return (this._addAsyncMethodCall(this._user32.CreateWindowExW.async, args)); + } + this._startPump_continuation = function _startPump_continuation(h) + { + this.finalpromise.resolve(h); + this.nativeProxy.mp._startPump(); + } this._startPump = function _startPump() { + if (this._pendingCreate.length > 0) + { + var j = this._pendingCreate.shift(); + var args = j.args; + args.unshift(this._user32.RegisterClassExW.async); + var p2 = j.func.apply(this._user32, args); + p2.finalpromise = j.p; + p2.then(this._startPump_continuation); + return; + } this._user32.GetMessageW.async(this._user32.RegisterClassExW.async, this._msg, this._hwnd, 0, 0).then(function (r) { if(r.Val > 0) diff --git a/modules/win-userconsent.js b/modules/win-userconsent.js new file mode 100644 index 0000000..4aa4a61 --- /dev/null +++ b/modules/win-userconsent.js @@ -0,0 +1,380 @@ +/* +Copyright 2021 Intel Corporation +@author Bryan Roe + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +const WM_SETFONT = 0x0030; +const WM_CTLCOLORSTATIC = 0x0138; +const WM_CREATE = 0x0001; +const WS_TABSTOP = 0x00010000; +const WS_VISIBLE = 0x10000000; +const WS_CHILD = 0x40000000; +const BS_DEFPUSHBUTTON = 0x00000001; +const BS_CHECKBOX = 0x00000002; +const WM_ERASEBKGND = 0x0014; +const WM_USER = 0x0400; +const EM_SETBKGNDCOLOR = (WM_USER + 67); +const WM_COMMAND = 0x0111; + +const SPI_GETWORKAREA = 0x0030; + +const BST_UNCHECKED = 0x0000; +const BST_CHECKED = 0x0001; +const SS_BLACKRECT = 0x00000004; +const SS_GRAYRECT = 0x00000005; + +const SS_LEFT = 0x00000000; +const SS_CENTER = 0x00000001; +const SS_RIGHT = 0x00000002; +const SS_REALSIZECONTROL = 0x00000040; +const DS_CENTER = 0x0800; + + +const FW_DONTCARE = 0; +const FW_THIN = 100; +const FW_EXTRALIGHT = 200; +const FW_LIGHT = 300; +const FW_NORMAL = 400; +const FW_MEDIUM = 500; +const FW_SEMIBOLD = 600; +const FW_BOLD = 700; +const FW_EXTRABOLD = 800; +const FW_HEAVY = 900; + +const DEFAULT_CHARSET = 1; + +const OUT_DEFAULT_PRECIS = 0; +const OUT_STRING_PRECIS = 1; +const OUT_CHARACTER_PRECIS = 2; +const OUT_STROKE_PRECIS = 3; +const OUT_TT_PRECIS = 4; +const OUT_DEVICE_PRECIS = 5; +const OUT_RASTER_PRECIS = 6; +const OUT_TT_ONLY_PRECIS = 7; +const OUT_OUTLINE_PRECIS = 8; +const OUT_SCREEN_OUTLINE_PRECIS = 9; +const OUT_PS_ONLY_PRECIS = 10; + +const CLIP_DEFAULT_PRECIS = 0; +const CLIP_CHARACTER_PRECIS = 1; +const CLIP_STROKE_PRECIS = 2; +const CLIP_MASK = 0xf; +const CLIP_LH_ANGLES = (1 << 4); +const CLIP_TT_ALWAYS = (2 << 4); + +const DEFAULT_QUALITY = 0; +const DRAFT_QUALITY = 1; +const PROOF_QUALITY = 2; + +const DEFAULT_PITCH = 0; +const FIXED_PITCH = 1; +const VARIABLE_PITCH = 2; + +const FF_DONTCARE = (0 << 4); /* Don't care or don't know. */ +const FF_ROMAN = (1 << 4); /* Variable stroke width, serifed. */ +const FF_SWISS = (2 << 4); /* Variable stroke width, sans-serifed. */ +const FF_MODERN = (3 << 4); /* Constant stroke width, serifed or sans-serifed. */ +const FF_SCRIPT = (4 << 4); /* Cursive, etc. */ +const FF_DECORATIVE = (5 << 4); /* Old English, etc. */ + +const ES_LEFT = 0x0000; +const ES_CENTER = 0x0001; +const ES_RIGHT = 0x0002; +const ES_MULTILINE = 0x0004; +const ES_UPPERCASE = 0x0008; +const ES_LOWERCASE = 0x0010; +const ES_PASSWORD = 0x0020; +const ES_AUTOVSCROLL = 0x0040; +const ES_AUTOHSCROLL = 0x0080; +const ES_NOHIDESEL = 0x0100; +const ES_OEMCONVERT = 0x0400; +const ES_READONLY = 0x0800; +const ES_WANTRETURN = 0x1000; + +const STM_SETIMAGE = 0x0172; +const STM_GETIMAGE = 0x0173; +const IMAGE_BITMAP = 0; +const SS_BITMAP = 0x0000000E; + + +const TRANSPARENT = 1; +const OPAQUE = 2; +const COLOR_BACKGROUND = 1; + +var promise = require('promise'); +var GM = require('_GenericMarshal'); +var MessagePump = require('win-message-pump'); + +var SHM = GM.CreateNativeProxy('Shlwapi.dll'); +var gdip = GM.CreateNativeProxy('Gdiplus.dll'); + +SHM.CreateMethod('SHCreateMemStream'); +gdip.CreateMethod('GdipLoadImageFromStream'); +gdip.CreateMethod('GdipCreateBitmapFromStream'); +gdip.CreateMethod('GdipCreateHBITMAPFromBitmap'); +gdip.CreateMethod('GdiplusStartup'); +gdip.CreateMethod('GdiplusShutdown'); + +function RGB(r, g, b) +{ + return (r | (g << 8) | (b << 16)); +} +function CENTER(w, cx, cw) +{ + var a = cw / 2; + var b = w / 2; + return (Math.floor(cx + (a - b))); +} +function pump_onTimeout(pump) +{ + pump.promise.reject('TIMEOUT'); + pump.close(); +} +function pump_onExit() +{ + console.info1('message pump exited'); + this.promise.reject('CLOSED'); +} +function pump_onMessage(msg) +{ + switch (msg.message) + { + case WM_COMMAND: + switch(msg.wparam) + { + case 0xFFF0: + this._addAsyncMethodCall(this._user32.IsDlgButtonChecked.async, [this._HANDLE, 0xFFF0]).then(function (v) + { + if (v.Val == 0) + { + this.pump.autoAccept = true; + this.pump._addAsyncMethodCall(this.pump._user32.CheckDlgButton.async, [this.pump._HANDLE, 0xFFF0, BST_CHECKED]); + } + else + { + this.pump.autoAccept = false; + this.pump._addAsyncMethodCall(this.pump._user32.CheckDlgButton.async, [this.pump._HANDLE, 0xFFF0, BST_UNCHECKED]); + } + }).parentPromise.pump = this; + break; + case 0xFFF2: // Allow + if (this.timeout != null) { clearTimeout(this.timeout); this.timeout = null; } + this.promise.resolve(this.autoAccept); + this.close(); + break; + case 0xFFF3: // Deny + if (this.timeout != null) { clearTimeout(this.timeout); this.timeout = null; } + this.promise.reject('DENIED'); + this.close(); + break; + } + break; + case WM_CTLCOLORSTATIC: + console.info1('WM_CTLCOLORSTATIC => ' + msg.lparam, msg.wparam); + var hdcStatic = msg.wparam; + this._gdi32.SetTextColor(hdcStatic, RGB(200, 200, 200)); + this._gdi32.SetBkColor(hdcStatic, RGB(0, 54, 105)); + return (this.brush); + break; + case WM_CREATE: + console.info1('WM_CREATE'); + break; + case WM_ERASEBKGND: + console.info1('WM_ERASEBKGND'); + break; + default: + //console.log(msg.message); + break; + } +} +function pump_onHwnd(h) +{ + this._HANDLE = h; + + this._addCreateWindowEx(0, GM.CreateVariable('BUTTON', { wide: true }), GM.CreateVariable(this.translations.Allow, { wide: true }), WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 345, // x position + 225, // y position + 100, // Button width + 30, // Button height + h, // Parent window + 0xFFF2, // Child ID + 0, + 0); + this._addCreateWindowEx(0, GM.CreateVariable('BUTTON', { wide: true }), GM.CreateVariable(this.translations.Deny, { wide: true }), WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 455, // x position + 225, // y position + 100, // Button width + 30, // Button height + h, // Parent window + 0xFFF3, // Child ID + 0, + 0); + this._addCreateWindowEx(0, GM.CreateVariable('BUTTON', { wide: true }), GM.CreateVariable(this.translations.Auto, { wide: true }), WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_CHECKBOX, + 210, // x position + 180, // y position + 335, // Button width + 30, // Button height + h, // Parent window + 0xFFF0, // Child ID + 0, + 0); + this._addCreateWindowEx(0, GM.CreateVariable('STATIC', { wide: true }), GM.CreateVariable('NONE', { wide: true }), WS_TABSTOP | WS_VISIBLE | WS_CHILD | SS_BLACKRECT | SS_BITMAP | SS_REALSIZECONTROL, + 10, // x position + 10, // y position + 192, // Button width + 192, // Button height + h, // Parent window + 0xFFF1, // Child ID + 0, + 0).then(function (h) + { + this.pump._addAsyncMethodCall(this.pump._user32.SendMessageW.async, [h, STM_SETIMAGE, IMAGE_BITMAP, this.pump.options.bitmap.Deref()]); + }).parentPromise.pump = this; + this._addCreateWindowEx(0, GM.CreateVariable('STATIC', { wide: true }), GM.CreateVariable(this.username, { wide: true }), WS_TABSTOP | WS_VISIBLE | WS_CHILD | SS_LEFT, + 10, // x position + 225, // y position + 192, // Button width + 30, // Button height + h, // Parent window + 0xFFF2, // Child ID + 0, + 0); + this._addCreateWindowEx(0, GM.CreateVariable('STATIC', { wide: true }), GM.CreateVariable(this.translations.Caption, { wide: true }), WS_TABSTOP | WS_VISIBLE | WS_CHILD | SS_LEFT, + 210, // x position + 10, // y position + 350, // Button width + 150, // Button height + h, // Parent window + 0xFFF3, // Child ID + 0, + 0).then(function (h) + { + this.pump._addAsyncMethodCall(this.pump._user32.SendMessageW.async, [h, WM_SETFONT, this.pump.font, 1]); + }).parentPromise.pump = this; +} +function createLocal(title, caption, username, options) +{ + if (options == null) { options = {}; } + if (!options.translations) + { + options.translations = + { + Allow: 'Allow', + Deny: 'Deny', + Auto: 'Auto accept all connections for next 5 minutes', + Caption: 'User "' + username + '" is requesting remote desktop control of this computer. Click allow to grant access' + }; + } + if (!options.font) { options.font = 'Arial'; } + if (!options.background) { options.background = RGB(0, 54, 105); } + + var ret = new promise(promise.defaultInit); + ret.opt = + { + window: + { + winstyles: MessagePump.WindowStyles.WS_VISIBLE | MessagePump.WindowStyles.WS_BORDER | MessagePump.WindowStyles.WS_CAPTION | MessagePump.WindowStyles.WS_SYSMENU, + x: 300, y: 300, left: 0, right: 300, width: 580, height: 305, title: title, background: options.background + }, + }; + + var rect = GM.CreateVariable(16); + var startupinput = require('_GenericMarshal').CreateVariable(24); + ret.gdipToken = require('_GenericMarshal').CreateVariable(4); + ret.pump = new MessagePump(ret.opt); + + if (ret.pump._user32.SystemParametersInfoA(SPI_GETWORKAREA, 0, rect, 0).Val != 0) + { + var r = { x: rect.toBuffer().readInt32LE(0), y: rect.toBuffer().readInt32LE(4), w: rect.toBuffer().readInt32LE(8), h: rect.toBuffer().readInt32LE(12) }; + r.w = r.w - r.x; + r.h = r.h - r.y; + console.info1('Primary Display: ' + JSON.stringify(r)); + console.info1(' => x: ' + CENTER(580, r.x, r.w) + ', y: ' + CENTER(305, r.y, r.h)); + ret.opt.window.x = CENTER(580, r.x, r.w); + ret.opt.window.y = CENTER(305, r.y, r.h); + } + + ret.pump.autoAccept = false; + ret.pump.promise = ret; + ret.pump.brush = ret.pump._gdi32.CreateSolidBrush(options.background); + ret.pump.translations = options.translations; + ret.pump.username = username; + ret.pump.options = options; + ret.pump.font = ret.pump._gdi32.CreateFontW(20, 0, 0, 0, FW_DONTCARE, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, GM.CreateVariable(options.font, { wide: true })); + + if (options.b64Image) + { + startupinput.toBuffer().writeUInt32LE(1); + gdip.GdiplusStartup(ret.gdipToken, startupinput, 0); + + var raw = Buffer.from(options.b64Image, 'base64'); + + var nbuff = require('_GenericMarshal').CreateVariable(raw.length); + raw.copy(nbuff.toBuffer()); + var istream = SHM.SHCreateMemStream(nbuff, raw.length); + + var pimage = require('_GenericMarshal').CreatePointer(); + var hbitmap = require('_GenericMarshal').CreatePointer(); + var status = gdip.GdipCreateBitmapFromStream(istream, pimage); + status = gdip.GdipCreateHBITMAPFromBitmap(pimage.Deref(), hbitmap, options.background); + if (status.Val == 0) { options.bitmap = hbitmap; } + + } + + ret.pump.on('message', pump_onMessage); + ret.pump.on('hwnd', pump_onHwnd); + ret.pump.on('exit', pump_onExit); + + if (options.timeout != null) + { + ret.pump.timeout = setTimeout(pump_onTimeout, options.timeout, ret.pump); + } + return (ret); +} + +function create(title, caption, username, options) +{ + if (options.uid == null) { return (createLocal(title, caption, username, options)); } + var self = require('user-sessions').getProcessOwnerName(process.pid).tsid; + if (self != 0) + { + if(options.uid == self) + { + // No need to dispatch, we can do this locally + return (createLocal(title, caption, username, options)); + } + else + { + // Need to dispatch, but we don't have enough permissions to do that + var ret = new promise(promise.defaultInit); + ret.reject('Insufficient permission to dispatch to different user session'); + return (ret); + } + } + if (options.uid == 0) + { + // TSID 0 doesn't have access to draw on the desktop + var ret = new promise(promise.defaultInit); + ret.reject('Cannot create dialog on this session'); + return (ret); + } + + // Need to dispatch to user session to display dialog +} + +module.exports = + { + create: create + };