ahk进程管理器改进版

因为任务栏太多图标,而我个人经常开着十几个ahk进程进行测试,任务栏往往不堪重负,我也不想给每个ahk测试脚本加一个重启按键,所以需要一个gui界面进行管理

发现了社区何许人老大发的这个脚本,然后发现好像功能失效了,检查了一下代码发现是这个脚本没有给管理员权限,而我测试脚本的时候给所有脚本都加了管理员权限,所以第一个修改增加了管理员启动,让这个脚本的适用没有障碍

同时为了让一页显示更多一点不用翻页,加大了高度

 

 

 

 

改进版源码

if !(A_IsAdmin || InStr(DllCall("GetCommandLine", "str"), ".exe"" /r"))
    Run % "*RunAs " (s:=A_IsCompiled ? "" : A_AhkPath " /r ") """" A_ScriptFullPath """" (s ? "" : " /r")


#NoEnv
#NoTrayIcon
#SingleInstance Force
SetBatchLines -1
DetectHiddenWindows On
CreateGUI()
CreateMenu()
RefreshList()
return
GuiClose:
GuiEscape:
ExitApp
CreateGUI() {
	global
	Gui, +HwndHGUI
	Gui, Font, s10, 微软雅黑
	Gui, Add, ListView, xm h600 w700 r10 Grid HwndHLV gLvEvent AltSubmit, 文件名|文件路径|PID
	Loop, Parse, % "退出Q|重启R|暂停S|暂停热键D|结束进程X", |
		Gui, Add, Button, % (A_Index=1 ? "" : "x+40") . " Disabled gExecMenu", %A_LoopField%
	Gui, Add, Button, x+100 gReloadAll, 重启全部A
	Gui, Add, Button, x+55 gRefreshList vBtnRefresh, 刷新列表N
	Gui, Show,, AHK 进程管理 v1.05
}
CreateMenu() {
	Loop, Parse, % "退出Q|重启R|暂停S|暂停热键D||结束进程X", |
		Menu, lvMenu, Add, % A_LoopField, MenuHandler
}
RefreshList() {
	static selfPID := DllCall("GetCurrentProcessId")
	LV_Delete()
	WinGet, id, List, ahk_class AutoHotkey
	Loop, %id% {
		this_id := id%A_Index%
		WinGet, this_pid, PID, ahk_id %this_id%
		if (this_pid != selfPID)
		{
			WinGetTitle, this_title, ahk_id %this_id%
			fPath := RegExReplace(this_title, " - AutoHotkey v[\d.]+$")
			SplitPath, fPath, fName
			
			LV_Add("", fName, fPath, this_pid)
		}
	}
	LV_ModifyCol()
	LV_ModifyCol(1, "Sort")
	GuiControl,, BtnRefresh, 刷新列表N
}
GuiContextMenu(GuiHwnd, CtrlHwnd) {
	global HLV
	if (CtrlHwnd = HLV) && LV_GetNext() {
		Menu, lvMenu, Show
	}
}
MenuHandler(ItemName) {
	static cmd := {重启R: 65303, 暂停热键D: 65305, 暂停: 65306, 退出Q: 65307}
	static WM_COMMAND := 0x111
	if (ItemName = "结束进程X") {
		for i, obj in GetSelectedInfo()
			Process, Close, % obj.pid
	} else {
		for i, obj in GetSelectedInfo()
			PostMessage, WM_COMMAND, % cmd[ItemName],,, % obj.path " ahk_pid " obj.pid
	}
	if (ItemName = "重启R") {
		GuiControl,, BtnRefresh, 刷新中...
		SetTimer, RefreshList, -3000
	} else if (ItemName ~= "退出Q|结束")
		SetTimer, RefreshList, -300
}
GetSelectedInfo() {
	RowNum := 0, arr := []
	while, RowNum := LV_GetNext(RowNum) {
		LV_GetText(path, RowNum, 2)
		LV_GetText(pid, RowNum, 3)
		arr.push( {pid: pid, path: path} )
	}
	return arr
}
LvEvent() {
	if !(A_GuiEvent == "I")
		return
	GuiControlGet, isEnabled, Enabled, 退出Q
	nSelected := LV_GetCount("Selected")
	if !(isEnabled && nSelected) || !(!isEnabled && !nSelected)
	{
		Loop, Parse, % "退出Q|重启R|暂停S|暂停热键D|结束进程X", |
			GuiControl, % "Enabled" !!nSelected, %A_LoopField%
	}
}
ExecMenu() {
	MenuHandler(A_GuiControl)
}
ReloadAll() {
	Loop, % LV_GetCount()
	{
		LV_GetText(path, A_Index, 2)
		LV_GetText(pid, A_Index, 3)
		PostMessage, 0x111, 65303,,, % path " ahk_pid " pid
	}
}
#If WinActive("ahk_id " HGUI)
q::MenuHandler("退出Q")
r::MenuHandler("重启R")
s::MenuHandler("暂停")
d::MenuHandler("暂停热键D")
x::MenuHandler("结束进程X")
a::ReloadAll()
n::RefreshList()
#If 

给TA捐赠
共{{data.count}}人
人已捐赠
办公社区推荐

【ComObjActive操作PPT】之改变选中对象的颜色、形状、线宽

2022-7-31 22:00:38

AHKV2工具

光速吟唱-文本快速输入工具

2022-8-2 13:26:46

4 条回复 A文章作者 M管理员
  1. HoneyBadger
    蜜獾哥给您打赏了¥2
  2. HoneyBadger

    我顶你个肺,太单调了界面还需要美化!

  3. 1河许人

    干的不错,加油

  4. 1河许人
    1河许人给您打赏了¥2
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索