Verknüpfungen [Gelöst]
- Tsuki-Namida
 - Beiträge: 633
 - Registriert: 17.11.2005 13:27
 - Kontaktdaten:
 
Verknüpfungen [Gelöst]
Hallo,
ich möchte verknüpfungen mit einer PB Anwendung erstellen...
ich habe natürlich die SuFu verwendet und bin auf ein thema gestosen wo dieser procedure verwendet wurde
http://www.purearea.net/pb/CodeArchiv/W ... ellLink.pb
wenn ich damit nun eine Verknüpfung erstelle funktioniert sie ja super aber das Programm was ich da verknüpfe arbeitet in verzeichnis der Verknüpfung nicht im verzeichnis der anwendung, zudem ist das icon auch nicht da egal welche icon nummer ich angebe
wenn ich die eigenschaft der verknüpfung aufrufe dan erhalt ich die fehlermeldung das, dass angegebene arbeitsverzeichnis nicht stimmt obwohl dies stimt....
			
			
													ich möchte verknüpfungen mit einer PB Anwendung erstellen...
ich habe natürlich die SuFu verwendet und bin auf ein thema gestosen wo dieser procedure verwendet wurde
http://www.purearea.net/pb/CodeArchiv/W ... ellLink.pb
wenn ich damit nun eine Verknüpfung erstelle funktioniert sie ja super aber das Programm was ich da verknüpfe arbeitet in verzeichnis der Verknüpfung nicht im verzeichnis der anwendung, zudem ist das icon auch nicht da egal welche icon nummer ich angebe
wenn ich die eigenschaft der verknüpfung aufrufe dan erhalt ich die fehlermeldung das, dass angegebene arbeitsverzeichnis nicht stimmt obwohl dies stimt....
					Zuletzt geändert von Tsuki-Namida am 03.05.2009 17:47, insgesamt 1-mal geändert.
									
			
									
- 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
 
Hier mal eine überarbeitete und unicodetaugliche version:
Die ersten zwei Parameter sind Pflicht, der rest stimmt automatisch, in 
den meisten Fällen.
			
			
									
									Code: Alles auswählen
Procedure CreateShortcut(Path.s, Link.s, WorkingDir.s = "", Argument.s = "", ShowCommand.l = #SW_SHOWNORMAL, Description.s = "", HotKey.l = #Null, IconFile.s = "|", IconIndex.l = 0)
  Protected psl.IShellLinkW, ppf.IPersistFile, mem.s, hres.l, Result.l
  If IconFile = "|" : IconFile = Path : EndIf
  If Not WorkingDir : WorkingDir = GetPathPart(Path) : EndIf
  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @psl.IShellLinkW) =  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)
      PokeS(@mem, LINK, -1, #PB_Unicode)
      hres = ppf\Save(@mem, #True)
      result = 1
      ppf\Release()
    EndIf
    psl\Release()
  EndIf
  CoUninitialize_()
  ProcedureReturn result
  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_IPersistFile:
    ; 0000010b-0000-0000-C000-000000000046
    Data.l $0000010B
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    CompilerIf #PB_Compiler_Unicode = 0
    IID_IShellLink:
    ; DEFINE_SHLGUID(IID_IShellLinkA,         0x000214EEL, 0, 0);
    ; C000-000000000046
    Data.l $000214EE
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    CompilerElse
    IID_IShellLink: ; {000214F9-0000-0000-C000-000000000046}
    Data.l $000214F9
    Data.w $0000, $0000
    Data.b $C0, $00, $00, $00, $00, $00, $00, $46
    CompilerEndIf
  EndDataSection
EndProcedure
den meisten Fällen.
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.

						Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Tsuki-Namida
 - Beiträge: 633
 - Registriert: 17.11.2005 13:27
 - Kontaktdaten:
 
Re: Verknüpfungen [Gelöst]
hi, brauche genau diesen codeschnipsel, leider funktioniert er bei mir nicht mehr.
SetPath wirft einen fehler ("benötigt string"), obwohl ja ein string definiert ist. ersetzten von .s zu $ bringt keine besserung. bitte um hilfe!
			
			
									
									SetPath wirft einen fehler ("benötigt string"), obwohl ja ein string definiert ist. ersetzten von .s zu $ bringt keine besserung. bitte um hilfe!
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
						PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
- 
				DarkDragon
 - Beiträge: 6291
 - Registriert: 29.08.2004 08:37
 - Computerausstattung: Hoffentlich bald keine mehr
 - Kontaktdaten:
 
Re: Verknüpfungen [Gelöst]
Ich habs dir mal überarbeitet:broozar hat geschrieben:hi, brauche genau diesen codeschnipsel, leider funktioniert er bei mir nicht mehr.
SetPath wirft einen fehler ("benötigt string"), obwohl ja ein string definiert ist. ersetzten von .s zu $ bringt keine besserung. bitte um hilfe!
Code: Alles auswählen
Procedure CreateShortcut(Path.s, Link.s, WorkingDir.s = "", Argument.s = "", ShowCommand.l = #SW_SHOWNORMAL, Description.s = "", HotKey.l = #Null, IconFile.s = "|", IconIndex.l = 0)
  Protected psl.IShellLinkW, ppf.IPersistFile, Result.i
  If IconFile = "|" : IconFile = Path : EndIf
  If Not WorkingDir : WorkingDir = GetPathPart(Path) : EndIf
  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @psl.IShellLinkW) =  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
      If ppf\Save(Link, #True) = #S_OK
        Result = 1
      EndIf
      ppf\Release()
    EndIf
    psl\Release()
  EndIf
  CoUninitialize_()
  
  ProcedureReturn result
  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_IPersistFile:
    ; 0000010b-0000-0000-C000-000000000046
    Data.l $0000010B
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    CompilerIf #PB_Compiler_Unicode = 0
    IID_IShellLink:
    ; DEFINE_SHLGUID(IID_IShellLinkA,         0x000214EEL, 0, 0);
    ; C000-000000000046
    Data.l $000214EE
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    CompilerElse
    IID_IShellLink: ; {000214F9-0000-0000-C000-000000000046}
    Data.l $000214F9
    Data.w $0000, $0000
    Data.b $C0, $00, $00, $00, $00, $00, $00, $46
    
    CompilerEndIf
  EndDataSection
EndProcedureAngenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
						Re: Verknüpfungen [Gelöst]
vielen dank, läuft aber noch nicht.
SetDescription verlangt wohl eine number statt einem string und und nach auskommentieren dieser zeile gibt save einen ähnlichen fehler aus.
ich würd den code auch gern verstehen, habe aber keine ahnung, was psl und ppf sind...
			
			
									
									SetDescription verlangt wohl eine number statt einem string und und nach auskommentieren dieser zeile gibt save einen ähnlichen fehler aus.
ich würd den code auch gern verstehen, habe aber keine ahnung, was psl und ppf sind...
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
						PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
- 
				DarkDragon
 - Beiträge: 6291
 - Registriert: 29.08.2004 08:37
 - Computerausstattung: Hoffentlich bald keine mehr
 - Kontaktdaten:
 
Re: Verknüpfungen [Gelöst]
Hast du PB 4.50 Beta 1 oder Beta 2? Ich hab Beta 2 und bei mir läufts. psl und ppf sind Objekte, die die Interfaces IShellLinkW und IPersistFile implementieren.broozar hat geschrieben:vielen dank, läuft aber noch nicht.
SetDescription verlangt wohl eine number statt einem string und und nach auskommentieren dieser zeile gibt save einen ähnlichen fehler aus.
ich würd den code auch gern verstehen, habe aber keine ahnung, was psl und ppf sind...
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
						Re: Verknüpfungen [Gelöst]
nein, die stable 4.41, diesmal auf meinem win7-starter netbook, also nicht win2k wie in meiner sig angegeben.
			
			
									
									iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
						PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
- 
				DarkDragon
 - Beiträge: 6291
 - Registriert: 29.08.2004 08:37
 - Computerausstattung: Hoffentlich bald keine mehr
 - Kontaktdaten:
 
Re: Verknüpfungen [Gelöst]
Probiers mit der Beta, damit gehts. Ansonsten nimm den Originalquelltext und lösche bei allen Befehlen bei denen der Fehler auftritt einfach das @ bzw füge eins hinzu.
			
			
									
									Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
						- 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
 
Re: Verknüpfungen [Gelöst]
Try & Error ist aber eigentlich nicht notwendig. Die Ide hat einen Struktur-Viewer,
überall wo dort p-unicode steht kommt der String hin, ansonsten der Pointer!
Gruß
Thomas
So ist es in PB 4.50 definiert:
PS: Wäre nett, wenn der Thread-Ersteller das Poster in seiner Signature entfernt oder verkleinert.
Auch das ändern des Usernamens ändert nichts daran, das so grosse Bilder störend wirken.
			
			
									
									überall wo dort p-unicode steht kommt der String hin, ansonsten der Pointer!
Gruß
Thomas
So ist es in PB 4.50 definiert:
Code: Alles auswählen
Interface IShellLinkW
  QueryInterface(a, b)
  AddRef()
  Release()
  GetPath(a.i, b, c, d)
  GetIDList(a)
  SetIDList(a)
  GetDescription(a.i, b)
  SetDescription(a.p-unicode)
  GetWorkingDirectory(a.i, b)
  SetWorkingDirectory(a.p-unicode)
  GetArguments(a.i, b)
  SetArguments(a.p-unicode)
  GetHotkey(a)
  SetHotkey(a)
  GetShowCmd(a)
  SetShowCmd(a)
  GetIconLocation(a.i, b, c)
  SetIconLocation(a.p-unicode, b)
  SetRelativePath(a.p-unicode, b)
  Resolve(a, b)
  SetPath(a.p-unicode)
EndInterfaceAuch das ändern des Usernamens ändert nichts daran, das so grosse Bilder störend wirken.
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.

						Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
