AutoHotKey: copie o arquivo do Windows Explorer, cole o caminho para o Notepad2

0

Estou procurando uma maneira de fazer isso.

Usando a barra de prancheta do ArsClip, vejo que quando seleciono um arquivo no Windows Explorer e o copio, seu caminho completo é armazenado na área de transferência.

Se eu continuar selecionando o Windows Explorer e colando, esse arquivo é copiado para o foler atual, ok.

Se eu vou para o Notepad2 (ou qualquer editor de texto) e cole, o comportamento usual é nada acontecer. Eu gostaria que o caminho do arquivo fosse colado como texto.

Estou tentando implementar esse recurso usando o AutoHotKey. Eu precisaria:

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.

Eu não me importo de perder a referência do arquivo. Isso significa que não me importo se, depois de executar essa rotina, o Windows Explorer não copie mais o arquivo.

Alguma ideia de como fazer isso?

Com base na resposta do user3419297 eu fiz este código:

~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
fonte
2
Oi, infelizmente não somos um serviço de escrita de scripts. O que você conseguiu / tentou até agora, e onde exatamente você está ficando preso implementando seu script AHK?
Ƭᴇcʜιᴇ007
Se você copiar um arquivo no Explorer, as opções de colagem via mouse (clique com o botão direito) e teclado (menu e / ou ctrl + v) não estão disponíveis no Notepad2 - até onde eu sei - que eu acho que faz item 2 um ponto discutível. Eu uso uma tecla de atalho diferente para executar o código shell que pega o caminho completo e / ou nome do arquivo que o último arquivo foi selecionado no Explorer ... não exatamente o que você faz referência, mas não depende de interceptar colar ou mexer com a área de transferência. .. se você clicou em um arquivo e copiou sem clicar em outro arquivo, então você pode usar as janelas Shell.Application e colar o caminho
JJohnston2
@ Techie Eu não pretendo pedir um serviço de escrita de scripts, se eu quisesse para isso eu contrataria um desenvolvedor para fazer isso. O que quero dizer com essa pergunta é perguntar a alguém que já conhece alguma dessas etapas, apontar a direção, para que eu possa fazer isso. Obrigado
Hikari
@JJohn Eu também faço isso, eu tenho o Moo RightClick, ele limpa o menu de contexto e adiciona recursos extras como copiar para nomes, caminhos, etc. de arquivos da área de transferência. Mas eu quero ir além disso, em vez de 2 ou 3 cliques no mouse , Quero apenas copiar o arquivo e ter seu caminho diretamente disponível na área de transferência.
Hikari

Respostas:

1

Tente isto:

#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
fonte
Legal! tnx muito! Como não funciona bem com o Ctrl + C, tive a ideia de fazer uma vesion mais simples, vou postar em questão.
Hikari