2013-10-02 59 views
1

只要我通过命令行使用它,我的AutoIt脚本就可以工作。在那里,我可以使用$CmdLine[1]并传递一个路径作为参数。现在我尝试将脚本转换为避免命令行参数的新方法。在AutoIt中获取所选Windows资源管理器文件的路径

您打开浏览器窗口并选择一个文件,例如C:\test.txt。之后,您触发AutoIt功能CTRL + WIN + C。该脚本应查看在活动的资源管理器窗口中选择哪个文件,并检索路径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:如果选择多个文件只是传递的第一个文件。不要过分复杂的东西

+0

检索选中的项目作为替代的功能,你可以让你的程序从“发送到”上下文菜单调用。所以你要点击文件,选择发送到,然后是你的应用程序。该文件将作为cmdline传递给您的应用程序[1] – Colyn1337

+0

http://www.autoitscript.com/forum/topic/89833-windows-explorer-current-folder/ – crazypotato

回答

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 
相关问题