Я ищу способ сделать это.

Используя панель буфера обмена 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 Explorer больше не будет копировать файл.

Есть идеи как это сделать?

На основании ответа пользователя 3419297 я сделал этот код:

~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 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .