如何防止运行 AutoHotkey 代码时出现 0x80004005 错误?

如何防止运行 AutoHotkey 代码时出现 0x80004005 错误?
  #IfWinActive, ahk_exe explorer.exe          ; only for explorer
    
    ^sc07B::
    selected = % Explorer_GetSelection()        ; get currently selected item in explorer as source ;*[test]
    FileGetAttrib, attrselected, %selected%     ; get attributes of selected item
    ; check if source & target exist, are not equal, and target is a folder
    if selected and clipboard and selected != clipboard and InStr("%attrselected%", "D")
    {
      Loop, parse, clipboard, `n, `r
        FileMove, %A_LoopField%, %selected% 
    }
    
    
    Explorer_GetSelection() {
       WinGetClass, winClass, % "ahk_id" . hWnd := WinExist("A")
       if !(winClass ~= "(Cabinet|Explore)WClass")
          Return
       for window in ComObjCreate("Shell.Application").Windows
          if (hWnd = window.HWND) && (oShellFolderView := window.document)
             break
       for item in oShellFolderView.SelectedItems
          result .= (result = "" ? "" : "`n") . item.path
       if !result
          result := oShellFolderView.Folder.Self.Path
       Return result
    }

执行上述代码时,显示错误0x80004005。

Error:0x80004005
Source:(null)
Description:(null)
HelpFile:(null)
HelpContext:(null)

Specifically:HWND

然后按 Y 键,它就会按预期工作。

Q1. 如何避免显示0x80004005错误?

Q2.为什么这个错误昨天没有出现,今天却出现了?

上述代码是对“如何在 Windows 10 中使用“Ctrl”键和“V”将“粘贴”到鼠标选择的目录而不是当前目录?“。

^v:: → ^sc07B::

文件复制 → 文件移动


后记。

以下几个地方可能会出现异常(也可能不出现异常),我想查看异常内容e,但是没有显示出来,有什么办法可以修改代码吗?

Try     ; Attempts to execute code.
{
   for window in ComObjCreate("Shell.Application").Windows
      if (hWnd = window.HWND) && (oShellFolderView := window.document)
         break
}
Catch e     ; Handles the first error/exception raised by the block above.
{
    MsgBox, An exception was thrown!`nSpecifically: %e%
    Exit
}

MsgBox 的结果,抛出了异常!具体来说:%hWnd%

0x421d12

MsgBox 的结果,抛出了异常!具体来说:%window.HWND%

以下变量名包含非法字符“window.HWND”

答案1

在这种情况下无法说出实现它的具体方法,但猜测它应该有帮助:https://www.autohotkey.com/docs/commands/Try.htm

答案2

我是 Sage7,今天在我的第一次 Com 测试中遇到了类似的问题。我终于解决了它。

这似乎是由 ComObjCreate 或 autohotkey 内部 32 位 iExploer32.exe 的限制造成的,它们无法加载超过总 4GB 内存。设法不要访问太多的 iExploer32(或窗口)

解决的方法,杀死进程树中最顶层的父进程iExploer.exe

相关内容