AutoHotKey: скопировать файл из Windows Explorer, вставить путь в Notepad2

0

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

Используя панель буфера обмена 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
Hikari
источник
2
Привет, к сожалению, мы не сервис написания сценариев. Что вы получили / попробовали до сих пор, и где именно вы застряли при реализации своего скрипта AHK?
Ƭᴇcʜιᴇ007
Если вы копируете файл в Проводнике, параметры вставки с помощью мыши (щелчок правой кнопкой мыши) и клавиатуры (меню и / или Ctrl + V) даже не доступны в Notepad2 - насколько я могу судить - какой я думаю, что делает элемент 2 спорный вопрос. Я использую другую комбинацию клавиш для выполнения шелл-кода, который захватывает полный путь и / или имя файла любого файла, который был выбран последним в Explorer ... не совсем то, на что вы ссылаетесь, но не полагается на перехват вставки или работу с буфером обмена. .. если вы щелкнули файл и скопировали его, не щелкая другой файл, то вы можете использовать окна Shell.Application и вставить путь
JJohnston2
@Techie Я не хочу просить об услугах написания сценариев, если бы я имел в виду это, я бы нанял разработчика для этого. Что я имею в виду под этим вопросом, так это спросить кого-то, кто уже знает какие-либо из этих шагов, чтобы указать мне направление, чтобы я мог это сделать. Спасибо
Хикари
@JJohn Я тоже так делаю, у меня есть Moo RightClick, он очищает контекстное меню и добавляет аккуратные дополнительные функции, такие как копирование имен файлов, путей и т. Д., Но я хочу пойти дальше, вместо 2 или 3 щелчков мышью Я хочу просто скопировать файл и получить его путь прямо в буфер обмена.
Хикари

Ответы:

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
user3419297
источник
Здорово! TNX много! Так как это не работает с Ctrl + C, у меня была идея сделать более простую версию, я собираюсь опубликовать ее на вопрос.
Хикари