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
-
- 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
EndProcedure
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]
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
-
- 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
-
- 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)
EndInterface
Auch 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.
