0

私の AutoIt スクリプトは、コマンド ライン経由で使用している限り機能しました。$CmdLine[1]そこで、パスを引数として使用して渡すことができました。ここで、スクリプトを新しいメソッドに変換して、コマンド ライン引数を回避しようとしています。

Explorer ウィンドウを開き、ファイルを選択します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

Q: 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 に答える