diff --git a/assets/index.js b/assets/index.js
index b5fb2d1..fd349df 100644
--- a/assets/index.js
+++ b/assets/index.js
@@ -1,48 +1,155 @@
+checkUpdate = () => {
+ let cv = 'v0.0.5',
+ pg = 'https://yuanliao.info/d/296';
+ if (utools.db.get(cv).data != 'pass') {
+ $.get(pg, data => {
+ data = /
\[插件\]\[关闭进程 ProcessKiller (.*?)\](.*?) - 猿料<\/title>/.exec(data);
+ let lv = data[1],
+ desc = data[2];
+ if (lv != cv) {
+ options = {
+ type: 'info',
+ title: '插件有可用更新',
+ icon: window.getLogo(),
+ cancelId: 1,
+ message: `发现新版本 ${lv},是否前往更新?\n更新内容:\n${desc}`,
+ buttons: ['起驾', '朕知道了', '别再烦朕']
+ };
+ window.messageBox(options, index => {
+ if (index == 0) {
+ window.open(pg)
+ } else if (index == 2) {
+ utools.db.put({ _id: cv, data: "pass" })
+ }
+ })
+ }
+ })
+ }
+}
+
+saveIcon = async tasks => {
+ if (window.isWin) {
+ window.getIco.emitter.on('icon', function (data) {
+ localStorage[data.Context] = data.Base64ImageData;
+ });
+ for (var t of tasks) {
+ if (localStorage[t.ProcessName] == undefined) window.getIco.getIcon(t.ProcessName, t.Path);
+ }
+ } else {
+ for (var t of tasks) {
+ if (localStorage[t.nam] == undefined) {
+ if (t.ico) {
+ const buffer = await window.getIco.buffer(t.ico, {
+ size: 32
+ });
+ localStorage[t.nam] = buffer.toString('base64');
+ } else {
+ localStorage[t.nam] = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAFNWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHRpZmY6T3JpZW50YXRpb249IjEiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTA0LTI0VDEwOjAwOjE1KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0wNC0yNFQxMDowMToyMyswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wNC0yNFQxMDowMToyMyswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5MGQzMmU1Yi02OWY4LTRhOWYtYWUxNS0wMWEwZWY2Mzc2YTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTBkMzJlNWItNjlmOC00YTlmLWFlMTUtMDFhMGVmNjM3NmE0IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OTBkMzJlNWItNjlmOC00YTlmLWFlMTUtMDFhMGVmNjM3NmE0Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OTBkMzJlNWItNjlmOC00YTlmLWFlMTUtMDFhMGVmNjM3NmE0IiBzdEV2dDp3aGVuPSIyMDE5LTA0LTI0VDEwOjAxOjIzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vwRiLQAAAuRJREFUWIXtlz1vHFUUhp9z52Mn67UTs7YcCSnio0AhFHSIgnSIIoqEokiIOgVtfkF+QmoqSxRUiI4SiShBCKVPhQSyowg7C14p9to7d+aeQ7E7s7vxWMGwa1PwSqMZzcc9z5zznntnxMw4T7lzjf5fAIirgwvtNh98dP1Dn+fZoqoiAq0sy39++PCno8PBLMCNW7e/jES+6O3uIK4pMTLe29Txy3r5WvUmAhhmRre7xo1btzeBOzMA+XD48XfffsNyZwkZPzBfADCM/YMBn372+SfVHTVAWfi91dVLb62trZNmKb43xHLFrcRQGtJymFfCfkm83iLseSR1xN0UC6+umXMO7z1R7zlF4feOAaiaYYaaUvRz0qsdktczit+HUBhhvyTKHEvvrTB40KNz8zLmlcGjP3Dt6JUAADYKgenEZTWAqWIGOgy0Lnd47c4blM9yyt0dunff5uCHHvF6imvFXHj/EsXTI/pfb+Oy0zWSmaGqk8zUGTDFzMAJlivlnzn+twGmht86RAclmivF1hGHj/dwyzHJlTZWnK5lzAybApiUIChqiiRC6Hv6m1u03ulgXund/wVJHdFyTHb1Igc/9iifDYnXUsqnR/8qA7MlUAMDt5IQ+p6DB6P6SuIQIPQL9r/fIVpNGT55AQLuYgJ/w4T1i5qiGhoyoIFqXRADySKibNZcEglRKwXALY8fPUXwyoQamjygip7BwmSmhKkMTABCGBMuFsLM0NAEoGHGnfOWiIzjWHMJQjirEtiMCWuA0UR0jgBBF++BavzmLgi6UA/UcfSELjANtQcqwyxKdtI8cFZq9MCiAaaz2rwankkG7FismcUIRqTOOVzjd+E/12g8dzKAqjqAEEK9zVMiUtfexrFmAJIk6QJsb2/PNXCT4jjuHgMoiuKra9fevTcYHMqi/OCcY6ndNu/9ZnVObKr3NzY23hSR1HQ0I8xrNqjGEucEs2Jnd/fXybfH/z+n56y/AJCowRn/6NLmAAAAAElFTkSuQmCC'
+ }
+ }
+ }
+ }
+}
+
kill = (taskname, taskpath) => {
window.taskkill(taskname, taskpath, err => {
if (err) {
- $("#infopannel").css({ "background": "#EF5350" });
+ $("#infopannel").css({
+ "background": "#EF5350"
+ });
$("#infopannel").html(err).fadeIn(300).delay(3000).fadeOut(300);
} else {
- if(taskpath == undefined){
- $("[name='" + taskname + "']").fadeOut(300).remove()
+ if (taskpath == undefined) {
let tasknum = $(".taskinfo").length
- utools.setExpendHeight(tasknum > 10 ? 500 : 50 * tasknum);
- window.tasklist((task) => {
- window.tasks = task
+ utools.setExpendHeight(tasknum > 11 ? 550 : 50 * tasknum);
+ } else {
+ $("#infopannel").css({
+ "background": "#83bf40"
});
- }else{
- $("#infopannel").css({ "background": "#83bf40" });
- $("#infopannel").html('重启进程成功!').fadeIn(300).delay(3000).fadeOut(300);
+ $("#infopannel").html('重启进程成功!').fadeIn(300).delay(3000).fadeOut(300);
}
+ window.tasklist((task) => {
+ window.tasks = task
+ show(window.text);
+ });
}
});
}
-show = (tasks, text) => {
+search = (t, text) => {
+ text = text.toUpperCase();
+ var taskinfo = '';
+ if (window.isWin) {
+ var icon = localStorage[t.ProcessName],
+ p = t.ProcessName.toUpperCase(),
+ d = t.Description.toUpperCase();
+ if (icon == undefined) icon = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEUSURBVFhHYxgFgw2w+vv7C9ASA+1ggViFBiIiImISEhLuREVFfaAljo+PPxsZGWkJtRYBgoICzgUHBvzz9/X97+9HIww0O9Df/09QUFAr1FoEcJ9/9ILXotP/PBec+E9TvPDUH/f5Rzqg1iKA+6an5712vvnnse3Ff5rina//uG980g61FgHcNz4877XtxT+PzU/+0xRvf/7Hff2jUQeMOmDUAaMOGHXAqANGHTDqgEHoALf190/57fvyz2v7i/9e21/SBgObZD57Pv52XX23EWotAhh1rUpw3/DwofuGB5/dNtyjCQaaD6TvXjLuWGUDtRYFsDCwsWnwGdqbcOpY0QTzGVqZAO1RAWJmsI2jYOABAwMAOrpjfXCfUOgAAAAASUVORK5CYII=";
+ if (p.includes(text) || d.includes(text)) {
+ let title = t.Description ? t.Description : t.ProcessName;
+ taskinfo = `
+

+
${title}
+
${t.Path}
`;
+ }
+ } else {
+ var icon = localStorage[t.nam],
+ p = t.nam.toUpperCase();
+ if (icon == undefined) icon = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAFNWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHRpZmY6T3JpZW50YXRpb249IjEiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTA0LTI0VDEwOjAwOjE1KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0wNC0yNFQxMDowMToyMyswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wNC0yNFQxMDowMToyMyswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5MGQzMmU1Yi02OWY4LTRhOWYtYWUxNS0wMWEwZWY2Mzc2YTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTBkMzJlNWItNjlmOC00YTlmLWFlMTUtMDFhMGVmNjM3NmE0IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OTBkMzJlNWItNjlmOC00YTlmLWFlMTUtMDFhMGVmNjM3NmE0Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OTBkMzJlNWItNjlmOC00YTlmLWFlMTUtMDFhMGVmNjM3NmE0IiBzdEV2dDp3aGVuPSIyMDE5LTA0LTI0VDEwOjAxOjIzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vwRiLQAAAuRJREFUWIXtlz1vHFUUhp9z52Mn67UTs7YcCSnio0AhFHSIgnSIIoqEokiIOgVtfkF+QmoqSxRUiI4SiShBCKVPhQSyowg7C14p9to7d+aeQ7E7s7vxWMGwa1PwSqMZzcc9z5zznntnxMw4T7lzjf5fAIirgwvtNh98dP1Dn+fZoqoiAq0sy39++PCno8PBLMCNW7e/jES+6O3uIK4pMTLe29Txy3r5WvUmAhhmRre7xo1btzeBOzMA+XD48XfffsNyZwkZPzBfADCM/YMBn372+SfVHTVAWfi91dVLb62trZNmKb43xHLFrcRQGtJymFfCfkm83iLseSR1xN0UC6+umXMO7z1R7zlF4feOAaiaYYaaUvRz0qsdktczit+HUBhhvyTKHEvvrTB40KNz8zLmlcGjP3Dt6JUAADYKgenEZTWAqWIGOgy0Lnd47c4blM9yyt0dunff5uCHHvF6imvFXHj/EsXTI/pfb+Oy0zWSmaGqk8zUGTDFzMAJlivlnzn+twGmht86RAclmivF1hGHj/dwyzHJlTZWnK5lzAybApiUIChqiiRC6Hv6m1u03ulgXund/wVJHdFyTHb1Igc/9iifDYnXUsqnR/8qA7MlUAMDt5IQ+p6DB6P6SuIQIPQL9r/fIVpNGT55AQLuYgJ/w4T1i5qiGhoyoIFqXRADySKibNZcEglRKwXALY8fPUXwyoQamjygip7BwmSmhKkMTABCGBMuFsLM0NAEoGHGnfOWiIzjWHMJQjirEtiMCWuA0UR0jgBBF++BavzmLgi6UA/UcfSELjANtQcqwyxKdtI8cFZq9MCiAaaz2rwankkG7FismcUIRqTOOVzjd+E/12g8dzKAqjqAEEK9zVMiUtfexrFmAJIk6QJsb2/PNXCT4jjuHgMoiuKra9fevTcYHMqi/OCcY6ndNu/9ZnVObKr3NzY23hSR1HQ0I8xrNqjGEucEs2Jnd/fXybfH/z+n56y/AJCowRn/6NLmAAAAAElFTkSuQmCC";
+ if (p.includes(text)) {
+ taskinfo = `
+
${t.usr}
+

+
${t.nam}
+
C: ${t.cpu}% M: ${t.mem}%
+
${t.path}
`;
+ }
+ }
+ return taskinfo;
+}
+
+show = text => {
var taskinfo = '';
for (var t of window.tasks) {
- if (t.ProcessName.toUpperCase().search(text.toUpperCase()) != -1 || t.Description.toUpperCase().search(text.toUpperCase()) != -1) {
- let title = t.Description ? t.Description : t.ProcessName;
- taskinfo += '';
- taskinfo += '

';
- taskinfo += '
' + title + '
' + t.Path + '
';
- }
- }
+ taskinfo += search(t, text);
+ }
$("#tasklist").html(taskinfo);
$(".taskinfo:first").addClass("select");
+ window.mouseLockTime = new Date().getTime();
let tasknum = $(".taskinfo").length
- utools.setExpendHeight(tasknum > 10 ? 500 : 50 * tasknum);
+ utools.setExpendHeight(tasknum > 11 ? 550 : 50 * tasknum);
}
utools.onPluginEnter(({ code, type, payload }) => {
utools.setExpendHeight(0);
+ checkUpdate();
+ if (window.isWin) {
+ utools.setExpendHeight(50);
+ $("#tasklist").html(`Loading...
`);
+ $(".load").animate({ "opacity": "0.3" }, 500)
+ .animate({ "opacity": "1" }, 500);
+ }
+ var db = utools.db.get('iconCache');
+ if (db) {
+ for (var key in db.data) {
+ localStorage[key] = db.data[key]
+ }
+ }
window.tasklist((task) => {
window.tasks = task
- show(window.tasks, '');
+ saveIcon(task);
+ show('');
utools.setSubInput(({ text }) => {
- show(window.tasks, text);
- }, '输入进程名,回车关闭,或点击关闭');
+ window.text = text;
+ show(text);
+ }, '输入进程名进行搜索');
+ utools.onPluginOut(() => {
+ var update = {
+ _id: "iconCache",
+ data: localStorage
+ };
+ if (db) update._rev = db._rev;
+ utools.db.put(update);
+ })
});
});
@@ -54,9 +161,12 @@ $("#tasklist").on('mousedown', '.taskinfo', function (e) {
}
});
-$("#tasklist").on('mouseover', '.taskinfo', function () {
- $(".select").removeClass('select');
- $(this).addClass('select')
+$("#tasklist").on('mousemove', '.taskinfo', function () {
+ var mouseUnlockTime = new Date().getTime();
+ if (mouseUnlockTime - window.mouseLockTime > 500) {
+ $(".select").removeClass('select');
+ $(this).addClass('select');
+ }
});
$(document).keydown(e => {
@@ -70,28 +180,30 @@ $(document).keydown(e => {
break;
case 38:
let pre = $(".select").prev();
- if(pre.length != 0){
+ if (pre.length != 0) {
event.preventDefault();
- if(pre.offset().top < $(window).scrollTop()){
+ if (pre.offset().top < $(window).scrollTop()) {
$("html").animate({ scrollTop: "-=50" }, 0);
}
pre.addClass("select");
$(".select:last").removeClass("select");
- }else{
- $(".select").animate({"opacity":"0.3"}).delay(500).animate({"opacity":"1"})
+ } else {
+ $(".select").animate({ "opacity": "0.3" })
+ .animate({ "opacity": "1" })
}
- break;
+ break;
case 40:
let next = $(".select").next();
- if(next.length !=0){
+ if (next.length != 0) {
event.preventDefault();
- if(next.offset().top >= $(window).scrollTop() + 500){
+ if (next.offset().top >= $(window).scrollTop() + 550) {
$("html").animate({ scrollTop: "+=50" }, 0);
}
next.addClass("select");
$(".select:first").removeClass("select");
- }else{
- $(".select").animate({"opacity":"0.3"}).delay(500).animate({"opacity":"1"})
+ } else {
+ $(".select").animate({ "opacity": "0.3" })
+ .animate({ "opacity": "1" })
}
break;
}
diff --git a/assets/style.css b/assets/style.css
index cc1cae4..bde1ec2 100644
--- a/assets/style.css
+++ b/assets/style.css
@@ -23,6 +23,23 @@
.path {
color: #888888;
font-size: small;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis
+}
+
+.user {
+ float: right;
+ margin: 15px 10px;
+ height: 20px;
+ color: #666666
+}
+
+.usage {
+font-size: small;
+ float: left;
+ color: #607D8B;
+ margin-right: 5px;
}
#infopannel {
@@ -39,4 +56,11 @@ img {
float: left;
margin: 10px;
height: 30px;
+}
+
+.load {
+ margin-top: 10px;
+ text-align: center;
+ font-size: large;
+ color: #666666;
}
\ No newline at end of file
diff --git a/preload.js b/preload.js
index e7c956a..071ff1c 100644
--- a/preload.js
+++ b/preload.js
@@ -1,30 +1,25 @@
-const fs = require('fs');
-const path = require("path");
-const iconExtractor = require('icon-extractor');
const os = require('os')
const iconv = require('iconv-lite')
-const { spawn } = require("child_process")
+const { spawn, exec } = require("child_process")
+const { dialog, BrowserWindow, nativeImage } = require('electron').remote
+const { shell } = require('electron');
+const path = require("path")
-getico = tasks =>{
- iconExtractor.emitter.on('icon', function (data) {
- let icondir = path.join(os.tmpdir(), 'ProcessIcon')
- fs.exists(icondir, exists => {
- if (!exists) { fs.mkdirSync(icondir) }
- let iconpath = path.join(icondir, `${data.Context}.png`)
- fs.exists(iconpath, exists => {
- if (!exists) {
- fs.writeFile(iconpath, data.Base64ImageData, "base64", err => {
- if (err) { console.log(err); }
- })
- }
- })
- })
- });
+isWin = os.platform() == 'win32' ? true : false;
- for (var task of tasks) {
- iconExtractor.getIcon(task.ProcessName, task.Path);
- }
+getIco = isWin ? require('icon-extractor') : require('file-icon');
+
+getLogo = () => nativeImage.createFromPath(path.join(__dirname, 'logo.png'));
+
+messageBox = (options, callback) => {
+ dialog.showMessageBox(BrowserWindow.getFocusedWindow(), options, index => {
+ callback(index);
+ })
+}
+
+open = url => {
+ shell.openExternal(url);
}
powershell = (cmd, callback) => {
@@ -45,32 +40,59 @@ powershell = (cmd, callback) => {
}
tasklist = (callback) => {
- powershell("Get-Process | Format-List ProcessName,Path,Description", (stdout, stderr) => {
- let tasklist = [];
- let tasks = stdout.trim().split('\r\n\r\n');
- for (var task of tasks) {
- dict = {}
- let lines = task.split('\r\n')
- for (var line of lines) {
- if (line) {
- let key = line.split(/\s+:\s*/)[0];
- let value = line.split(/\s+:\s*/)[1];
- dict[key] = value;
- }
+ var tasklist = [];
+ if (isWin) {
+ powershell("Get-Process | Format-List ProcessName,Path,Description", (stdout, stderr) => {
+ let tasks = stdout.trim().split('\r\n\r\n');
+ for (var task of tasks) {
+ dict = {}
+ let lines = task.split('\r\n')
+ lines.forEach(line => {
+ if (line) {
+ let key = line.split(/\s+:\s*/)[0];
+ let value = line.split(/\s+:\s*/)[1];
+ dict[key] = value;
+ }
+ })
+ tasklist.push(dict);
}
- var icon = path.join(os.tmpdir(), 'ProcessIcon', `${encodeURIComponent(dict.ProcessName)}.png`);
- dict.Icon = icon
- tasklist.push(dict);
- }
- tasklist.shift();
- getico(tasklist);
- callback(tasklist);
- });
+ tasklist.shift();
+ callback(tasklist);
+ });
+ } else {
+ exec('ps -A -o pid -o %cpu -o %mem -o user -o comm | sed 1d | sort -rnk 3', (err, stdout, stderr) => {
+ lines = stdout.split('\n');
+ lines.forEach(line => {
+ if (line) {
+ l = /(\d+)\s+(\d+[\.|\,]\d+)\s+(\d+[\.|\,]\d+)\s+(.*?)\s+(.*)/.exec(line);
+ dict = {
+ pid: l[1],
+ cpu: l[2],
+ mem: l[3],
+ usr: l[4],
+ path: l[5],
+ nam: l[5].split('/').pop(),
+ }
+ let ico = /\/Applications\/(.*?)\.app\//.exec(dict.path)
+ dict.ico = ico ? ico[1] : false;
+ tasklist.push(dict);
+ }
+ });
+ callback(tasklist);
+ });
+ }
}
-taskkill = (taskname, taskpath, callback) => {
- let restart = taskpath == undefined ? '' : `;Start-Process -FilePath "${taskpath}"`;
- powershell(`Stop-Process -Name ${taskname}${restart}`, (stdout, stderr) => {
- callback(stderr.split('\n')[0])
- });
+taskkill = (task, path, callback) => {
+ if (isWin) {
+ let restart = path == undefined ? '' : `;Start-Process -FilePath "${path}"`;
+ powershell(`Stop-Process -Name ${task}${restart}`, (stdout, stderr) => {
+ callback(stderr.split('\n')[0])
+ });
+ } else {
+ let restart = path == undefined ? '' : `&& "${path}"`;
+ exec(`kill -9 ${task}${restart}`, (err, stdout, stderr) => {
+ callback(stderr);
+ });
+ }
}
\ No newline at end of file