Seite 1 von 1
Verknüpfung auf Desktop und im Startmenü erstellen?
Verfasst: 15.01.2005 19:40
von Andre
Hat jemand zufällig zwei fertige Prozeduren, mit denen man für sein eigenes laufendes Programm jeweils eine Verknüpfung auf dem Desktop sowie einen Eintrag im Startmenü erstellen kann ?
Der Pfad des Executables ist während der Laufzeit ja einfach zu ermitteln, mir unklar (da wohl WinAPI notwendig

) ist das Erstellen der beiden Links inklusive Icon (sollte automatisch das Programmicon sein).
Hoffe es kann jemand helfen, da Suche + CodeArchiv leider erfolglos.
Verfasst: 15.01.2005 19:45
von Zaphod
ich glube da gab es etwas in der setup userlib auf purearea:
http://www.purearea.net/pb/download/use ... lib392.zip
EDIT:
shortcuts im startmenü sind das selbe wie shortcuts auf dem desktop, nur an anderer stelle.
Verfasst: 15.01.2005 20:02
von ts-soft
Hallo Andre, habe dir mal alle notwendigen Prozeduren zusammengesucht. Die zum link erstellen ist wohl von Danilo und der rest aus dem CodeArchiv. Habe ich für meine Zwecke ein bißchen geändert. Hoffe Du kommst damit klar.
Code: Alles auswählen
Structure EMID
cb.b
abID.b[1]
EndStructure
Structure ITEMIDLIST
mkid.EMID
EndStructure
Procedure CreateShortcut(Path.s, Link.s, WorkingDir.s, Argument.s, ShowCommand.l, Description.s, HotKey.l, IconFile.s, IconIndex.l)
CoInitialize_(0)
If CoCreateInstance_(?CLSID_ShellLink,0,1,?IID_IShellLink,@psl.IShellLinkA) = 0
Set_ShellLink_preferences:
psl\SetPath(@Path)
psl\SetArguments(@Argument)
psl\SetWorkingDirectory(@WorkingDir)
psl\SetDescription(@Description)
psl\SetShowCmd(ShowCommand)
psl\SetHotkey(HotKey)
psl\SetIconLocation(@IconFile, IconIndex)
ShellLink_SAVE:
If psl\QueryInterface(?IID_IPersistFile,@ppf.IPersistFile) = 0
mem.s = Space(1000)
MultiByteToWideChar_(#CP_ACP, 0, Link, -1, mem, 1000)
hres = ppf\Save(@mem,#True)
Result = 1
ppf\Release()
EndIf
psl\Release()
EndIf
CoUninitialize_()
ProcedureReturn Result
DataSection
CLSID_ShellLink:
Data.l $00021401
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
IID_IShellLink:
Data.l $000214EE
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
IID_IPersistFile:
Data.l $0000010B
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
EndDataSection
EndProcedure
Procedure.s GetAppName()
AppName.s = Space(#MAX_PATH)
GetModuleFileName_(GetModuleHandle_(0), @AppName, #MAX_PATH)
ProcedureReturn AppName
EndProcedure
Procedure.s GetSpecialeFolder(folder.l)
*itemid.ITEMIDLIST = #Null
If SHGetSpecialFolderLocation_ (0, folder, @*itemid) = #NOERROR
location.s = Space (#MAX_PATH)
If SHGetPathFromIDList_ (*itemid, @location)
If Right(location, 1) <> "\" : location + "\" : EndIf
ProcedureReturn location
EndIf
EndIf
EndProcedure
#CSIDL_DESKTOP = 0
#CSIDL_PROGRAMS = 2
Debug GetSpecialeFolder(#CSIDL_DESKTOP)
Debug GetSpecialeFolder(#CSIDL_PROGRAMS)
Debug GetAppName()
Gruß
thomas
Verfasst: 15.01.2005 20:12
von ts-soft
Nachtrag:
Im Code von meinem TS-Shutdown haste Beispiele, dort werden während des Betriebes Desktop, Quicklaunch und Autostart einträge gesetzt und gelöscht. Natürlich micht iCONS
Verfasst: 15.01.2005 20:32
von Andre
Vielen Dank !
Ich denke, damit komme ich weiter. Insbesondere TS-ShutDown Source...

Verfasst: 15.01.2005 20:37
von ts-soft
Da passiert ja genau das was du willst

Verfasst: 03.07.2007 21:24
von marco2007
Ich habe folgenden Befehl von Droopy (der ja auch von Danilo ist - also gehe davon aus, das es das selbe ist) verwendet:
Code: Alles auswählen
CreateShortcut("C:\Windows\System32\Notepad.exe","C:\Super Notepad.lnk","","NotePAD is a lightweight editor","",#SW_SHOWMAXIMIZED,"%SystemRoot%\system32\SHELL32.dll",12)
Funkt bestens, jedoch wenn ich anstatt
"%SystemRoot%\system32\SHELL32.dll" ein Icon-File nehme z.B.
"Calc.ico" funkt der Code nicht! Ich verstehe auch leider nicht, was der letzte Parameter bewirken soll, da ich ja nicht weiß, warum ich eine *.dll für
Iconfile.s nehmen muss.
Danke
Marco
Verfasst: 03.07.2007 21:33
von ts-soft
@marco2006
Nimm doch diese Version:
http://www.purebasic.fr/german/viewtopi ... 3825#93825
Ist dasselbe, aber die Reihenfolge der Parameter wurde so geändert, das
möglichste viele Optional sind. Dort sind Iconfile und Iconindex getrennt.