如何使用Autohotkey

时间:2019-12-21 10:36:17

标签: autohotkey

我有一个脚本,通过给它提供完整的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%

上述脚本有任何可能的解决方案或解决方案吗?

1 个答案:

答案 0 :(得分:1)

首先我会尝试

WinClose, ahk_id %iId%

因为

  • WinClose WM_Close消息)是最不强制的方法:

    WinClose, WinTitle

  • PostMessageSC_Close消息)类似于WM_Close,但更有效:

    PostMessage, 0x112, 0xF060,,,WinTitle

  • WinKill 尝试执行WM_Close,然后尝试终止该进程:

    WinKill, WinTitle

  • Process,Close 是最有效的方法-等同于从任务管理器中终止进程:

    Process,Close, ProcessName.exe