AutoHotKey:从 Windows 资源管理器复制文件,将路径粘贴到 Notepad2

AutoHotKey:从 Windows 资源管理器复制文件,将路径粘贴到 Notepad2

我正在寻找一种方法来做到这一点。

使用 ArsClip 的剪贴板栏,我看到当我在 Windows 资源管理器中选择一个文件并复制它时,它的完整路径会存储在剪贴板上。

如果我继续选择 Windows 资源管理器并粘贴,该文件就会被复制到当前文件夹,好的。

如果我转到 Notepad2(或任何文本编辑器)并粘贴,通常的行为是什么也不会发生。我希望将文件路径粘贴为文本。

我正在尝试使用 AutoHotKey 实现此功能。我需要:

1) intercept paste command, not just Ctrl+V keystroke
2) verify if the pasting target is a text editor and not a file manager
3) when that's the case, I'd need to retrieve the file path from clipboard, which ArsClip is able to do
4) then edit clipbard to place that string into it, so that the paste command will write the string to the target.

我不介意丢失文件引用。这意味着,我不介意在运行此例程后,Windows 资源管理器不再复制文件。

知道怎样做吗?

根据 user3419297 的回答我制作了以下代码:

~F9::                                   ; run when F9 is pressed, ~ makes any other feature still trigger
    if GetKeyState("ScrollLock", "T")   ; only run if ScrollLock is active, easy way to quickly suspend the feature
        && WinActive("ahk_class  CabinetWClass") ; only run when WinExplorer is active window
    {   
        clipboard := ""                ; empty clipboard
        Send, ^c                       ; copy the selected file
        ClipWait, 1                    ; wait for the clipboard to contain data
        if (!ErrorLevel)               ; If NOT ErrorLevel clipwait found data on the clipboard
        clipboard := clipboard         ; convert to text (= copy the path)
    }
return

答案1

尝试这个:

#If WinActive("ahk_class  CabinetWClass") && WinExist("ahk_class Notepad2U")

; select a file in explorer and press F1 to copy the path and paste it in Notepad2.

F1::
ClipSaved := ClipboardAll      ; Save the entire clipboard to the variable ClipSaved
clipboard := ""                ; empty clipboard
Send, ^c                       ; copy the selected file
ClipWait, 1                    ; wait for the clipboard to contain data
if (!ErrorLevel)               ; If NOT ErrorLevel clipwait found data on the clipboard
clipboard := clipboard         ; convert to text (= copy the path)
Sleep, 300 
 ; MsgBox, %clipboard%         ; display the path
WinActivate, ahk_class Notepad2U
WinWaitActive, ahk_class Notepad2U
Send, ^v                       ; paste the path
clipboard := ClipSaved         ; restore original clipboard
return

#If

相关内容