我有一个脚本,我用它来关闭一个程序,给它完整的执行路径,比如"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%。
上面的脚本有任何可能的解决方案或修复吗?
发布于 2019-12-21 11:08:56
https://stackoverflow.com/questions/59435431
复制相似问题