0

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

您打开一个资源管理器窗口并选择一个文件,例如C:\test.txt. 之后,您使用CTRL++触发WINAutoItC功能。该脚本应该查看在活动资源管理器窗口中选择了哪个文件,并检索路径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:如果选择了多个文件,只需传递第一个文件。不要把事情复杂化

4

2 回答 2

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
于 2013-10-06T19:46:34.833 回答
0

也许这个

HotKeySet('{F8}','ccc')
Func ccc()
$ObjWindows = ObjCreate("Shell.Application").Windows()
For $i = 0 To $ObjWindows.Count -1
        Local $w = $ObjWindows.Item($i)
        Local $aSeLected = $w.Document.SelectedItems()
        For $b = 0 To $aSeLected.Count -1
                $x = $aSeLected.Item($b)
                MsgBox(0,'',$x.Path&'_______'&$x.Name)
        Next
Next
EndFunc
While 1
        Sleep(100)
WEnd
于 2022-01-06T08:05:25.670 回答