This commit is contained in:
Namhyeon Go 2023-10-31 03:13:02 +09:00
parent 4ea98b1540
commit f393a99dc5
10 changed files with 240 additions and 83 deletions

View File

@ -240,6 +240,11 @@
"description": "Confirm() API 호출 시 메시지 출력 및 Yes/No 선택", "description": "Confirm() API 호출 시 메시지 출력 및 Yes/No 선택",
"tags": ["휴먼 인터페이스", "가상 휴면 인터페이스"] "tags": ["휴먼 인터페이스", "가상 휴면 인터페이스"]
}, },
{
"id": "vhid_prompt",
"description": "Prompt() API 호출 시 서술형 응답 받을 수 있음",
"tags": ["휴먼 인터페이스", "가상 휴면 인터페이스"]
},
{ {
"id": "network_http_get", "id": "network_http_get",
"description": "HTTP GET 전송", "description": "HTTP GET 전송",

View File

@ -8,7 +8,7 @@ function recordDead(name) {
} }
function checkIsDead(name) { function checkIsDead(name) {
var text = FILE.readFile(filename, "utf-8"); var text = FILE.readFile(filename, FILE.CdoCharset.CdoUTF_8);
var deadNames = splitLn(text); var deadNames = splitLn(text);
return deadNames.indexOf(name) > -1; return deadNames.indexOf(name) > -1;
} }

View File

@ -5,16 +5,25 @@
//var XML = require("lib/xml"); //var XML = require("lib/xml");
var PS = require("lib/powershell"); var PS = require("lib/powershell");
exports.encode = function(sText) { function encode(sText) {
return PS.execScript("app\\assets\\ps1\\base64encode", [sText]).trim(); return PS.execScript("app\\assets\\ps1\\base64encode", [sText]).trim();
//return XML.create().createElement("base64").encode(sText, "bin.base64"); //return XML.create().createElement("base64").encode(sText, "bin.base64");
}; };
exports.decode = function(vCode) { function decode(vCode) {
return PS.execScript("app\\assets\\ps1\\base64decode", [vCode]).trim(); return (function(s) {
var h = "Encoded String: ";
if (s.indexOf(h) == 0) {
s = s.substring(h.length);
}
return s;
})(PS.execScript("app\\assets\\ps1\\base64decode", [vCode]).trim());
//return XML.create().createElement("base64").decode(vCode, "bin.base64"); //return XML.create().createElement("base64").decode(vCode, "bin.base64");
}; };
exports.VERSIONINFO = "Base64 Module (base64.js) version 0.3"; exports.encode = encode;
exports.decode = decode;
exports.VERSIONINFO = "Base64 Module (base64.js) version 0.3.1";
exports.global = global; exports.global = global;
exports.require = require; exports.require = require;

View File

@ -23,6 +23,7 @@ var ChromeObject = function(interfaces) {
this.vendor = "Chrome"; this.vendor = "Chrome";
this.workingDirectory = SYS.getEnvString("PROGRAMFILES") + "\\Google\\Chrome\\Application"; this.workingDirectory = SYS.getEnvString("PROGRAMFILES") + "\\Google\\Chrome\\Application";
this.binPath = SYS.getEnvString("PROGRAMFILES") + "\\Google\\:installedDir\\Application\\chrome.exe"; this.binPath = SYS.getEnvString("PROGRAMFILES") + "\\Google\\:installedDir\\Application\\chrome.exe";
//this.processID = 0; //this.processID = 0;
this.installedDir = "Chrome"; this.installedDir = "Chrome";
this.profileName = "Default"; this.profileName = "Default";
@ -233,7 +234,7 @@ var ChromeObject = function(interfaces) {
this.open = function(url) { this.open = function(url) {
this.setProfile(this.profileName, this.installedDir); this.setProfile(this.profileName, this.installedDir);
// if the file does not exists, Check the 32bit installation folder again // if the file does not exists, Check the 32bit installation folder again
if (!FILE.fileExists(this.binPath)) { if (!FILE.fileExists(this.binPath)) {
this.workingDirectory = SYS.getEnvString("PROGRAMFILES(X86)") + "\\Google\\Chrome\\Application"; this.workingDirectory = SYS.getEnvString("PROGRAMFILES(X86)") + "\\Google\\Chrome\\Application";

View File

@ -6,6 +6,7 @@ var FILE = require("lib/file");
var SHELL = require("lib/shell"); var SHELL = require("lib/shell");
var RAND = require("lib/rand"); var RAND = require("lib/rand");
var BASE64 = require("lib/base64"); var BASE64 = require("lib/base64");
var PipeIPC = require("lib/pipe-ipc");
var OS_NAME = SYS.getOS(); var OS_NAME = SYS.getOS();
var OS_ARCH = SYS.getArch(); var OS_ARCH = SYS.getArch();
@ -965,7 +966,7 @@ exports.patch = patch;
exports.put = put; exports.put = put;
exports._delete = _delete; exports._delete = _delete;
exports.VERSIONINFO = "HTTP Library (http.js) version 0.7.9"; exports.VERSIONINFO = "HTTP Library (http.js) version 0.7.10";
exports.AUTHOR = "abuse@catswords.net"; exports.AUTHOR = "abuse@catswords.net";
exports.global = global; exports.global = global;
exports.require = global.require; exports.require = global.require;

View File

@ -89,7 +89,7 @@ var PowershellObject = function() {
case 2: // dataType: file(2) case 2: // dataType: file(2)
cmd.push("-file"); cmd.push("-file");
cmd.push(scriptName + ".ps1"); cmd.push(this.target + ".ps1");
break; break;
case 1: // dataType: command(1) case 1: // dataType: command(1)
@ -112,7 +112,7 @@ var PowershellObject = function() {
if (typeof(cmd) !== "undefined") { if (typeof(cmd) !== "undefined") {
cmd = cmd.concat(args); cmd = cmd.concat(args);
} }
return cmd; return cmd;
}; };

View File

@ -21,6 +21,7 @@ var ShellObject = function() {
try { try {
this.interface = CreateObject("WScript.Shell"); this.interface = CreateObject("WScript.Shell");
this.currentDirectory = this.interface.CurrentDirectory; this.currentDirectory = this.interface.CurrentDirectory;
this.workingDirectory = this.currentDirectory;
} catch (e) { } catch (e) {
console.error("ShellObject.create() ->", e.message); console.error("ShellObject.create() ->", e.message);
} }
@ -131,7 +132,7 @@ var ShellObject = function() {
return oShell; return oShell;
}; };
this.createShoutcut = function(shoutcutName, cmd, workingDirectory) { this.createShoutcut = function(shoutcutName, cmd) {
var desktopPath = this.interface.SpecialFolders("Desktop"); var desktopPath = this.interface.SpecialFolders("Desktop");
var path = desktopPath + "\\" + shoutcutName + ".lnk"; var path = desktopPath + "\\" + shoutcutName + ".lnk";
@ -143,7 +144,7 @@ var ShellObject = function() {
link.Arguments = "bgloader.js " + this.build(cmd); link.Arguments = "bgloader.js " + this.build(cmd);
//link.Arguments = this.build(cmd); //link.Arguments = this.build(cmd);
link.WindowStyle = 1; link.WindowStyle = 1;
link.WorkingDirectory = workingDirectory; link.WorkingDirectory = this.workingDirectory;
//link.Hotkey = ""; //link.Hotkey = "";
link.IconLocation = require("lib/system").getCurrentScriptDirectory() + "\\app\\favicon.ico"; link.IconLocation = require("lib/system").getCurrentScriptDirectory() + "\\app\\favicon.ico";
link.Save(); link.Save();
@ -193,20 +194,25 @@ exports.showAs = function(FN, args) {
exports.createProcess = function(cmd, workingDirectory) { exports.createProcess = function(cmd, workingDirectory) {
if (typeof(workingDirectory) !== "undefined") { if (typeof(workingDirectory) !== "undefined") {
console.log("Working directory: " + workingDirectory); console.info("Working directory: " + workingDirectory);
} }
return (new ShellObject()).setWorkingDirectory(workingDirectory).createProcess(cmd); return (new ShellObject()).setWorkingDirectory(workingDirectory).createProcess(cmd);
}; };
exports.createDesktopIcon = function(name, cmd, workingDirectory) { exports.createDesktopIcon = function(name, cmd, workingDirectory) {
return (new ShellObject()).createDesktopIcon(name, cmd, workingDirectory); if (typeof(workingDirectory) !== "undefined") {
console.info("Working directory: " + workingDirectory);
}
return (new ShellObject()).setWorkingDirectory(workingDirectory).createDesktopIcon(name, cmd);
}; };
exports.getPathOfMyDocuments = function() { exports.getPathOfMyDocuments = function() {
return (new ShellObject()).getPathOfMyDocuments(); return (new ShellObject()).getPathOfMyDocuments();
}; };
exports.VERSIONINFO = "Shell interface (shell.js) version 0.3.5"; exports.CdoCharset = PipeIPC.CdoCharset;
exports.VERSIONINFO = "Shell interface (shell.js) version 0.3.7";
exports.AUTHOR = "abuse@catswords.net"; exports.AUTHOR = "abuse@catswords.net";
exports.global = global; exports.global = global;
exports.require = global.require; exports.require = global.require;

View File

@ -5,10 +5,6 @@ var SHELL = require("lib/shell");
var WSH = CreateObject("WScript.Shell"); var WSH = CreateObject("WScript.Shell");
var WMI = require("lib/wmi"); var WMI = require("lib/wmi");
exports.VERSIONINFO = "System Module (system.js) version 0.1";
exports.global = global;
exports.require = global.require;
exports.createProcess = function(cmd) { exports.createProcess = function(cmd) {
var SW_HIDE = 0; var SW_HIDE = 0;
//wmi.Get("Win32_Process").Create(cmd, null, si, pid); //wmi.Get("Win32_Process").Create(cmd, null, si, pid);
@ -27,24 +23,16 @@ exports.createProcess = function(cmd) {
}; };
exports.getEnvString = function(envName) { exports.getEnvString = function(envName) {
var envName = envName.toUpperCase(); return (function(s) {
var resolvedEnvString = WSH.ExpandEnvironmentStrings('%' + envName + '%'); switch(s) {
case "PROGRAMFILES":
// Fixed: [lib/system] A few environment variables cannot be referenced in ScriptControl mode. #79 return WSH.ExpandEnvironmentStrings("%HOMEDRIVE%\\Program Files");
if (resolvedEnvString == "") { case "PROGRAMFILES(X86)":
resolvedEnvString = (function(s) { return WSH.ExpandEnvironmentStrings("%HOMEDRIVE%\\Program Files (x86)");
switch(s) { default:
case "PROGRAMFILES": return WSH.ExpandEnvironmentStrings('%' + s + '%');
return WSH.ExpandEnvironmentStrings("%HOMEDRIVE%\\Program Files"); }
case "PROGRAMFILES(X86)": })(envName.toUpperCase());
return WSH.ExpandEnvironmentStrings("%HOMEDRIVE%\\Program Files (x86)");
default:
return "";
}
})(envName);
}
return resolvedEnvString;
}; };
exports.get32BitFolder = function() { exports.get32BitFolder = function() {
@ -67,7 +55,7 @@ exports.isElevated = function() {
}; };
exports.getOS = function() { exports.getOS = function() {
return WMI.execQuery("SELECT * FROM Win32_OperatingSystem").fetch().get("Caption").trim(); return WMI.execQuery("SELECT Caption FROM Win32_OperatingSystem").fetch().get("Caption").trim();
}; };
exports.getDCName = function() { exports.getDCName = function() {
@ -79,11 +67,11 @@ exports.getDCName = function() {
}; };
exports.getArch = function() { exports.getArch = function() {
return WMI.execQuery("SELECT * FROM Win32_OperatingSystem").fetch().get("OSArchitecture"); return WMI.execQuery("SELECT OSArchitecture FROM Win32_OperatingSystem").fetch().get("OSArchitecture");
}; };
exports.getUUID = function() { exports.getUUID = function() {
return WMI.execQuery("SELECT * FROM Win32_ComputerSystemProduct").fetch().get("UUID").toLowerCase(); return WMI.execQuery("SELECT UUID FROM Win32_ComputerSystemProduct").fetch().get("UUID").toLowerCase();
}; };
exports.getCurrentWorkingDirectory = function() { exports.getCurrentWorkingDirectory = function() {
@ -185,5 +173,9 @@ exports.createShortcut = function(shoutcutName, fileName) {
}; };
exports.ping = function(address) { exports.ping = function(address) {
return WMI.execQuery("Select * From Win32_PingStatus where address='" + address + "'").fetch().get("ResponseTime"); return WMI.execQuery("Select ResponseTime From Win32_PingStatus where address='" + address + "'").fetch().get("ResponseTime");
}; };
exports.VERSIONINFO = "System Module (system.js) version 0.1.1";
exports.global = global;
exports.require = global.require;

View File

@ -146,14 +146,22 @@ var WMIClassObject = function() {
}; };
}; };
exports.execQuery = function(query) { function create() {
return (new WMIQueryObject()).execQuery(query); return new WMIQueryObject();
}
function execQuery(query) {
return create().execQuery(query);
}; };
exports.setClass = function(className) { function setClass(className) {
return (new WMIClassObject()).setClass(className); return create().setClass(className);
}; };
exports.VERSIONINFO = "WMI interface (wmi.js) version 0.1"; exports.create = create;
exports.execQuery = execQuery;
exports.setClass = setClass;
exports.VERSIONINFO = "WMI interface (wmi.js) version 0.1.1";
exports.global = global; exports.global = global;
exports.require = global.require; exports.require = global.require;

View File

@ -275,33 +275,84 @@ var test_implements = {
console.log("welsonjs:///?application=mscalc"); console.log("welsonjs:///?application=mscalc");
}, },
"system_pipe_ipc": function() {}, "system_pipe_ipc": function() {
},
"vhid_find_window": function() {}, "vhid_find_window": function() {
var SHELL = require("lib/shell");
var Toolkit = require("lib/toolkit");
// 메모장 열기
SHELL.run(["notepad"]);
"vhid_send_click": function() {}, // 3초 대기
sleep(5000);
"vhid_send_keys": function() {}, // 키 보내기
Toolkit.sendKeys("제목 없음 - Windows 메모장", "dasdasdasdasasdasdasd");
console.log("키를 보냈습니다.");
},
"vhid_send_key_enter": function() {}, "vhid_send_click": function() {
},
"vhid_send_key_functions": function() {}, "vhid_send_keys": function() {
},
"vhid_alert": function() {}, "vhid_send_key_enter": function() {
},
"vhid_confirm": function() {}, "vhid_send_key_functions": function() {
},
"network_http_get": function() {}, "vhid_alert": function() {
var Toolkit = require("lib/toolkit");
"network_http_post": function() {}, Toolkit.alert("잘 보이면 테스트에 성공한 것입니다.");
},
"vhid_confirm": function() {
var Toolkit = require("lib/toolkit");
var answer = Toolkit.confirm("예 또는 아니오를 눌러주세요");
console.log(String(answer));
},
"network_http_extended": function() {}, "vhid_prompt": function() {
var Toolkit = require("lib/toolkit");
"network_attach_debugger": function() {}, var answer = Toolkit.prompt("Enter your input:");
console.log(String(answer));
},
"network_detect_charset": function() {}, "network_http_get": function() {
},
"network_detect_http_ssl": function() {}, "network_http_post": function() {
},
"network_http_extended": function() {
},
"network_attach_debugger": function() {
},
"network_detect_charset": function() {
},
"network_detect_http_ssl": function() {
},
"network_send_icmp": function() { "network_send_icmp": function() {
var SYS = require("lib/system"); var SYS = require("lib/system");
@ -383,36 +434,129 @@ var test_implements = {
}, },
"chromium_run": function() { "chromium_run": function() {
var Chrome = require("lib/chrome");
Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
}, },
"chromium_create_profile": function() {}, "chromium_create_profile": function() {
},
"chromium_run_incognito": function() {}, "chromium_run_incognito": function() {
var Chrome = require("lib/chrome");
Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
},
"chromium_navigate": function() {}, "chromium_navigate": function() {
var Chrome = require("lib/chrome");
var wbInstance = Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
console.log("5초 후 구글로 이동합니다.");
sleep(5000);
"chromium_get_active_pages": function() {}, wbInstance.setPageId(null);
wbInstance.navigate("https://google.com");
},
"chromium_find_page_by_id": function() {}, "chromium_get_active_pages": function() {
var Chrome = require("lib/chrome");
var wbInstance = Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
console.log("5초 후 페이지 목록을 불러옵니다.");
sleep(5000);
"chromium_find_pages_by_title": function() {}, var pageList = wbInstance.getPageList();
pageList.forEach(function(x) {
console.log(x.title);
});
},
"chromium_move_focused": function() {}, "chromium_find_page_by_id": function() {
var Chrome = require("lib/chrome");
var wbInstance = Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
console.log("5초 후 페이지 ID를 불러옵니다.");
sleep(5000);
var pageId = wbInstance.getPageList()[0].id;
console.log("페이지 ID: " + pageId);
console.log("페이지 ID로 페이지 찾기");
var page = wbInstance.getPageById(pageId);
console.log("페이지 제목: " + page.title);
},
"chromium_find_pages_by_title": function() {
var Chrome = require("lib/chrome");
var wbInstance = Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
console.log("5초 후 페이지 타이틀을 불러옵니다.");
sleep(5000);
var pageTitle = wbInstance.getPageList()[0].title;
console.log("페이지 타이틀: " + pageTitle);
console.log("페이지 타이틀로 페이지 찾기");
var pages = wbInstance.getPagesByTitle(pageTitle); // 타이틀로 찾는 경우 복수형으로 반환됨
console.log("페이지 ID: " + pages[0].id);
},
"chromium_move_focused": function() {
var Chrome = require("lib/chrome");
var wbInstances = [];
wbInstances.push(Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true));
sleep(2000);
wbInstances.push(Chrome.startDebugInPrivate("https://naver.com", null, "welsonjs_test_2", 9223, true));
sleep(2000);
wbInstances.push(Chrome.startDebugInPrivate("https://daum.net", null, "welsonjs_test_3", 9224, true));
sleep(2000);
var wbInstance = wbInstances[1];
wbInstance.setPageId(null);
wbInstance.focus();
},
"chromium_adjust_window_size": function() {}, "chromium_adjust_window_size": function() {},
"chromium_get_element_position": function() {}, "chromium_get_element_position": function() {
var Chrome = require("lib/chrome");
var wbInstance = Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
console.log("5초 후 명령을 수행합니다.");
sleep(5000);
console.log(JSON.stringify(wbInstance.getElementPosition("p")));
},
"chromium_get_mapreduced_element_position": function() {}, "chromium_get_mapreduced_element_position": function() {
var Chrome = require("lib/chrome");
var wbInstance = Chrome.startDebugInPrivate("https://example.org", null, "welsonjs_test", 9222, true);
console.log("5초 후 명령을 수행합니다.");
sleep(5000);
"chromium_set_value_to_textbox": function() {}, console.log("More information... 버튼의 위치를 탐색");
console.log(JSON.stringify(wbInstance.getNestedElementPosition("p", ":self", "More information...")));
},
"chromium_send_click": function() {}, "chromium_set_value_to_textbox": function() {
},
"chromium_send_keys": function() {}, "chromium_send_click": function() {
},
"chromium_auto_scroll_until_end": function() {}, "chromium_send_keys": function() {
},
"chromium_auto_scroll_until_end": function() {
},
"grpc_run_server": function() { "grpc_run_server": function() {
var SHELL = require("lib/shell"); var SHELL = require("lib/shell");
@ -427,16 +571,7 @@ var test_implements = {
}, },
"gui_check": function() { "gui_check": function() {
var SHELL = require("lib/shell"); console.log("GUI 환경에서 실행하여 주십시오");
var SYS = require("lib/system");
var text1 = SHELL.exec("echo hello world!");
alert(text1);
var text2 = SYS.getOS();
alert(text2);
alert("모든 메시지가 정상적으로 보였다면 테스트에 성공한 것입니다.");
} }
}; };