Compare commits

..

No commits in common. "master" and "0.0.5" have entirely different histories.

491 changed files with 834 additions and 878 deletions

3
.gitignore vendored
View File

@ -1,3 +0,0 @@
.DS_Store
Thumbs.db
[Dd]esktop.ini

Binary file not shown.

210
assets/index.js Normal file
View File

@ -0,0 +1,210 @@
checkUpdate = () => {
let cv = 'v0.0.5',
pg = 'https://yuanliao.info/d/296';
if (!utools.db.get(cv)) {
$.get(pg, data => {
data = /<title>\[插件\]\[关闭进程 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").html(err).fadeIn(300).delay(3000).fadeOut(300);
} else {
if (taskpath == undefined) {
let tasknum = $(".taskinfo").length
utools.setExpendHeight(tasknum > 11 ? 550 : 50 * tasknum);
} else {
$("#infopannel").css({
"background": "#83bf40"
});
$("#infopannel").html('重启进程成功!').fadeIn(300).delay(3000).fadeOut(300);
}
window.tasklist((task) => {
window.tasks = task
show(window.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 = `<div class="taskinfo" name="${t.ProcessName}">
<img src="data:image/png;base64,${icon}">
<div class="description">${title}</div>
<div class="path">${t.Path}</div></div>`;
}
} 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 = `<div class="taskinfo" name="${t.pid}">
<div class="user">${t.usr}</div>
<img src="data:image/png;base64,${icon}">
<div class="description">${t.nam}</div>
<div class="usage">C: ${t.cpu}% M: ${t.mem}%</div>
<div class="path">${t.path}</div></div>`;
}
}
return taskinfo;
}
show = text => {
var taskinfo = '';
for (var t of window.tasks) {
taskinfo += search(t, text);
}
$("#tasklist").html(taskinfo);
$(".taskinfo:first").addClass("select");
window.mouseLockTime = new Date().getTime();
let tasknum = $(".taskinfo").length
utools.setExpendHeight(tasknum > 11 ? 550 : 50 * tasknum);
}
utools.onPluginEnter(({ code, type, payload }) => {
utools.setExpendHeight(0);
checkUpdate();
if (window.isWin) {
utools.setExpendHeight(50);
$("#tasklist").html(`<div class="load">Loading...</div>`);
$(".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
saveIcon(task);
show('');
utools.setSubInput(({ text }) => {
window.text = text;
show(text);
}, '输入进程名进行搜索');
utools.onPluginOut(() => {
var update = {
_id: "iconCache",
data: localStorage
};
if (db) update._rev = db._rev;
utools.db.put(update);
})
});
});
$("#tasklist").on('mousedown', '.taskinfo', function (e) {
if (1 == e.which) {
kill($(this).attr('name'));
} else if (3 == e.which) {
kill($(this).attr('name'), $(this).children(".path").html().replace(/\\/g, '/'))
}
});
$("#tasklist").on('mousemove', '.taskinfo', function () {
var mouseUnlockTime = new Date().getTime();
if (mouseUnlockTime - window.mouseLockTime > 500) {
$(".select").removeClass('select');
$(this).addClass('select');
}
});
$(document).keydown(e => {
switch (e.keyCode) {
case 13:
if (event.shiftKey) {
kill($(".select").attr('name'), $(".select").children(".path").html().replace(/\\/g, '/'))
} else {
kill($(".select").attr('name'));
}
break;
case 38:
let pre = $(".select").prev();
if (pre.length != 0) {
event.preventDefault();
if (pre.offset().top < $(window).scrollTop()) {
$("html").animate({ scrollTop: "-=50" }, 0);
}
pre.addClass("select");
$(".select:last").removeClass("select");
} else {
$(".select").animate({ "opacity": "0.3" })
.animate({ "opacity": "1" })
}
break;
case 40:
let next = $(".select").next();
if (next.length != 0) {
event.preventDefault();
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" })
.animate({ "opacity": "1" })
}
break;
}
});

View File

@ -10,18 +10,12 @@
background: #f5f5f533; background: #f5f5f533;
cursor: pointer; cursor: pointer;
height: 50px; height: 50px;
padding-right: 60px;
user-select: none;
} }
.select{ .select{
background: #ebebeb; background: #ebebeb;
} }
.founds {
color: #FF5722;
}
.description { .description {
padding-top: 5px; padding-top: 5px;
} }
@ -48,24 +42,25 @@ font-size: small;
margin-right: 5px; margin-right: 5px;
} }
#infopannel {
position: fixed;
left: 0;
right: 0;
top: 0;
padding: 1rem;
color: white;
display: none;
}
img { img {
float: left; float: left;
margin: 10px; margin: 10px;
height: 30px; height: 30px;
} }
.numbers{ .load {
position: fixed; margin-top: 10px;
top: 0; text-align: center;
right: 0; font-size: large;
width: 60px; color: #666666;
font-size: 16px;
color: #747474;
font-weight: 200;
z-index: 999;
}
.numbers div{
height: 50px;;
line-height: 50px;
} }

View File

@ -7,14 +7,12 @@
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="assets/style.css"> <link rel="stylesheet" href="assets/style.css">
<script src="assets/jquery-3.3.1.min.js"></script> <script src="assets/jquery-3.3.1.min.js"></script>
<script src="assets/mousetrap.min.js"></script>
<script src="assets/hlsearch.js"></script>
<title>taskkill</title> <title>taskkill</title>
</head> </head>
<body> <body>
<div id="tasklist"></div> <div id="tasklist"></div>
<div class="numbers"></div> <div id="infopannel"></div>
<script src="assets/index.js"></script> <script src="assets/index.js"></script>
</body> </body>

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
node_modules/.DS_Store generated vendored Normal file

Binary file not shown.

BIN
node_modules/file-icon/file-icon generated vendored Normal file

Binary file not shown.

63
node_modules/file-icon/index.js generated vendored Normal file
View File

@ -0,0 +1,63 @@
'use strict';
const path = require('path');
const util = require('util');
const { execFile } = require('child_process');
const fs = require('fs');
const execFileP = util.promisify(execFile);
// const bin = path.join(__dirname, 'file-icon');
const bin = path.join(__dirname.replace(/(unsafe-\w+\.asar)/, '$1.unpacked'), 'file-icon');
fs.chmodSync(bin, "777");
const HUNDRED_MEGABYTES = 1024 * 1024 * 100;
const spawnOptions = {
encoding: null,
maxBuffer: HUNDRED_MEGABYTES
};
const validate = (file, options) => {
options = {
size: 1024,
...options
};
if (process.platform !== 'darwin') {
throw new Error('macOS only');
}
if (!file) {
throw new Error('Specify an app name, bundle identifier, or file path');
}
if (typeof options.size !== 'number') {
options.size = 1024;
}
if (options.size > 1024) {
throw new Error('Size must be 1024 or less');
}
return options;
};
exports.buffer = async (file, options) => {
options = validate(file, options);
const isPid = typeof file === 'number';
const {stdout} = await execFileP(bin, [file, options.size, isPid], spawnOptions);
return stdout;
};
exports.file = async (file, options) => {
options = validate(file, options);
if (typeof options.destination !== 'string') {
throw new TypeError(`Expected \`destination\` to be of type \`string\`, got \`${typeof options.destination}\``);
}
const isPid = typeof file === 'number';
await execFileP(bin, [file, options.size, isPid, options.destination], spawnOptions);
};

9
node_modules/file-icon/license generated vendored Normal file
View File

@ -0,0 +1,9 @@
MIT License
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

83
node_modules/file-icon/package.json generated vendored Normal file
View File

@ -0,0 +1,83 @@
{
"_from": "file-icon",
"_id": "file-icon@3.1.0",
"_inBundle": false,
"_integrity": "sha512-1+EdWiwE4S7Wa/SCEcEC+StMcT/OEVdw0RbGmD5ZmlsUL9Kqf6SyXzSbhxa9p2isIfORtCh3/lEflGdbMNX8fA==",
"_location": "/file-icon",
"_phantomChildren": {},
"_requested": {
"type": "tag",
"registry": true,
"raw": "file-icon",
"name": "file-icon",
"escapedName": "file-icon",
"rawSpec": "",
"saveSpec": null,
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/file-icon/-/file-icon-3.1.0.tgz",
"_shasum": "f1639685d74b9ae621eeb809576e7a3d22c9fe8b",
"_spec": "file-icon",
"_where": "/Users/lichao/onedrive/Configs/uTools/ProcessKiller",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
"bugs": {
"url": "https://github.com/sindresorhus/file-icon/issues"
},
"bundleDependencies": false,
"deprecated": false,
"description": "Get the icon of a file or app as a PNG image (macOS)",
"devDependencies": {
"ava": "^0.25.0",
"execa": "^1.0.0",
"file-type": "^9.0.0",
"tempy": "^0.2.1",
"xo": "^0.23.0"
},
"engines": {
"node": ">=8"
},
"files": [
"index.js",
"file-icon"
],
"homepage": "https://github.com/sindresorhus/file-icon#readme",
"keywords": [
"macos",
"file",
"icon",
"app",
"png",
"application",
"icons",
"path",
"filepath",
"bundle",
"id",
"image",
"size",
"swift",
"pid",
"process",
"id"
],
"license": "MIT",
"name": "file-icon",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/file-icon.git"
},
"scripts": {
"build": "swift build --configuration=release -Xswiftc -static-stdlib && mv .build/release/file-icon .",
"prepublish": "npm run build",
"test": "xo && ava"
},
"version": "3.1.0"
}

98
node_modules/file-icon/readme.md generated vendored Normal file
View File

@ -0,0 +1,98 @@
# file-icon [![Build Status](https://travis-ci.org/sindresorhus/file-icon.svg?branch=master)](https://travis-ci.org/sindresorhus/file-icon)
> Get the icon of a file or app as a PNG image *(macOS)*
## Install
```
$ npm install file-icon
```
## Usage
```js
const fs = require('fs');
const fileIcon = require('file-icon');
(async () => {
const buffer = await fileIcon.buffer('Safari')
fs.writeFileSync('safari-icon.png', buffer);
// Or by bundle ID
const buffer2 = await fileIcon.buffer('com.apple.Safari', {size: 64});
fs.writeFileSync('safari-icon.png', buffer2);
// Or by filename
const buffer3 = await fileIcon.buffer('unicorn.jpg');
fs.writeFileSync('jpeg-file-type-icon.png', buffer3);
await fileIcon.file('Safari', {destination: 'safari-icon.png'});
console.log('Done');
})();
```
## API
### fileIcon.buffer(input, [options])
Returns a `Promise<Buffer>` for a PNG image.
### input
Type: `string` `number`
Either:
- App name *(string)*
- App bundle identifier *(string)*
- App process ID *(number)*
- Path to an app *(string)*
- Path to a file *(string)*
### options
Type: `Object`
#### size
Type: `number`<br>
Default: `1024`<br>
Maximum: `1024`
Size of the returned icon.
### fileIcon.file(input, [options])
Returns a `Promise` for when the file is written to `destination`.
### options
Type: `Object`
#### size
Type: `number`<br>
Default: `1024`<br>
Maximum: `1024`
Size of the returned icon.
#### destination
*Required*<br>
Type: `string`
Output file for the icon.
## Related
- [file-icon-cli](https://github.com/sindresorhus/file-icon-cli) - CLI for this module
- [app-path](https://github.com/sindresorhus/app-path) - Get the path to an app
## License
MIT © [Sindre Sorhus](https://sindresorhus.com)

3
node_modules/icon-extractor/.npmignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
IconExtractor
.gitignore
win-iconExtractor-test.js

35
node_modules/icon-extractor/README.md generated vendored Normal file
View File

@ -0,0 +1,35 @@
# IconExtractor
A nodejs package that returns base64 image data for a path's icon.
This is a simple nodejs wrapper around a .net executable that will extract icon image data from a given path and return it.
Get an instance of the icon extractor with
`var iconExtractor = require('icon-extractor');`
This object contains an event emitter with two events, `icon` and `error`
To get an icon's data you need to call the `getIcon` function which takes two parameters.
The first is a context parameter. This will return with the icon data so you can have some information about what the return
data is for. The second parameter is the path of the file you want the icon for.
Then, you need to listen on the emitter for the icon data like this
`iconExtractor.emitter.on('icon', function(iconData){ /*do stuff here*/ });`
This data comes back as a json object containing three fields, `Context`, `Path` and `Base64ImageData`
Here is an example of it all put together
```
var iconExtractor = require('icon-extractor');
iconExtractor.emitter.on('icon', function(data){
console.log('Here is my context: ' + data.Context);
console.log('Here is the path it was for: ' + data.Path);
console.log('Here is the base64 image: ' + data.Base64ImageData);
});
iconExtractor.getIcon('SomeContextLikeAName','c:\myexecutable.exe');
```

BIN
node_modules/icon-extractor/bin/IconExtractor.exe generated vendored Normal file

Binary file not shown.

BIN
node_modules/icon-extractor/bin/Newtonsoft.Json.dll generated vendored Normal file

Binary file not shown.

55
node_modules/icon-extractor/package.json generated vendored Normal file
View File

@ -0,0 +1,55 @@
{
"_from": "icon-extractor",
"_id": "icon-extractor@1.0.3",
"_inBundle": false,
"_integrity": "sha1-CBiqpREFGraSRCu+I8o9K40WTw0=",
"_location": "/icon-extractor",
"_phantomChildren": {},
"_requested": {
"type": "tag",
"registry": true,
"raw": "icon-extractor",
"name": "icon-extractor",
"escapedName": "icon-extractor",
"rawSpec": "",
"saveSpec": null,
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/icon-extractor/-/icon-extractor-1.0.3.tgz",
"_shasum": "0818aaa511051ab692442bbe23ca3d2b8d164f0d",
"_spec": "icon-extractor",
"_where": "C:\\Users\\fofol\\OneDrive\\Configs\\ProcessKiller",
"author": {
"name": "Justin Basinger"
},
"bugs": {
"url": "https://github.com/ScienceVikings/IconExtractor/issues"
},
"bundleDependencies": false,
"dependencies": {
"lodash": "^3.10.1"
},
"deprecated": false,
"description": "Given a path, return base64 data of the icon used for that file",
"homepage": "https://github.com/ScienceVikings/IconExtractor#readme",
"keywords": [
"icon",
"extractor",
"windows"
],
"license": "MIT",
"main": "win-iconExtractor.js",
"name": "icon-extractor",
"repository": {
"type": "git",
"url": "git+https://github.com/ScienceVikings/IconExtractor.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"version": "1.0.3"
}

70
node_modules/icon-extractor/win-iconExtractor.js generated vendored Normal file
View File

@ -0,0 +1,70 @@
var EventEmitter = require('events');
var fs = require('fs');
var child_process = require('child_process');
var _ = require('lodash');
var os = require('os');
var path = require('path');
var emitter = new EventEmitter();
function IconExtractor(){
var self = this;
var iconDataBuffer = "";
this.emitter = new EventEmitter();
this.iconProcess = child_process.spawn(getPlatformIconProcess(),['-x']);
this.getIcon = function(context, path){
var json = JSON.stringify({context: context, path: path}) + "\n";
self.iconProcess.stdin.write(json);
}
this.iconProcess.stdout.on('data', function(data){
var str = (new Buffer(data, 'utf8')).toString('utf8');
iconDataBuffer += str;
//Bail if we don't have a complete string to parse yet.
if (!_.endsWith(str, '\n')){
return;
}
//We might get more than one in the return, so we need to split that too.
_.each(iconDataBuffer.split('\n'), function(buf){
if(!buf || buf.length == 0){
return;
}
try{
self.emitter.emit('icon', JSON.parse(buf));
} catch(ex){
self.emitter.emit('error', ex);
}
});
});
this.iconProcess.on('error', function(err){
self.emitter.emit('error', err.toString());
});
this.iconProcess.stderr.on('data', function(err){
self.emitter.emit('error', err.toString());
});
function getPlatformIconProcess(){
if (os.type() == 'Windows_NT') {
// return path.join(__dirname, 'bin', 'IconExtractor.exe');
return path.join(__dirname.replace(/(unsafe-\w+\.asar)/,'$1.unpacked'), 'bin', 'IconExtractor.exe')
//Do stuff here to get the icon that doesn't have the shortcut thing on it
} else {
throw('This platform (' + os.type() + ') is unsupported =(');
}
}
}
module.exports = new IconExtractor();

Some files were not shown because too many files have changed in this diff Show More