mirror of
https://github.com/fofolee/uTools-ProcessKiller.git
synced 2025-06-07 13:34:09 +08:00
更改win下获取进程的方式,大幅缩减获取时间
This commit is contained in:
parent
c4b8509da7
commit
15ae052ccd
@ -6,7 +6,7 @@ CacheIcons = async tasks => {
|
||||
var noCaches = [];
|
||||
if (window.isWin) {
|
||||
for (var t of tasks) {
|
||||
if (t.Path) {
|
||||
if (/^[A-z]:\\/.test(t.Path)) {
|
||||
if (localStorage[basename(t.Path, '.exe')] == undefined && !noCaches.includes(t.Path)) noCaches.push(t.Path)
|
||||
}
|
||||
}
|
||||
@ -63,23 +63,20 @@ search = (t, text) => {
|
||||
var taskinfo = '';
|
||||
var icon;
|
||||
if (window.isWin) {
|
||||
if (t.Path) {
|
||||
if (/^[A-z]:\\/.test(t.Path)) {
|
||||
icon = localStorage[basename(t.Path, '.exe')]
|
||||
} else {
|
||||
icon = WINDOW_DEFAULT_ICON;
|
||||
}
|
||||
var n = (t.ProcessName + t.Description).toUpperCase();
|
||||
if (n.includes(text)) {
|
||||
var usr = t.UserName ? t.UserName.split('\\').pop() : '',
|
||||
title = t.Description ? t.Description : t.ProcessName,
|
||||
mem = (parseInt(t.WorkingSet) * 100 / window.totalMem).toFixed(2),
|
||||
path = t.Path ? t.Path : '';
|
||||
taskinfo = `<div class="taskinfo" name="${t.ProcessName}">
|
||||
<div class="user">${usr}</div>
|
||||
var mem = (parseInt(t.WorkingSet) * 100 / window.totalMem).toFixed(2);
|
||||
// path = t.Path ? t.Path : '';
|
||||
taskinfo = `<div class="taskinfo" id="${t.Id}">
|
||||
<img src="data:image/png;base64,${icon}">
|
||||
<div class="description">${title}</div>
|
||||
<div class="description">${t.ProcessName}</div>
|
||||
<div class="usage">M: ${mem}%</div>
|
||||
<div class="path">${path}</div></div>`;
|
||||
<div class="path">${t.Path}</div></div>`;
|
||||
}
|
||||
} else {
|
||||
if (t.app) {
|
||||
@ -114,20 +111,23 @@ show = text => {
|
||||
|
||||
utools.onPluginEnter( async ({ code, type, payload }) => {
|
||||
utools.setExpendHeight(0);
|
||||
// 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]
|
||||
}
|
||||
}
|
||||
var initTime = new Date().getTime();
|
||||
window.tasks = await tasklist();
|
||||
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('');
|
||||
utools.setSubInput(({ text }) => {
|
||||
window.text = text;
|
||||
@ -143,9 +143,9 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
|
||||
|
||||
$("#tasklist").on('mousedown', '.taskinfo', function (e) {
|
||||
if (1 == e.which) {
|
||||
kill($(this).attr('name'));
|
||||
kill($(this).attr('id'));
|
||||
} else if (3 == e.which) {
|
||||
kill($(this).attr('name'), $(this).children(".path").html().replace(/\\/g, '/'))
|
||||
kill($(this).attr('id'), $(this).children(".path").html().replace(/\\/g, '/'))
|
||||
}
|
||||
});
|
||||
|
||||
@ -161,9 +161,9 @@ $(document).keydown(e => {
|
||||
switch (e.keyCode) {
|
||||
case 13:
|
||||
if (event.shiftKey) {
|
||||
kill($(".select").attr('name'), $(".select").children(".path").html().replace(/\\/g, '/'))
|
||||
kill($(".select").attr('id'), $(".select").children(".path").html().replace(/\\/g, '/'))
|
||||
} else {
|
||||
kill($(".select").attr('name'));
|
||||
kill($(".select").attr('id'));
|
||||
}
|
||||
break;
|
||||
case 38:
|
||||
|
Binary file not shown.
@ -11,9 +11,7 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="tasklist">
|
||||
<div class="load">Loading...</div>
|
||||
</div>
|
||||
<div id="tasklist"></div>
|
||||
<div id="infopannel"></div>
|
||||
<script src="assets/index.js"></script>
|
||||
</body>
|
||||
|
47
preload.js
47
preload.js
@ -47,16 +47,24 @@ tasklist = () =>
|
||||
{
|
||||
var tasklist = [];
|
||||
if (isWin) {
|
||||
exec('net session > NULL && echo 1 || echo 0', (err, stdout, stderr) => {
|
||||
let isAdmin = parseInt(stdout),
|
||||
IncludeUserName = isAdmin ? '-IncludeUserName' : '',
|
||||
UserName = isAdmin ? ',UserName' : '';
|
||||
powershell(`Get-Process ${IncludeUserName} | sort-object ws -descending | Select-Object ProcessName,Path,Description,WorkingSet${UserName} | ConvertTo-Json`, (stdout, stderr) => {
|
||||
stderr && console.log(stderr);
|
||||
tasklist = JSON.parse(stdout);
|
||||
reslove(tasklist);
|
||||
execFile(GetBinPath('ProcessKiller.exe'), ['getProcess'], { encoding: 'buffer' },(err, stdout, stderr) => {
|
||||
err && reject(iconv.decode(stderr, 'gb18030'));
|
||||
data = JSON.parse(iconv.decode(stdout, 'gb18030'));
|
||||
data = data.sort((x,y) => {
|
||||
return y.WorkingSet - x.WorkingSet;
|
||||
});
|
||||
reslove(data);
|
||||
})
|
||||
// exec('net session > NULL && echo 1 || echo 0', (err, stdout, stderr) => {
|
||||
// let isAdmin = parseInt(stdout),
|
||||
// IncludeUserName = isAdmin ? '-IncludeUserName' : '',
|
||||
// UserName = isAdmin ? ',UserName' : '';
|
||||
// powershell(`Get-Process ${IncludeUserName} | sort-object ws -descending | Select-Object ProcessName,Path,Description,WorkingSet${UserName} | ConvertTo-Json`, (stdout, stderr) => {
|
||||
// stderr && console.log(stderr);
|
||||
// tasklist = JSON.parse(stdout);
|
||||
// reslove(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');
|
||||
@ -97,7 +105,7 @@ taskkill = (task, path, callback) => {
|
||||
}
|
||||
}
|
||||
|
||||
findSecondIndex = (str, cha) => {
|
||||
findThirdIndex = (str, cha) => {
|
||||
var x = str.indexOf(cha);
|
||||
var y = str.indexOf(cha, x + 1);
|
||||
var z = str.indexOf(cha, y + 1);
|
||||
@ -109,10 +117,10 @@ icns2Base64 = icns => {
|
||||
buffer = fs.readFileSync(icns, Buffer)
|
||||
ImgHead = Buffer.from([0x89, 0x50, 0x4E, 0x47])
|
||||
ImgTail = Buffer.from([0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82])
|
||||
var start = findSecondIndex(buffer, ImgHead);
|
||||
var start = findThirdIndex(buffer, ImgHead);
|
||||
// var WidthPos = start + 18;
|
||||
// var ImgWidth = buffer.readInt16BE(WidthPos);
|
||||
var end = findSecondIndex(buffer, ImgTail) + 8;
|
||||
var end = findThirdIndex(buffer, ImgTail) + 8;
|
||||
var b64 = buffer.slice(start, end).toString('base64')
|
||||
return b64
|
||||
}
|
||||
@ -144,4 +152,19 @@ GetIcons = PathList =>
|
||||
})
|
||||
reslove(data)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// var initTime = new Date().getTime();
|
||||
// powershell(`Get-Process | sort-object ws -descending | Select-Object ProcessName,Path,Description,WorkingSet | ConvertTo-Json`, (stdout, stderr) => {
|
||||
// stderr && console.log(stderr);
|
||||
// tasklist = JSON.parse(stdout);
|
||||
// console.log(tasklist);
|
||||
// var EndTime = new Date().getTime();
|
||||
// console.log(EndTime - initTime);
|
||||
// })
|
||||
|
||||
// execFile(path.join('bin', 'ProcessKiller.exe'), ['getProcess'], (err, stdout, stderr) => {
|
||||
// console.log(JSON.parse(stdout));
|
||||
// var EndTime = new Date().getTime();
|
||||
// console.log(EndTime - initTime);
|
||||
// })
|
Loading…
x
Reference in New Issue
Block a user