Firefox 要下载到计算机上特定文件夹的自动热键脚本

Firefox 要下载到计算机上特定文件夹的自动热键脚本,firefox,autohotkey,Firefox,Autohotkey,我需要Firefox在保存文件时始终在“另存为”对话框中打开桌面,这样我就可以在桌面上键入文件夹的名称,并将文件保存到我想要的位置。这将是一种对下载的文件进行分组的简单而高效的方法。问题是Firefox在“另存为”对话框窗口中打开了最后一个保存文件夹,我无法用合理的步骤来完成这项工作。要在“另存为”对话框中自动打开桌面,我能想到的最好方法是使用这个自动热键脚本,我遇到了一个问题: !+^s:: MouseMove, %A_CaretX%, %A_CaretY% CoordMode, Mouse

我需要Firefox在保存文件时始终在“另存为”对话框中打开桌面,这样我就可以在桌面上键入文件夹的名称,并将文件保存到我想要的位置。这将是一种对下载的文件进行分组的简单而高效的方法。问题是Firefox在“另存为”对话框窗口中打开了最后一个保存文件夹,我无法用合理的步骤来完成这项工作。要在“另存为”对话框中自动打开桌面,我能想到的最好方法是使用这个自动热键脚本,我遇到了一个问题:

!+^s:: 
MouseMove, %A_CaretX%, %A_CaretY%
CoordMode, Mouse, Screen
MouseGetPos, xpos, ypos
SetMouseDelay, 2
MouseMove,445,46
Click Left    
Send,Desktop
Send,{Enter}    
MouseMove, %xpos%, %ypos%
Click Left
CoordMode, Mouse, Screen
MouseGetPos, xpos, ypos
SetMouseDelay, 2
MouseMove,445,46
Click Left
MouseMove,%xpos%, %ypos%
Click Left    
Input, L, V L1
Loop {               
    Input, L, V L1 T1.4
    If (ErrorLevel =  "Timeout")
    Break    
    } 
    Send,^{Down}
    Send,{Enter}
    MouseClick,Left,720,473
    MouseClick,Left,720,473
    return  
这个脚本的问题是输入命令——它不等待我输入文件夹的名称,而是立即执行下面的命令


编辑:脚本现在完全可以工作了(多亏了Forivin)。脚本暂停并等待键入文件夹的名称时,还需要一行输入comamand“Input,L,V L1”。我已经使用MouseClick命令和坐标来确认对话框。由于某些原因,用Enter确认对话框(4次)在我的计算机上无法准确工作。EDIT2:添加了两行,以便使用下拉列表文件夹名称建议,因此不需要键入整个文件夹名称。

使用Control*-命令将是一种更可靠的方法:

!+^s::
    WinGet, hWnd, ID, A ;Get handle of active window

    ;Navigate the the users desktop folder
    ControlFocus, ToolbarWindow324, ahk_id %hWnd%
    ControlClick, ToolbarWindow324, ahk_id %hWnd%,,,2, NA
    ControlSetText, Edit2, `%HOMEPATH`%\Desktop\, ahk_id %hWnd%
    ControlSend, Edit2, {Enter}, ahk_id %hWnd%

    ;Set focus to the folder list
    Sleep, 100
    ControlFocus, DirectUIHWND2, ahk_id %hWnd%

    Input, L, V L1 T2 ;wait until you start typing a folder name (if you just wait 2 seconds, the download will be canceled)
    If (ErrorLevel =  "Timeout") { ;if you waited too long:
        ControlClick, Button2, ahk_id %hWnd%,,,, NA ;click the Cancel button
        Return ;end of the hotkey
    }
    Loop { ;wait until you haven't typed a new letter for 0.4 seconds
        Input, L, V L1 T0.4
        If (ErrorLevel =  "Timeout")
            Break
    }
    ControlGetText, button1Text, Button1, ahk_id %hWnd%
    If (button1Text = "&Open") { ;If your windows isn't English, you need to replace the word "Open", if you're confused remove the if statement (but leave the content)
         ControlClick, Button1, ahk_id %hWnd%,,,, NA ;click the Open button
         Sleep, 100
    }
    ControlClick, Button1, ahk_id %hWnd%,,,, NA ;click the Save button
Return

使用Control*-命令将是一种更可靠的方法:

!+^s::
    WinGet, hWnd, ID, A ;Get handle of active window

    ;Navigate the the users desktop folder
    ControlFocus, ToolbarWindow324, ahk_id %hWnd%
    ControlClick, ToolbarWindow324, ahk_id %hWnd%,,,2, NA
    ControlSetText, Edit2, `%HOMEPATH`%\Desktop\, ahk_id %hWnd%
    ControlSend, Edit2, {Enter}, ahk_id %hWnd%

    ;Set focus to the folder list
    Sleep, 100
    ControlFocus, DirectUIHWND2, ahk_id %hWnd%

    Input, L, V L1 T2 ;wait until you start typing a folder name (if you just wait 2 seconds, the download will be canceled)
    If (ErrorLevel =  "Timeout") { ;if you waited too long:
        ControlClick, Button2, ahk_id %hWnd%,,,, NA ;click the Cancel button
        Return ;end of the hotkey
    }
    Loop { ;wait until you haven't typed a new letter for 0.4 seconds
        Input, L, V L1 T0.4
        If (ErrorLevel =  "Timeout")
            Break
    }
    ControlGetText, button1Text, Button1, ahk_id %hWnd%
    If (button1Text = "&Open") { ;If your windows isn't English, you need to replace the word "Open", if you're confused remove the if statement (but leave the content)
         ControlClick, Button1, ahk_id %hWnd%,,,, NA ;click the Open button
         Sleep, 100
    }
    ControlClick, Button1, ahk_id %hWnd%,,,, NA ;click the Save button
Return


T之后是
1.4
,即1秒和0.4秒。不是很低吗?引用自AHK文档=>
T:Timeout(例如T3)。终止输入并将ErrorLevel设置为字超时之前等待的秒数。如果输入超时,OutputVar将设置为用户有时间输入的任何文本。该值可以是浮点数,如2.5。
Hi-TechJS,我是如何解释它的,它代表在文件夹名称中输入字符之间的时间。一旦这个时间过去,脚本应该执行下一个命令。两个字符之间有足够的时间等待,直到我输入下一个字符。即使没有输入命令,脚本也无法工作。到目前为止,它完成了我使用鼠标所做的一切,但当我单击“保存”时,它会显示:找不到桌面文件。问题是,左键单击会丢失窗口中的焦点,并且无法识别文件夹的名称。顺便说一句,我自己不喜欢使用loop,所以请您这样做,因为loop有一些意外行为。改为使用
SetTimer
。请随意添加您认为可以改进脚本TechJS的任何调整。我很高兴我终于明白了这一点,它就像一个符咒:)如果你想取消等待在文件名框中键入的内容,只需将文件下载到桌面,就可以添加另一个循环。也可以在脚本开头添加一个简单的回车键,然后从下载管理器对话框中运行它。我能找到的唯一一个Firefox插件可以做任何类似的事情,就是将文件保存到,但我认为他们的方法不会保存任何点击,它会使过程变得更加复杂,因为你没有
1.4
,即1和0.4秒。不是很低吗?引用自AHK文档=>
T:Timeout(例如T3)。终止输入并将ErrorLevel设置为字超时之前等待的秒数。如果输入超时,OutputVar将设置为用户有时间输入的任何文本。该值可以是浮点数,如2.5。
Hi-TechJS,我是如何解释它的,它代表在文件夹名称中输入字符之间的时间。一旦这个时间过去,脚本应该执行下一个命令。两个字符之间有足够的时间等待,直到我输入下一个字符。即使没有输入命令,脚本也无法工作。到目前为止,它完成了我使用鼠标所做的一切,但当我单击“保存”时,它会显示:找不到桌面文件。问题是,左键单击会丢失窗口中的焦点,并且无法识别文件夹的名称。顺便说一句,我自己不喜欢使用loop,所以请您这样做,因为loop有一些意外行为。改为使用
SetTimer
。请随意添加您认为可以改进脚本TechJS的任何调整。我很高兴我终于明白了这一点,它就像一个符咒:)如果你想取消等待在文件名框中键入的内容,只需将文件下载到桌面,就可以添加另一个循环。也可以在脚本开头添加一个简单的回车键,然后从下载管理器对话框中运行它。我能找到的唯一一个Firefox插件可以做任何类似的事情,就是将文件保存到,但我不认为他们的方法可以保存任何点击,这相当复杂的过程!我尝试了你的脚本,但它对我不起作用,它所做的只是删除框中的文件名。你测试了它,它对你有效吗?正如我所说,这个脚本只负责在“另存为”对话框中将你安全地导航到桌面。我理解Forivin,但我已经尝试过了,它在“另存为”对话框中没有导航到桌面。我不知道为什么,也许homepath命令可能有问题?好的,我编辑了我的代码。如果我理解正确的话,代码现在可以完成您想要的一切。我已经运行了您的脚本for ivin,但是有些东西不太管用。这正是我所需要的,但由于某些原因,它不能准确地工作,我仍然无法确定它可能是什么,但我想我会找到答案的。该脚本的一个明显问题是,它没有将焦点放在“文件名”框中,并且您无法实际键入要将文件保存到的文件夹的名称。这是脚本需要做的基本事情-转到桌面,等待我键入文件夹的名称,或者更好地开始键入并自动完成,然后将文件保存到所需的文件夹。嗨,Forivin!我试过你的剧本,但不管用