【发布时间】:2019-12-21 19:15:42
【问题描述】:
我有一个脚本,我用它来关闭一个程序,给它一个完整的 exe 路径,比如“c:\run\myprogram.exe”,我希望它优雅地关闭它。我已经成功地使用Process, Close, %hWnd% 或WinClose, ahk_id %iId% 强制执行它,但我一直在寻找的是一种方法,它可以通过完整路径关闭给定程序,然后优雅地关闭它而不强制关闭它。
到目前为止,我有这个脚本:
closeByExactPathToEXE(path) {
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") {
If (ePath := process.ExecutablePath){
iName := process.Name
iId := process.ProcessId
hWnd := process.Handle
ePath := process.ExecutablePath
SplitPath, ePath,, oPath,,,oDrive
;MsgBox % "Letter:" oDrive "`nPath: "oPath "`npath" path
If !InStr(ePath,path)
Continue
Loop, parse, exCludes, CSV
If (iName = A_LoopField )
Continue
;My NO!!!
If (iId = AmiNO) or (iName = A_ScriptName)
continue
;~ MsgBox % "Letter:" oDrive "`nPath: "oPath
;~ Process, Close, %hWnd%
;~ PostMessage, 0x112, 0xF060,,, %hWnd% ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
;~ PostMessage, 0x112, 0xF060,,, %iName% ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
;~ WinClose, ahk_id %iId%
}
}
}
上面的脚本接受完整的路径并且应该优雅地关闭给定的程序。 我发现的最近的东西是这样的:
PostMessage, 0x112, 0xF060,,, %hWnd% ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
和:
PostMessage, 0x112, 0xF060,,, %iName% ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
但是,它们不适用于 %hWnd% 和 %iName%。
上述脚本有任何可能的解决方案或修复方法吗?
【问题讨论】:
标签: autohotkey