mirror of
https://github.com/fofolee/uTools-ProcessKiller.git
synced 2025-07-27 17:49:39 +08:00
Compare commits
35 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b0fb4db2cb | ||
|
02b80e839e | ||
|
f4282a80a7 | ||
|
60a36408fb | ||
|
770c1cf74a | ||
|
3e43317d16 | ||
|
232c2435bd | ||
|
b77e0e4841 | ||
|
01b20945b6 | ||
|
f5335ac712 | ||
|
ca00c83d86 | ||
|
9b3e60810e | ||
|
75b1b19898 | ||
|
992c921034 | ||
|
78f6e11944 | ||
|
f950617785 | ||
|
948eb509cb | ||
|
c620f090be | ||
|
b5ee1abca9 | ||
|
d02081309a | ||
|
4cda67aa12 | ||
|
e393419d5e | ||
|
15ae052ccd | ||
|
c4b8509da7 | ||
|
ef878d37c0 | ||
|
afbc1a73c5 | ||
|
e80601389f | ||
|
6f672b22fb | ||
|
26e5e7f877 | ||
|
757e3556ca | ||
|
b9ede9c60f | ||
|
dedc91f2d7 | ||
|
f629b8ef71 | ||
|
d30887651f | ||
|
e9956c33d3 |
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
[Dd]esktop.ini
|
BIN
ProcessKiller-0.1.4.upx
Normal file
BIN
ProcessKiller-0.1.4.upx
Normal file
Binary file not shown.
210
assets/index.js
210
assets/index.js
@ -1,210 +0,0 @@
|
|||||||
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;
|
|
||||||
}
|
|
||||||
});
|
|
BIN
node_modules/.DS_Store
generated
vendored
BIN
node_modules/.DS_Store
generated
vendored
Binary file not shown.
BIN
node_modules/file-icon/file-icon
generated
vendored
BIN
node_modules/file-icon/file-icon
generated
vendored
Binary file not shown.
63
node_modules/file-icon/index.js
generated
vendored
63
node_modules/file-icon/index.js
generated
vendored
@ -1,63 +0,0 @@
|
|||||||
'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
9
node_modules/file-icon/license
generated
vendored
@ -1,9 +0,0 @@
|
|||||||
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
83
node_modules/file-icon/package.json
generated
vendored
@ -1,83 +0,0 @@
|
|||||||
{
|
|
||||||
"_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
98
node_modules/file-icon/readme.md
generated
vendored
@ -1,98 +0,0 @@
|
|||||||
# file-icon [](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
3
node_modules/icon-extractor/.npmignore
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
IconExtractor
|
|
||||||
.gitignore
|
|
||||||
win-iconExtractor-test.js
|
|
35
node_modules/icon-extractor/README.md
generated
vendored
35
node_modules/icon-extractor/README.md
generated
vendored
@ -1,35 +0,0 @@
|
|||||||
# 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
BIN
node_modules/icon-extractor/bin/IconExtractor.exe
generated
vendored
Binary file not shown.
BIN
node_modules/icon-extractor/bin/Newtonsoft.Json.dll
generated
vendored
BIN
node_modules/icon-extractor/bin/Newtonsoft.Json.dll
generated
vendored
Binary file not shown.
55
node_modules/icon-extractor/package.json
generated
vendored
55
node_modules/icon-extractor/package.json
generated
vendored
@ -1,55 +0,0 @@
|
|||||||
{
|
|
||||||
"_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
70
node_modules/icon-extractor/win-iconExtractor.js
generated
vendored
@ -1,70 +0,0 @@
|
|||||||
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();
|
|
BIN
old version/ProcessKiller-0.0.6.upx
Normal file
BIN
old version/ProcessKiller-0.0.6.upx
Normal file
Binary file not shown.
BIN
old version/ProcessKiller-0.1.0.upx
Normal file
BIN
old version/ProcessKiller-0.1.0.upx
Normal file
Binary file not shown.
BIN
old version/ProcessKiller-0.1.1.upx
Normal file
BIN
old version/ProcessKiller-0.1.1.upx
Normal file
Binary file not shown.
BIN
old version/ProcessKiller-0.1.2.upx
Normal file
BIN
old version/ProcessKiller-0.1.2.upx
Normal file
Binary file not shown.
98
preload.js
98
preload.js
@ -1,98 +0,0 @@
|
|||||||
const os = require('os')
|
|
||||||
const iconv = require('iconv-lite')
|
|
||||||
const { spawn, exec } = require("child_process")
|
|
||||||
const { dialog, BrowserWindow, nativeImage } = require('electron').remote
|
|
||||||
const { shell } = require('electron');
|
|
||||||
const path = require("path")
|
|
||||||
|
|
||||||
|
|
||||||
isWin = os.platform() == 'win32' ? true : false;
|
|
||||||
|
|
||||||
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) => {
|
|
||||||
const ps = spawn('powershell', ['-Command', cmd], { encoding: 'buffer' })
|
|
||||||
let chunks = [];
|
|
||||||
let err_chunks = [];
|
|
||||||
ps.stdout.on('data', chunk => {
|
|
||||||
chunks.push(iconv.decode(chunk, 'cp936'))
|
|
||||||
})
|
|
||||||
ps.stderr.on('data', err_chunk => {
|
|
||||||
err_chunks.push(iconv.decode(err_chunk, 'cp936'))
|
|
||||||
})
|
|
||||||
ps.on('close', code => {
|
|
||||||
let stdout = chunks.join("");
|
|
||||||
let stderr = err_chunks.join("");
|
|
||||||
callback(stdout, stderr)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
tasklist = (callback) => {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
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 = (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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
168
readme.md
168
readme.md
@ -1,77 +1,91 @@
|
|||||||
# ProcessKiller V0.0.5
|
# ProcessKiller V0.1.4
|
||||||
|
|
||||||
### 简介
|
## 简介
|
||||||
|
|
||||||
之所以做这个插件一方面是为了熟悉`uTools`的插件开发,另一方面对标`alfred`,实现类似的功能
|
- 列出当前进程,按内存占用从高到低排序
|
||||||
|
- 支持关闭,重启,复制进程路径,在文件夹内显示等功能
|
||||||
### 更新日志
|
- 全平台支持
|
||||||
|
- 有些进程是否能结束、路径是否能获取,取决于uTools是否以管理员权限运行
|
||||||
**v0.0.5**
|
|
||||||
|
## 更新日志
|
||||||
- 更新了对`macOS`的支持,`macOS`相比`window`多了显示`CPU`,`内存`百分比及`用户`的功能,以及默认按照内存占用率进行排序
|
|
||||||
- 增加插件更新检测的功能
|
**v0.1.4**
|
||||||
- 修复了`windows`下可能导致无法显示进程列表的`bug`,强烈建议`windows`用户也进行升级
|
|
||||||
- `windows`下一些`UI`微调
|
- 支持 linux
|
||||||
- 优化重写了部分程序逻辑和代码
|
|
||||||
|
**v0.1.3**
|
||||||

|
|
||||||
|
- 添加更多错误提示
|
||||||
**v0.0.4**
|
- 上架插件中心
|
||||||
|
|
||||||
- 进入插件后列出所有进程
|
**v0.1.1**
|
||||||
- 通过方向键进行列表选择,`enter`关闭进程,`shift+enter`重启进程
|
|
||||||
- 更改插件描述
|
- 当某些进程路径未能获取时,显示相应提示
|
||||||
- 重新进行`upx`打包
|
|
||||||
|
**v0.1.0**
|
||||||
**v0.0.3**
|
|
||||||
|
- 增加两个功能:复制进程路径和在文件管理器中显示
|
||||||
- 增加右键重启进程的功能
|
- 在输入框内增加快捷键提示
|
||||||
|
- 支持使用 Command/Alt + 数字键快速操作
|
||||||
**v0.0.2**
|
- 重写了获取进程图标的方法
|
||||||
|
- 重写了 window下获取进程的方法,大幅提升进入插件的速度
|
||||||
- 对界面重新排版,和`uTools`统一风格,增加进程图标,同时根据进程条目调整下拉框长度
|
- 重写多出代码,大幅压缩插件体积
|
||||||
- 获取进程命令由tasklist更换为powershell的get-process,可以获取到进程的绝对地址和描述(含中文,相对直接显示进程名更加友好),通过搜索进程名称和描述皆可以搜索到相应进程
|
|
||||||
|

|
||||||
### 功能
|
|
||||||
|
**v0.0.6**
|
||||||
- 根据输入框内容列出相应的进程
|
|
||||||
- 点击相应进程进行关闭
|
- 更新`windos`下显示`内存`百分比及`用户`的功能,以及默认按照内存占用率进行排序
|
||||||
- 直接回车关闭列表中的第一个进程
|
- 微调获取进程的相关命令语句
|
||||||
- 暂不支持 macOS
|
|
||||||
|
**v0.0.5**
|
||||||
### 预览
|
|
||||||
|
- 更新了对`macOS`的支持,`macOS`相比`window`多了显示`CPU`,`内存`百分比及`用户`的功能,以及默认按照内存占用率进行排序
|
||||||

|
- 增加插件更新检测的功能
|
||||||
|
- 修复了`windows`下可能导致无法显示进程列表的`bug`,强烈建议`windows`用户也进行升级
|
||||||
|
- `windows`下一些`UI`微调
|
||||||
|
- 优化重写了部分程序逻辑和代码
|
||||||
### 下载
|
|
||||||
|
**v0.0.4**
|
||||||
[百度网盘](https://pan.baidu.com/s/1nfBnFLMdXisWATVYBKqONw) 提取码: `fmc6`
|
|
||||||
|
- 进入插件后列出所有进程
|
||||||
[项目地址](https://github.com/fofolee/uTools-ProcessKiller/)
|
- 通过方向键进行列表选择,`enter`关闭进程,`shift+enter`重启进程
|
||||||
|
- 更改插件描述
|
||||||
[插件发布页](https://yuanliao.info/d/296)
|
- 重新进行`upx`打包
|
||||||
|
|
||||||
### 安装方法
|
**v0.0.3**
|
||||||
|
|
||||||
将`upx`文件拖入`uTools`输入框中安装即可
|
- 增加右键重启进程的功能
|
||||||
|
|
||||||
### 关键字
|
**v0.0.2**
|
||||||
|
|
||||||
`kill` `关闭进程`
|
- 对界面重新排版,和`uTools`统一风格,增加进程图标,同时根据进程条目调整下拉框长度
|
||||||
|
- 获取进程命令由tasklist更换为powershell的get-process,可以获取到进程的绝对地址和描述(含中文,相对直接显示进程名更加友好),通过搜索进程名称和描述皆可以搜索到相应进程
|
||||||
### ~~Todo~~ (Maydo)
|
|
||||||
|
## 预览
|
||||||
- ~~UI改善~~
|
|
||||||
- ~~增加进程图标~~
|

|
||||||
- ~~列出进程详细信息~~
|
|
||||||
- ~~重启进程功能~~
|
|
||||||
- ~~进入插件后列出所有进程~~
|
|
||||||
- ~~方向键进行列表选择~~
|
## 下载
|
||||||
- ~~按内存排序~~
|
|
||||||
- ~~添加对 macOS 的支持~~
|
[百度网盘](https://pan.baidu.com/s/1Q4I6LTRgrHgWm67F_xqv0A) 提取码: `nw4p`
|
||||||
|
|
||||||
### 鸣谢
|
[项目地址](https://github.com/fofolee/uTools-ProcessKiller/)
|
||||||
|
|
||||||
感谢大佬[@lanyuanxiaoyao](https://yuanliao.info/u/1737),为开荒阶段奉献了许多值得借鉴的资料
|
[插件发布页](https://yuanliao.info/d/296)
|
||||||
|
|
||||||
|
## 安装方法
|
||||||
|
|
||||||
|
将`upx`文件拖入`uTools`输入框中安装即可
|
||||||
|
|
||||||
|
## 关键字
|
||||||
|
|
||||||
|
`kill` `关闭进程`
|
||||||
|
|
||||||
|
## 类似插件
|
||||||
|
|
||||||
|
[窗口管理 WindowManager](https://yuanliao.info/d/1461)
|
||||||
|
|
||||||
|
[软件卸载 AppUninstaller]( https://yuanliao.info/d/317 )
|
91
src/README.md
Normal file
91
src/README.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# ProcessKiller V0.1.4
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
- 列出当前进程,按内存占用从高到低排序
|
||||||
|
- 支持关闭,重启,复制进程路径,在文件夹内显示等功能
|
||||||
|
- 全平台支持
|
||||||
|
- 有些进程是否能结束、路径是否能获取,取决于uTools是否以管理员权限运行
|
||||||
|
|
||||||
|
## 更新日志
|
||||||
|
|
||||||
|
**v0.1.4**
|
||||||
|
|
||||||
|
- 支持 linux
|
||||||
|
|
||||||
|
**v0.1.3**
|
||||||
|
|
||||||
|
- 添加更多错误提示
|
||||||
|
- 上架插件中心
|
||||||
|
|
||||||
|
**v0.1.1**
|
||||||
|
|
||||||
|
- 当某些进程路径未能获取时,显示相应提示
|
||||||
|
|
||||||
|
**v0.1.0**
|
||||||
|
|
||||||
|
- 增加两个功能:复制进程路径和在文件管理器中显示
|
||||||
|
- 在输入框内增加快捷键提示
|
||||||
|
- 支持使用 Command/Alt + 数字键快速操作
|
||||||
|
- 重写了获取进程图标的方法
|
||||||
|
- 重写了 window下获取进程的方法,大幅提升进入插件的速度
|
||||||
|
- 重写多出代码,大幅压缩插件体积
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**v0.0.6**
|
||||||
|
|
||||||
|
- 更新`windos`下显示`内存`百分比及`用户`的功能,以及默认按照内存占用率进行排序
|
||||||
|
- 微调获取进程的相关命令语句
|
||||||
|
|
||||||
|
**v0.0.5**
|
||||||
|
|
||||||
|
- 更新了对`macOS`的支持,`macOS`相比`window`多了显示`CPU`,`内存`百分比及`用户`的功能,以及默认按照内存占用率进行排序
|
||||||
|
- 增加插件更新检测的功能
|
||||||
|
- 修复了`windows`下可能导致无法显示进程列表的`bug`,强烈建议`windows`用户也进行升级
|
||||||
|
- `windows`下一些`UI`微调
|
||||||
|
- 优化重写了部分程序逻辑和代码
|
||||||
|
|
||||||
|
**v0.0.4**
|
||||||
|
|
||||||
|
- 进入插件后列出所有进程
|
||||||
|
- 通过方向键进行列表选择,`enter`关闭进程,`shift+enter`重启进程
|
||||||
|
- 更改插件描述
|
||||||
|
- 重新进行`upx`打包
|
||||||
|
|
||||||
|
**v0.0.3**
|
||||||
|
|
||||||
|
- 增加右键重启进程的功能
|
||||||
|
|
||||||
|
**v0.0.2**
|
||||||
|
|
||||||
|
- 对界面重新排版,和`uTools`统一风格,增加进程图标,同时根据进程条目调整下拉框长度
|
||||||
|
- 获取进程命令由tasklist更换为powershell的get-process,可以获取到进程的绝对地址和描述(含中文,相对直接显示进程名更加友好),通过搜索进程名称和描述皆可以搜索到相应进程
|
||||||
|
|
||||||
|
## 预览
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 下载
|
||||||
|
|
||||||
|
[百度网盘](https://pan.baidu.com/s/1Q4I6LTRgrHgWm67F_xqv0A) 提取码: `nw4p`
|
||||||
|
|
||||||
|
[项目地址](https://github.com/fofolee/uTools-ProcessKiller/)
|
||||||
|
|
||||||
|
[插件发布页](https://yuanliao.info/d/296)
|
||||||
|
|
||||||
|
## 安装方法
|
||||||
|
|
||||||
|
将`upx`文件拖入`uTools`输入框中安装即可
|
||||||
|
|
||||||
|
## 关键字
|
||||||
|
|
||||||
|
`kill` `关闭进程`
|
||||||
|
|
||||||
|
## 类似插件
|
||||||
|
|
||||||
|
[窗口管理 WindowManager](https://yuanliao.info/d/1461)
|
||||||
|
|
||||||
|
[软件卸载 AppUninstaller]( https://yuanliao.info/d/317 )
|
71
src/assets/hlsearch.js
Normal file
71
src/assets/hlsearch.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
highlight v3 !! Modified by Jon Raasch (http://jonraasch.com) to fix IE6 bug !!
|
||||||
|
|
||||||
|
Highlights arbitrary terms.
|
||||||
|
|
||||||
|
<http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html>
|
||||||
|
|
||||||
|
MIT license.
|
||||||
|
|
||||||
|
Johann Burkard
|
||||||
|
<http://johannburkard.de>
|
||||||
|
<mailto:jb@eaio.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
jQuery.fn.highlight = function(pat, hlclass) {
|
||||||
|
function innerHighlight(node, pat) {
|
||||||
|
var skip = 0;
|
||||||
|
if (node.nodeType == 3) {
|
||||||
|
var pos = node.data.toUpperCase().indexOf(pat);
|
||||||
|
if (pos >= 0) {
|
||||||
|
var spannode = document.createElement('span');
|
||||||
|
spannode.className = hlclass;
|
||||||
|
var middlebit = node.splitText(pos);
|
||||||
|
var endbit = middlebit.splitText(pat.length);
|
||||||
|
var middleclone = middlebit.cloneNode(true);
|
||||||
|
spannode.appendChild(middleclone);
|
||||||
|
middlebit.parentNode.replaceChild(spannode, middlebit);
|
||||||
|
skip = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
|
||||||
|
for (var i = 0; i < node.childNodes.length; ++i) {
|
||||||
|
i += innerHighlight(node.childNodes[i], pat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return skip;
|
||||||
|
}
|
||||||
|
return this.each(function() {
|
||||||
|
innerHighlight(this, pat.toUpperCase());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
jQuery.fn.removeHighlight = function(hlclass) {
|
||||||
|
function newNormalize(node) {
|
||||||
|
for (var i = 0, children = node.childNodes, nodeCount = children.length; i < nodeCount; i++) {
|
||||||
|
var child = children[i];
|
||||||
|
if (child.nodeType == 1) {
|
||||||
|
newNormalize(child);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (child.nodeType != 3) { continue; }
|
||||||
|
var next = child.nextSibling;
|
||||||
|
if (next == null || next.nodeType != 3) { continue; }
|
||||||
|
var combined_text = child.nodeValue + next.nodeValue;
|
||||||
|
new_node = node.ownerDocument.createTextNode(combined_text);
|
||||||
|
node.insertBefore(new_node, child);
|
||||||
|
node.removeChild(child);
|
||||||
|
node.removeChild(next);
|
||||||
|
i--;
|
||||||
|
nodeCount--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.find("span." + hlclass).each(function() {
|
||||||
|
var thisParent = this.parentNode;
|
||||||
|
thisParent.replaceChild(this.firstChild, this);
|
||||||
|
newNormalize(thisParent);
|
||||||
|
}).end();
|
||||||
|
};
|
286
src/assets/index.js
Normal file
286
src/assets/index.js
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
const DARWIN_DEFAULT_ICON = './imgs/darwin.png'
|
||||||
|
const WINDOW_DEFAULT_ICON = './imgs/window.png'
|
||||||
|
|
||||||
|
CacheIcons = async tasks => {
|
||||||
|
var noCaches = [];
|
||||||
|
if (utools.isWindows()) {
|
||||||
|
for (var t of tasks) {
|
||||||
|
if (/^[A-z]:\\/.test(t.Path)) {
|
||||||
|
if (localStorage[basename(t.Path, '.exe')] == undefined && !noCaches.includes(t.Path)) noCaches.push(t.Path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (noCaches.length != 0) {
|
||||||
|
var b64Icons = await GetIcons(noCaches);
|
||||||
|
b64Icons.forEach(i => {
|
||||||
|
localStorage[basename(i.path, '.exe')] = i.b64Ico;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if(utools.isMacOs()){
|
||||||
|
for (var t of tasks) {
|
||||||
|
if (t.app) {
|
||||||
|
if (localStorage[basename(t.app, '.app')] == undefined && !noCaches.includes(t.app)) noCaches.push(t.app)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (noCaches.length != 0) {
|
||||||
|
var b64Icons = await GetIcons(noCaches);
|
||||||
|
b64Icons.forEach(i => {
|
||||||
|
localStorage[basename(i.path, '.app')] = i.b64Ico;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kill = async (pid, restart) => {
|
||||||
|
if (window.taskkill(pid, restart)) {
|
||||||
|
var tasks = await tasklist();
|
||||||
|
show(tasks, window.text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
search = (t, text) => {
|
||||||
|
text = text.toUpperCase();
|
||||||
|
var taskinfo = '';
|
||||||
|
var icon;
|
||||||
|
if (utools.isWindows()) {
|
||||||
|
icon = WINDOW_DEFAULT_ICON
|
||||||
|
if (/^[A-z]:\\/.test(t.Path)) {
|
||||||
|
var cache = localStorage[basename(t.Path, '.exe')];
|
||||||
|
if (cache) icon = 'data:image/png;base64,' + cache
|
||||||
|
}
|
||||||
|
var n = t.ProcessName.toUpperCase();
|
||||||
|
if (n.includes(text)) {
|
||||||
|
var mem = (parseInt(t.WorkingSet) * 100 / window.totalMem).toFixed(2);
|
||||||
|
// path = t.Path ? t.Path : '';
|
||||||
|
taskinfo = `<div class="taskinfo" id="${t.Id}">
|
||||||
|
<img src="${icon}">
|
||||||
|
<div class="description">${t.ProcessName}</div>
|
||||||
|
<div class="usage">M: ${mem}%</div>
|
||||||
|
<div class="path">${t.Path}</div></div>`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (t.app) {
|
||||||
|
icon = 'data:image/png;base64,' + localStorage[basename(t.app, '.app')];
|
||||||
|
} else {
|
||||||
|
icon = DARWIN_DEFAULT_ICON
|
||||||
|
}
|
||||||
|
var n = t.nam.toUpperCase();
|
||||||
|
if (n.includes(text)) {
|
||||||
|
taskinfo = `<div class="taskinfo" id="${t.pid}">
|
||||||
|
<!--<div class="user">${t.usr}</div>-->
|
||||||
|
<img src="${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 = (tasks, text) => {
|
||||||
|
var taskinfo = '';
|
||||||
|
for (var t of 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);
|
||||||
|
if(text) $(".description,.path").highlight(text, 'founds');
|
||||||
|
}
|
||||||
|
|
||||||
|
utools.onPluginEnter( async ({ code, type, payload }) => {
|
||||||
|
utools.setExpendHeight(0);
|
||||||
|
var db = utools.db.get('iconCache');
|
||||||
|
if (db) {
|
||||||
|
for (var key in db.data) {
|
||||||
|
localStorage[key] = db.data[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// var initTime = new Date().getTime();
|
||||||
|
var tasks = await tasklist();
|
||||||
|
if (tasks) {
|
||||||
|
window.text = '';
|
||||||
|
// 读取进程耗时
|
||||||
|
// var tasksLoadedTime = new Date().getTime();
|
||||||
|
// tasksLoadedTime -= initTime;
|
||||||
|
// console.log(tasksLoadedTime);
|
||||||
|
await CacheIcons(tasks);
|
||||||
|
// 缓存图标耗时
|
||||||
|
// var iconsCachedTime = new Date().getTime();
|
||||||
|
// iconsCachedTime -= (tasksLoadedTime + initTime);
|
||||||
|
// console.log(iconsCachedTime);
|
||||||
|
show(tasks, window.text);
|
||||||
|
var sign = utools.isMacOs() ? '⌘' : 'Alt';
|
||||||
|
$('.numbers').html(`
|
||||||
|
<div>${sign}+1</div>
|
||||||
|
<div>${sign}+2</div>
|
||||||
|
<div>${sign}+3</div>
|
||||||
|
<div>${sign}+4</div>
|
||||||
|
<div>${sign}+5</div>
|
||||||
|
<div>${sign}+6</div>
|
||||||
|
<div>${sign}+7</div>
|
||||||
|
<div>${sign}+8</div>
|
||||||
|
<div>${sign}+9</div>
|
||||||
|
<div>${sign}+0</div>
|
||||||
|
<div>${sign}+-</div>`
|
||||||
|
);
|
||||||
|
utools.setSubInput(({ text }) => {
|
||||||
|
window.text = text;
|
||||||
|
show(tasks, text);
|
||||||
|
}, '左/右键 -> 关闭/重启进程; ctrl + c/e/r -> 复制路径/文件管理器中显示/重启');
|
||||||
|
utools.onPluginOut(() => {
|
||||||
|
var update = { _id: "iconCache", data: localStorage };
|
||||||
|
if (db) update._rev = db._rev;
|
||||||
|
utools.db.put(update);
|
||||||
|
$('.numbers').html('');
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return utools.showNotification('获取进程列表失败')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$("#tasklist").on('mousedown', '.taskinfo', function (e) {
|
||||||
|
if (1 == e.which) {
|
||||||
|
kill($(this).attr('id'), false);
|
||||||
|
} else if (3 == e.which) {
|
||||||
|
kill($(this).attr('id'), $(this).children(".path").text().replace(/\\/g, '/'))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#tasklist").on('mousemove', '.taskinfo', function () {
|
||||||
|
var mouseUnlockTime = new Date().getTime();
|
||||||
|
if (mouseUnlockTime - window.mouseLockTime > 500) {
|
||||||
|
$(".select").removeClass('select');
|
||||||
|
$(this).addClass('select');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Mousetrap.bind('ctrl+c', () => {
|
||||||
|
var path = $(".select").children(".path").text();
|
||||||
|
copy(path);
|
||||||
|
utools.showNotification('已复制')
|
||||||
|
return false
|
||||||
|
});
|
||||||
|
|
||||||
|
Mousetrap.bind('ctrl+e', () => {
|
||||||
|
var path
|
||||||
|
if (utools.isLinux()) {
|
||||||
|
path = getLinuxProcPath($(".select").attr('id'))
|
||||||
|
} else {
|
||||||
|
path = $(".select").children(".path").text();
|
||||||
|
}
|
||||||
|
if(path) open(path);
|
||||||
|
return false
|
||||||
|
});
|
||||||
|
|
||||||
|
Mousetrap.bind('ctrl+r', () => {
|
||||||
|
kill($(".select").attr('id'), $(".select").children(".path").text().replace(/\\/g, '/'))
|
||||||
|
return false
|
||||||
|
});
|
||||||
|
|
||||||
|
Mousetrap.bind('enter', () => {
|
||||||
|
kill($(".select").attr('id'), false);
|
||||||
|
return false
|
||||||
|
});
|
||||||
|
|
||||||
|
Mousetrap.bind('down', () => {
|
||||||
|
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" })
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
});
|
||||||
|
|
||||||
|
Mousetrap.bind('up', () => {
|
||||||
|
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" })
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
});
|
||||||
|
|
||||||
|
key = utools.isMacOs() ? 'command' : 'alt'
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+1`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+2`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 1;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+3`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 2;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+4`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 3;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+5`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 4;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+6`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 5;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+7`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 6;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+8`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 7;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+9`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 8;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+0`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 9;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
Mousetrap.bind([`${key}+-`], function (e) {
|
||||||
|
var index = ($(window).scrollTop()) / 50 + 10;
|
||||||
|
kill($(`.taskinfo:eq(${index})`).attr('id'), false);
|
||||||
|
return false;
|
||||||
|
})
|
11
src/assets/mousetrap.min.js
vendored
Normal file
11
src/assets/mousetrap.min.js
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/* mousetrap v1.6.3 craig.is/killing/mice */
|
||||||
|
(function(q,u,c){function v(a,b,g){a.addEventListener?a.addEventListener(b,g,!1):a.attachEvent("on"+b,g)}function z(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return n[a.which]?n[a.which]:r[a.which]?r[a.which]:String.fromCharCode(a.which).toLowerCase()}function F(a){var b=[];a.shiftKey&&b.push("shift");a.altKey&&b.push("alt");a.ctrlKey&&b.push("ctrl");a.metaKey&&b.push("meta");return b}function w(a){return"shift"==a||"ctrl"==a||"alt"==a||
|
||||||
|
"meta"==a}function A(a,b){var g,d=[];var e=a;"+"===e?e=["+"]:(e=e.replace(/\+{2}/g,"+plus"),e=e.split("+"));for(g=0;g<e.length;++g){var m=e[g];B[m]&&(m=B[m]);b&&"keypress"!=b&&C[m]&&(m=C[m],d.push("shift"));w(m)&&d.push(m)}e=m;g=b;if(!g){if(!p){p={};for(var c in n)95<c&&112>c||n.hasOwnProperty(c)&&(p[n[c]]=c)}g=p[e]?"keydown":"keypress"}"keypress"==g&&d.length&&(g="keydown");return{key:m,modifiers:d,action:g}}function D(a,b){return null===a||a===u?!1:a===b?!0:D(a.parentNode,b)}function d(a){function b(a){a=
|
||||||
|
a||{};var b=!1,l;for(l in p)a[l]?b=!0:p[l]=0;b||(x=!1)}function g(a,b,t,f,g,d){var l,E=[],h=t.type;if(!k._callbacks[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(l=0;l<k._callbacks[a].length;++l){var c=k._callbacks[a][l];if((f||!c.seq||p[c.seq]==c.level)&&h==c.action){var e;(e="keypress"==h&&!t.metaKey&&!t.ctrlKey)||(e=c.modifiers,e=b.sort().join(",")===e.sort().join(","));e&&(e=f&&c.seq==f&&c.level==d,(!f&&c.combo==g||e)&&k._callbacks[a].splice(l,1),E.push(c))}}return E}function c(a,b,c,f){k.stopCallback(b,
|
||||||
|
b.target||b.srcElement,c,f)||!1!==a(b,c)||(b.preventDefault?b.preventDefault():b.returnValue=!1,b.stopPropagation?b.stopPropagation():b.cancelBubble=!0)}function e(a){"number"!==typeof a.which&&(a.which=a.keyCode);var b=z(a);b&&("keyup"==a.type&&y===b?y=!1:k.handleKey(b,F(a),a))}function m(a,g,t,f){function h(c){return function(){x=c;++p[a];clearTimeout(q);q=setTimeout(b,1E3)}}function l(g){c(t,g,a);"keyup"!==f&&(y=z(g));setTimeout(b,10)}for(var d=p[a]=0;d<g.length;++d){var e=d+1===g.length?l:h(f||
|
||||||
|
A(g[d+1]).action);n(g[d],e,f,a,d)}}function n(a,b,c,f,d){k._directMap[a+":"+c]=b;a=a.replace(/\s+/g," ");var e=a.split(" ");1<e.length?m(a,e,b,c):(c=A(a,c),k._callbacks[c.key]=k._callbacks[c.key]||[],g(c.key,c.modifiers,{type:c.action},f,a,d),k._callbacks[c.key][f?"unshift":"push"]({callback:b,modifiers:c.modifiers,action:c.action,seq:f,level:d,combo:a}))}var k=this;a=a||u;if(!(k instanceof d))return new d(a);k.target=a;k._callbacks={};k._directMap={};var p={},q,y=!1,r=!1,x=!1;k._handleKey=function(a,
|
||||||
|
d,e){var f=g(a,d,e),h;d={};var k=0,l=!1;for(h=0;h<f.length;++h)f[h].seq&&(k=Math.max(k,f[h].level));for(h=0;h<f.length;++h)f[h].seq?f[h].level==k&&(l=!0,d[f[h].seq]=1,c(f[h].callback,e,f[h].combo,f[h].seq)):l||c(f[h].callback,e,f[h].combo);f="keypress"==e.type&&r;e.type!=x||w(a)||f||b(d);r=l&&"keydown"==e.type};k._bindMultiple=function(a,b,c){for(var d=0;d<a.length;++d)n(a[d],b,c)};v(a,"keypress",e);v(a,"keydown",e);v(a,"keyup",e)}if(q){var n={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",
|
||||||
|
18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},r={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},C={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},B={option:"alt",command:"meta","return":"enter",
|
||||||
|
escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p;for(c=1;20>c;++c)n[111+c]="f"+c;for(c=0;9>=c;++c)n[c+96]=c.toString();d.prototype.bind=function(a,b,c){a=a instanceof Array?a:[a];this._bindMultiple.call(this,a,b,c);return this};d.prototype.unbind=function(a,b){return this.bind.call(this,a,function(){},b)};d.prototype.trigger=function(a,b){if(this._directMap[a+":"+b])this._directMap[a+":"+b]({},a);return this};d.prototype.reset=function(){this._callbacks={};
|
||||||
|
this._directMap={};return this};d.prototype.stopCallback=function(a,b){if(-1<(" "+b.className+" ").indexOf(" mousetrap ")||D(b,this.target))return!1;if("composedPath"in a&&"function"===typeof a.composedPath){var c=a.composedPath()[0];c!==a.target&&(b=c)}return"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable};d.prototype.handleKey=function(){return this._handleKey.apply(this,arguments)};d.addKeycodes=function(a){for(var b in a)a.hasOwnProperty(b)&&(n[b]=a[b]);p=null};
|
||||||
|
d.init=function(){var a=d(u),b;for(b in a)"_"!==b.charAt(0)&&(d[b]=function(b){return function(){return a[b].apply(a,arguments)}}(b))};d.init();q.Mousetrap=d;"undefined"!==typeof module&&module.exports&&(module.exports=d);"function"===typeof define&&define.amd&&define(function(){return d})}})("undefined"!==typeof window?window:null,"undefined"!==typeof window?document:null);
|
@ -10,12 +10,18 @@
|
|||||||
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;
|
||||||
}
|
}
|
||||||
@ -42,25 +48,24 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load {
|
.numbers{
|
||||||
margin-top: 10px;
|
position: fixed;
|
||||||
text-align: center;
|
top: 0;
|
||||||
font-size: large;
|
right: 0;
|
||||||
color: #666666;
|
width: 60px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #747474;
|
||||||
|
font-weight: 200;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.numbers div{
|
||||||
|
height: 50px;;
|
||||||
|
line-height: 50px;
|
||||||
}
|
}
|
122
src/bin/ProcessKiller.cs
Normal file
122
src/bin/ProcessKiller.cs
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
// ProcessKiller for uTools
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Management;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ProcessKiller {
|
||||||
|
|
||||||
|
class ProcKiller {
|
||||||
|
|
||||||
|
[DllImport ("shell32.dll")]
|
||||||
|
private static extern IntPtr ExtractIcon (IntPtr hInst, string lpFileName, int nIndex);
|
||||||
|
|
||||||
|
// 获取图标
|
||||||
|
static string getBase64Icon (string path) {
|
||||||
|
string[] pathList = path.Split ('|');
|
||||||
|
string output = "[";
|
||||||
|
foreach (string p in pathList) {
|
||||||
|
Icon AssociatedIcon = SystemIcons.Application;
|
||||||
|
// AssociatedIcon = Icon.ExtractAssociatedIcon (p.Trim ());
|
||||||
|
string b64Ico;
|
||||||
|
try {
|
||||||
|
System.IntPtr hIcon;
|
||||||
|
hIcon = ExtractIcon (IntPtr.Zero, p.Trim (), 0);
|
||||||
|
AssociatedIcon = Icon.FromHandle (hIcon);
|
||||||
|
ImageConverter converter = new ImageConverter ();
|
||||||
|
byte[] data = (byte[]) converter.ConvertTo (AssociatedIcon.ToBitmap (), typeof (byte[]));
|
||||||
|
b64Ico = Convert.ToBase64String (data);
|
||||||
|
} catch {
|
||||||
|
b64Ico = "";
|
||||||
|
}
|
||||||
|
output += string.Format ("{{\"path\": \"{0}\", \"b64Ico\": \"{1}\"}},", p, b64Ico);
|
||||||
|
}
|
||||||
|
output = output.Substring (0, output.Length - 1);
|
||||||
|
output += "]";
|
||||||
|
return output.Replace ("\\", "\\\\");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取进程
|
||||||
|
static string getProcessList () {
|
||||||
|
// 过滤列表
|
||||||
|
string[] filterList = {
|
||||||
|
"conhost",
|
||||||
|
"svchost",
|
||||||
|
"idle",
|
||||||
|
"system",
|
||||||
|
"rundll32",
|
||||||
|
"csrss",
|
||||||
|
"lsass",
|
||||||
|
"lsm",
|
||||||
|
"smss",
|
||||||
|
"wininit",
|
||||||
|
"winlogon",
|
||||||
|
"services",
|
||||||
|
"spoolsv",
|
||||||
|
"processkiller",
|
||||||
|
"memory compression"
|
||||||
|
};
|
||||||
|
|
||||||
|
string ProcessList = "[";
|
||||||
|
Process[] processes = Process.GetProcesses ();
|
||||||
|
foreach (Process p in processes) {
|
||||||
|
var name = p.ProcessName.ToLower ();
|
||||||
|
if (filterList.Contains (name))
|
||||||
|
continue;
|
||||||
|
string path;
|
||||||
|
try {
|
||||||
|
path = p.MainModule.FileName.Replace ("\\", "\\\\");
|
||||||
|
} catch {
|
||||||
|
path = "程序路径获取失败,需要管理员权限";
|
||||||
|
}
|
||||||
|
// string description;
|
||||||
|
// try {
|
||||||
|
// description = p.MainModule.FileVersionInfo.FileDescription
|
||||||
|
// } catch {
|
||||||
|
// description = name;
|
||||||
|
// }
|
||||||
|
ProcessList += string.Format ("{{\"ProcessName\": \"{0}\", \"Path\": \"{1}\", \"WorkingSet\": {2}, \"Id\": {3}}},", p.ProcessName, path, p.WorkingSet, p.Id);
|
||||||
|
}
|
||||||
|
ProcessList = ProcessList.Substring (0, ProcessList.Length - 1) + "]";
|
||||||
|
return ProcessList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getCommandLine (int Id) {
|
||||||
|
ManagementObjectSearcher commandLineSearcher = new ManagementObjectSearcher (
|
||||||
|
"SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + Id);
|
||||||
|
String commandLine = "";
|
||||||
|
foreach (ManagementObject commandLineObject in commandLineSearcher.Get ()) {
|
||||||
|
commandLine += (String) commandLineObject["CommandLine"];
|
||||||
|
}
|
||||||
|
return commandLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void kill (int Id) {
|
||||||
|
Process.GetProcessById (Id).Kill ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主函数
|
||||||
|
static void Main (string[] args) {
|
||||||
|
if (args.Length == 1) {
|
||||||
|
if (args[0] == "getProcess") {
|
||||||
|
Console.Write (getProcessList ());
|
||||||
|
}
|
||||||
|
} else if (args.Length == 2) {
|
||||||
|
if (args[0] == "getIcons") {
|
||||||
|
string path = args[1];
|
||||||
|
Console.Write (getBase64Icon (path));
|
||||||
|
} else if (args[0] == "getCommandLine") {
|
||||||
|
int id = int.Parse (args[1]);
|
||||||
|
Console.Write (getCommandLine (id));
|
||||||
|
} else if (args[0] == "kill") {
|
||||||
|
int id = int.Parse (args[1]);
|
||||||
|
kill (id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
src/imgs/darwin.png
Normal file
BIN
src/imgs/darwin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
BIN
src/imgs/window.png
Normal file
BIN
src/imgs/window.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
@ -7,12 +7,14 @@
|
|||||||
<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 id="infopannel"></div>
|
<div class="numbers"></div>
|
||||||
<script src="assets/index.js"></script>
|
<script src="assets/index.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
0
node_modules/iconv-lite/Changelog.md → src/node_modules/iconv-lite/Changelog.md
generated
vendored
0
node_modules/iconv-lite/Changelog.md → src/node_modules/iconv-lite/Changelog.md
generated
vendored
0
node_modules/iconv-lite/LICENSE → src/node_modules/iconv-lite/LICENSE
generated
vendored
0
node_modules/iconv-lite/LICENSE → src/node_modules/iconv-lite/LICENSE
generated
vendored
0
node_modules/iconv-lite/README.md → src/node_modules/iconv-lite/README.md
generated
vendored
0
node_modules/iconv-lite/README.md → src/node_modules/iconv-lite/README.md
generated
vendored
0
node_modules/iconv-lite/lib/index.d.ts → src/node_modules/iconv-lite/lib/index.d.ts
generated
vendored
0
node_modules/iconv-lite/lib/index.d.ts → src/node_modules/iconv-lite/lib/index.d.ts
generated
vendored
0
node_modules/iconv-lite/lib/index.js → src/node_modules/iconv-lite/lib/index.js
generated
vendored
0
node_modules/iconv-lite/lib/index.js → src/node_modules/iconv-lite/lib/index.js
generated
vendored
0
node_modules/iconv-lite/lib/streams.js → src/node_modules/iconv-lite/lib/streams.js
generated
vendored
0
node_modules/iconv-lite/lib/streams.js → src/node_modules/iconv-lite/lib/streams.js
generated
vendored
0
node_modules/iconv-lite/package.json → src/node_modules/iconv-lite/package.json
generated
vendored
0
node_modules/iconv-lite/package.json → src/node_modules/iconv-lite/package.json
generated
vendored
0
node_modules/lodash/LICENSE → src/node_modules/lodash/LICENSE
generated
vendored
0
node_modules/lodash/LICENSE → src/node_modules/lodash/LICENSE
generated
vendored
0
node_modules/lodash/README.md → src/node_modules/lodash/README.md
generated
vendored
0
node_modules/lodash/README.md → src/node_modules/lodash/README.md
generated
vendored
0
node_modules/lodash/array.js → src/node_modules/lodash/array.js
generated
vendored
0
node_modules/lodash/array.js → src/node_modules/lodash/array.js
generated
vendored
0
node_modules/lodash/array/chunk.js → src/node_modules/lodash/array/chunk.js
generated
vendored
0
node_modules/lodash/array/chunk.js → src/node_modules/lodash/array/chunk.js
generated
vendored
0
node_modules/lodash/array/compact.js → src/node_modules/lodash/array/compact.js
generated
vendored
0
node_modules/lodash/array/compact.js → src/node_modules/lodash/array/compact.js
generated
vendored
0
node_modules/lodash/array/drop.js → src/node_modules/lodash/array/drop.js
generated
vendored
0
node_modules/lodash/array/drop.js → src/node_modules/lodash/array/drop.js
generated
vendored
0
node_modules/lodash/array/dropRight.js → src/node_modules/lodash/array/dropRight.js
generated
vendored
0
node_modules/lodash/array/dropRight.js → src/node_modules/lodash/array/dropRight.js
generated
vendored
0
node_modules/lodash/array/dropWhile.js → src/node_modules/lodash/array/dropWhile.js
generated
vendored
0
node_modules/lodash/array/dropWhile.js → src/node_modules/lodash/array/dropWhile.js
generated
vendored
0
node_modules/lodash/array/fill.js → src/node_modules/lodash/array/fill.js
generated
vendored
0
node_modules/lodash/array/fill.js → src/node_modules/lodash/array/fill.js
generated
vendored
0
node_modules/lodash/array/findIndex.js → src/node_modules/lodash/array/findIndex.js
generated
vendored
0
node_modules/lodash/array/findIndex.js → src/node_modules/lodash/array/findIndex.js
generated
vendored
0
node_modules/lodash/array/first.js → src/node_modules/lodash/array/first.js
generated
vendored
0
node_modules/lodash/array/first.js → src/node_modules/lodash/array/first.js
generated
vendored
0
node_modules/lodash/array/flatten.js → src/node_modules/lodash/array/flatten.js
generated
vendored
0
node_modules/lodash/array/flatten.js → src/node_modules/lodash/array/flatten.js
generated
vendored
0
node_modules/lodash/array/head.js → src/node_modules/lodash/array/head.js
generated
vendored
0
node_modules/lodash/array/head.js → src/node_modules/lodash/array/head.js
generated
vendored
0
node_modules/lodash/array/indexOf.js → src/node_modules/lodash/array/indexOf.js
generated
vendored
0
node_modules/lodash/array/indexOf.js → src/node_modules/lodash/array/indexOf.js
generated
vendored
0
node_modules/lodash/array/initial.js → src/node_modules/lodash/array/initial.js
generated
vendored
0
node_modules/lodash/array/initial.js → src/node_modules/lodash/array/initial.js
generated
vendored
0
node_modules/lodash/array/last.js → src/node_modules/lodash/array/last.js
generated
vendored
0
node_modules/lodash/array/last.js → src/node_modules/lodash/array/last.js
generated
vendored
0
node_modules/lodash/array/object.js → src/node_modules/lodash/array/object.js
generated
vendored
0
node_modules/lodash/array/object.js → src/node_modules/lodash/array/object.js
generated
vendored
0
node_modules/lodash/array/pull.js → src/node_modules/lodash/array/pull.js
generated
vendored
0
node_modules/lodash/array/pull.js → src/node_modules/lodash/array/pull.js
generated
vendored
0
node_modules/lodash/array/pullAt.js → src/node_modules/lodash/array/pullAt.js
generated
vendored
0
node_modules/lodash/array/pullAt.js → src/node_modules/lodash/array/pullAt.js
generated
vendored
0
node_modules/lodash/array/remove.js → src/node_modules/lodash/array/remove.js
generated
vendored
0
node_modules/lodash/array/remove.js → src/node_modules/lodash/array/remove.js
generated
vendored
0
node_modules/lodash/array/rest.js → src/node_modules/lodash/array/rest.js
generated
vendored
0
node_modules/lodash/array/rest.js → src/node_modules/lodash/array/rest.js
generated
vendored
0
node_modules/lodash/array/slice.js → src/node_modules/lodash/array/slice.js
generated
vendored
0
node_modules/lodash/array/slice.js → src/node_modules/lodash/array/slice.js
generated
vendored
0
node_modules/lodash/array/tail.js → src/node_modules/lodash/array/tail.js
generated
vendored
0
node_modules/lodash/array/tail.js → src/node_modules/lodash/array/tail.js
generated
vendored
0
node_modules/lodash/array/take.js → src/node_modules/lodash/array/take.js
generated
vendored
0
node_modules/lodash/array/take.js → src/node_modules/lodash/array/take.js
generated
vendored
0
node_modules/lodash/array/takeRight.js → src/node_modules/lodash/array/takeRight.js
generated
vendored
0
node_modules/lodash/array/takeRight.js → src/node_modules/lodash/array/takeRight.js
generated
vendored
0
node_modules/lodash/array/takeWhile.js → src/node_modules/lodash/array/takeWhile.js
generated
vendored
0
node_modules/lodash/array/takeWhile.js → src/node_modules/lodash/array/takeWhile.js
generated
vendored
0
node_modules/lodash/array/union.js → src/node_modules/lodash/array/union.js
generated
vendored
0
node_modules/lodash/array/union.js → src/node_modules/lodash/array/union.js
generated
vendored
0
node_modules/lodash/array/uniq.js → src/node_modules/lodash/array/uniq.js
generated
vendored
0
node_modules/lodash/array/uniq.js → src/node_modules/lodash/array/uniq.js
generated
vendored
0
node_modules/lodash/array/unique.js → src/node_modules/lodash/array/unique.js
generated
vendored
0
node_modules/lodash/array/unique.js → src/node_modules/lodash/array/unique.js
generated
vendored
0
node_modules/lodash/array/unzip.js → src/node_modules/lodash/array/unzip.js
generated
vendored
0
node_modules/lodash/array/unzip.js → src/node_modules/lodash/array/unzip.js
generated
vendored
0
node_modules/lodash/array/unzipWith.js → src/node_modules/lodash/array/unzipWith.js
generated
vendored
0
node_modules/lodash/array/unzipWith.js → src/node_modules/lodash/array/unzipWith.js
generated
vendored
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user