Verknüpfung auf Desktop und im Startmenü erstellen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Verknüpfung auf Desktop und im Startmenü erstellen?

Beitrag 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 :wink:) ist das Erstellen der beiden Links inklusive Icon (sollte automatisch das Programmicon sein).

Hoffe es kann jemand helfen, da Suche + CodeArchiv leider erfolglos.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Vielen Dank !

Ich denke, damit komme ich weiter. Insbesondere TS-ShutDown Source... :D
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Da passiert ja genau das was du willst :D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten