Wie erstelle ich eine Verknüpfung, z.B auf dem Desktop zu meinem Programm?
In XP habe ich das so gemacht
Code
Def MultiByteToWideChar(6) !"kernel32","MultiByteToWideChar"
Def CoInitialize(1) !"ole32","CoInitialize"
Def CoUnInitialize(0) !"ole32","CoUninitialize"
Def CoCreateInstance(5) !"ole32","CoCreateInstance"
'###############################################################################################################################################
'Eine Verknüpfung erzeugen
'Parameters: File$ = Ziel für die Exe-Datei
' Params$ = Zusätzliche Parameterübergabe für die Exe-Datei. Wenn nicht, dann leer lassen
' Path$ = Arbeitsverzeichnis der Exe-Datei
' Link$ = Zielverzeichnis und Name der Verknüpfung wo sie erstellt werden soll
'###############################################################################################################################################
Proc Verknuepfung
Parameters File$,Params$,Path$,Link$
'--------------------------------------------------------------
Proc CallMethod
Parameters IFace&,Method&
Declare VTable&
VTable& = long(IFace&,0)
Method& = long(VTable&,Method&*4)
Case %pcount = 2 : Return Call( Method&,IFace& )
Case %pcount = 3 : Return Call( Method&,IFace&,&(3) )
Case %pcount = 4 : Return Call( Method&,IFace&,&(3),$(4) )
EndProc
'--------------------------------------------------------------
Declare Link#,CLSID#,IShellLink&,IPersistFile&
Dim Link#,255
Dim CLSID#,48
Link$ = Link$+".Lnk"
CoInitialize(0)
Long CLSID#, 0=$21401' ClassID für IShellLink-Object
Long CLSID#, 4=0
Long CLSID#, 8=$C0
Long CLSID#,12=$46000000
Long CLSID#,16=$214EE' InterfaceID für IShellLink-Interface
Long CLSID#,20=0
Long CLSID#,24=$C0
Long CLSID#,28=$46000000
Long CLSID#,32=$10B' InterfaceID für IPersistFile-Interface
Long CLSID#,36=0
Long CLSID#,40=$C0
Long CLSID#,44=$46000000
CoCreateInstance(CLSID#,0,1,CLSID#+16,addr(IShellLink&))'Objekt erzeugen und Zugriff auf Interface
CallMethod IShellLink&,9,addr(Path$) 'IShellLink:SetWorkDir
CallMethod IShellLink&,11,addr(Params$) 'IShellLink:SetArguments
CallMethod IShellLink&,20,addr(File$) 'IShellLink:SetPath
CallMethod IShellLink&,0,CLSID#+32,addr(IPersistFile&) 'IShellLink:QueryInterface
MultiByteToWideChar(0,0,addr(Link$),-1,Link#,250) 'MakeWideChar
CallMethod IPersistFile&,6,Link#,1 'IPersistFile:Save
CallMethod IPersistFile&,2 'IPersistFile:Release
CallMethod IShellLink&,2 'IShellLink:Release
CoUnInitialize()
Dispose Link#
Dispose CLSID#
EndProc
Alles anzeigen
Funktioniert bei XP, nur bei Win7 nicht, denn da stürzt das Programm ab. Gibts denn nichts einfacheres ???