ich habe folgende Procedure zur Ermittlung des Zielpfades einer Verknüpfung:
Code: Alles auswählen
Procedure.s GetShellLinkTargetPath(ShellLinkFilePath.s)
Protected RetVal.s = Space(#MAX_PATH + 1)
Protected ShellLink.IShellLinkA, LinkFile.IPersistFile
CoInitialize_(0)
If CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @ShellLink) = #S_OK
If ShellLink\QueryInterface(?IID_IPersistFile, @LinkFile) = #S_OK
If LinkFile\Load(ShellLinkFilePath, 0) = #S_OK
If ShellLink\Resolve(0, 1) = #S_OK
ShellLink\GetPath(RetVal, #MAX_PATH, 0, 0)
EndIf
EndIf
EndIf
LinkFile\Release()
EndIf
ShellLink\Release()
CoUninitialize_()
ProcedureReturn RetVal
DataSection
CLSID_ShellLink:
; 00021401-0000-0000-C000-000000000046
Data.l $00021401
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
IID_IShellLink:
; 000214EE-0000-0000-C000-000000000046
Data.l $000214EE
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
IID_IPersistFile:
; 0000010b-0000-0000-C000-000000000046
Data.l $0000010b
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
EndDataSection
EndProcedure
Beispiel:
Code: Alles auswählen
Debug GetShellLinkTargetPath("C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Paint.Net.lnk")
; Sollte "C:\Program Files\Paint.NET\PaintDotNet.exe" liefern,
; liefert jedoch "C:\Program Files (x86)\Paint.NET\PaintDotNet.exe"
Mfg Sicro