在AutoIt中获取所选Windows资源管理器文件的路径

时间:2013-10-02 22:46:24

标签: windows-7-x64 autoit

只要我通过命令行使用它,我的AutoIt脚本就可以工作。我可以使用$CmdLine[1]并传递路径作为参数。现在我尝试将脚本转换为新方法以避免命令行参数。

您打开资源管理器窗口并选择一个文件,例如C:\test.txt。之后,使用 CTRL + WIN + C 触发AutoIt功能。该脚本应查看在活动的资源管理器窗口中选择的文件,并检索路径C:\test.txt并将其分配给$file变量。

这是我的工作进展中,我被困住了。
第5行$CmdLine[1]需要更改为我不知道的秘密函数。

;Assign key combination "CTRL-WIN-C" to function "copyUNC"
HotKeySet("^#c", "CopyUNC") 

;function to copy UNC path of selected Windows Explorer file/folder to clipboard
func CopyUNC()
    $file = FileGetLongName($CmdLine[1])   ;THIS LINE NEEDS TO BE CHANGED
    $drive = StringLeft($file, 2)
    $UNCdrive = DriveMapGet($drive)
    If $UNCdrive = "" Then  
        $UNCfile = $file    
    else 
        $UNCfile = $UNCdrive & StringTrimLeft($file, 2)
    endif   
    ClipPut($UNCfile)
endfunc

;necessary loop so AutoIt script stays active and in Tray
While 1
    Sleep(100)
WEnd

问:如何从Windows资源管理器中将所选文件/文件夹的路径导入AutoIt v3.3.8.1

注意#1:我不想使用注册表和右键单击技巧来传递参数
注意#2:如果选择了多个文件,则只传递第一个文件。不要过度复杂化

1 个答案:

答案 0 :(得分:1)

CMDLINE [1]与你想要的东西无关。

如果要在Windows资源管理器中手动选择文件后通过热键激活脚本,则需要检查资源管理器窗口本身。

以下是在资源管理器中检索所选项目的功能

Func GetExplorerSelection()
Local $saveClip = ""
Local $filesFolders = ""
Local $handle = _WinAPI_GetForegroundWindow()
Local $className = _WinAPI_GetClassName($handle)
If $className = "ExploreWClass" Or $className = "CabinetWClass" Then
$saveClip = ClipGet()
Send("^c")
Sleep(50) ; give clipboard time to react
$filesFolders = ClipGet()
ClipPut($saveClip)
; test if $filesFolders contains @LF and split if so etc..
; code to call StringSplit() etc..
EndIf
EndFunc