其中可能有两个问题需要解决:
1,如何取得选择多个文件的文件名
2,如何在右键菜单中仅调用一次(不然会同时响应N个相同的获取上面文件名的命令;莫非需做个dll调用?)
问题1解决方法:可以通过将当前路径所有文件和文件夹读入数组,再获取已经选择的文件名对比;但是桌面的文件路径如何获取?这个需要另外判断了。
问题2暂时解决方法:检测是否相同进程,是则杀死进程,但是缺点就是多选文件获取路径时候鼠标状态会依然反映为忙碌,并且任务栏弹出和选取文件数相同的图标,尚需完美解决。
#include <File.au3>
#include <Array.au3>
;#NoTrayIcon
$process = processlist(@ScriptName)
for $i = 1 to $process[0][0]
if $process[$i][1] <> @AutoItPID then
processclose($process[$i][1])
endif
next
$AllSelectedName = ''
$Selecte = StringSplit(ControlListView(WinGetTitle("[active]"), "", "SysListView321", "GetSelected", 1), "|")
$Filenames = _FileListToArray(WinGetTitle("[active]"), '*', 0)
For $i = 1 To $Selecte[0]
$SelectedName = ControlListView(WinGetTitle("[active]"), "", "SysListView321", "GetText", $Selecte[$i])
If $Filenames <> 0 Then
For $n = 1 To $Filenames[0]
$path = StringReplace(WinGetTitle("[active]")& $Filenames[$n],'\\','\')
If $Filenames[$n] = $SelectedName Or StringRegExpReplace($Filenames[$n], '(\..+)', '') = $SelectedName And DirGetSize($path ) = -1 Then
$AllSelectedName &= '文件:' & $path & @CRLF
ElseIf $Filenames[$n] = $SelectedName Or StringRegExpReplace($Filenames[$n], '(\..+)', '') = $SelectedName And DirGetSize($path ) <> -1 Then
$AllSelectedName &= '文件夹:' & $path & @CRLF
EndIf
Next
EndIf
Next
ClipPut(StringRegExpReplace($AllSelectedName, '文件夹:|文件:', ''))
;TrayTip("路径已复制到剪切板 By lynfr8", $AllSelectedName, 5)
ToolTip($AllSelectedName, 0, 0, "路径已复制到剪切板 By lynfr8")
Sleep(1000)
上面代码编译为exe后放在c盘根目录,并将附件注册表导入。
|