Hi,
wie ich feststellen musste, kommen nicht alle Programme mit Netzlaufwerksverknüpfungen auf lokale Ordner klar.
Ich habe z.B. gemappt: C:\Users\BugFix\Documents\_F auf Laufwerk F:
Ich habe mir nun eine Funktion erstellt, die den korrekten Pfad zurück gibt.
Habe leider keine echten Netzlaufwerke zum Testen, was dabei raus kommt. Wenn ihr bitte mal probieren könnt.
EDIT: Die Funktion ist jetzt so geändert, dass (hoffentlich) alle Mappings aufgelöst werden können.
AutoIt
#include <WinAPIFiles.au3>
; #FUNCTION# =======================================================================================
; Name ..........: _PathGetUnmapped
; Description ...: Resolving network links in paths to absolute paths
; Syntax ........: _PathGetUnmapped($_sPath)
; Parameters ....: $_sPath - The path to be checked.
; Return values .: The resolved path or the original path.
; Author ........: BugFix
; Remarks .......: Requires <WinAPIFiles.au3>
; ==================================================================================================
Func _PathGetUnmapped($_sPath)
If StringLeft($_sPath, 2) = '\\' Then Return $_sPath ; qualified network path
Local $aPath = StringRegExp($_sPath, '([A-Za-z]:)(.+)', 1)
Local $vReturn = _WinAPI_QueryDosDevice($aPath[0])
If StringRegExp($vReturn, '^\\Device\\LanmanRedirector') Then
If StringInStr($vReturn, 'localhost') Then
$vReturn = StringReplace(StringRegExpReplace($vReturn, '\\Device\\LanmanRedirector\\[^\\]+\\localhost\\', ''), '$', ':')
Else
$vReturn = '\' & StringRegExp($vReturn, '(\\Device\\LanmanRedirector\\;[^\\]+)(.+)', 1)[1]
EndIf
Return $vReturn & (UBound($aPath) = 2 ? $aPath[1] : '')
Else
$vReturn = StringRegExp($vReturn, '(\\Device\\[^\\]+\\;[^\\]+)(\\.+)', 1)
EndIf
If IsArray($vReturn) Then
Return '\' & $vReturn[1] & (UBound($aPath) = 2 ? $aPath[1] : '')
Else
Return $_sPath
EndIf
EndFunc
Alles anzeigen