CreateShortcut()

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

CreateShortcut()

Message par Marc56 »

Hello,

La bibliothèque FileSystem contient un tas de commandes utiles à la programmation système.
Je pense qu'il serait intéressant d'ajouter une commande officielle de création de raccourci (si c'est faisable)
CreateShortcut() ?

Même si cette commande ne créé pas tous les champs possibles des fichiers .lnk, les champs Cible: et Démarrer dans: sont les plus utiles. C'est ce que font les outils d'automation. Certains ajoutent une variable système correspondant à "Desktop", "HomeDir" (~) ou "Start Menu"

Raison: Il existe de nombreux codes sur le forum, mais plus ou moins compatibles d'une version à l'autre de PB et rarement compatibles entre versions Windows, Linux, Mac

:wink:
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: CreateShortcut()

Message par JohnJohnsonSHERMAN »

:idea: Je plussoie, trés bonne idée je trouve... PureBasic est un langage évolutif qui intégre sans cesse de nouvelles fonctions et de nouvelles capacités, c'est une de ses forces je trouve... pas besoin de se taper 36000 lib différentes, parfois pas compatibles ou plus a jour, comme c'est le cas en C :roll: Donc oui, trés bonne idée d'amélioration. J'avais aussi pensé à une fonction de recherche genre SearchFile() qui rechercherait un fichier dans un repertoire et ses sous-répertoires (bien que ce soit faisable avec des fonctions existantes, je me rapelle que j'avais galéré au début a faire ce genre de trucs).
[HS]Etant friand de logiciels de son, ce serait bien d'avoir enfin le support mp3 sur la librairie Sound 8) Et aussi une fonction pour gérer la transparence des fenetres en natif (ca ferait plus propre qu'avec l'api)... [/HS_OFF]
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: CreateShortcut()

Message par poshu »

JohnJohnsonSHERMAN a écrit ::idea: Je plussoie, trés bonne idée je trouve... PureBasic est un langage évolutif qui intégre sans cesse de nouvelles fonctions et de nouvelles capacités, c'est une de ses forces je trouve... pas besoin de se taper 36000 lib différentes, parfois pas compatibles ou plus a jour, comme c'est le cas en C :roll: Donc oui, trés bonne idée d'amélioration. J'avais aussi pensé à une fonction de recherche genre SearchFile() qui rechercherait un fichier dans un repertoire et ses sous-répertoires (bien que ce soit faisable avec des fonctions existantes, je me rapelle que j'avais galéré au début a faire ce genre de trucs).
[HS]Etant friand de logiciels de son, ce serait bien d'avoir enfin le support mp3 sur la librairie Sound 8) Et aussi une fonction pour gérer la transparence des fenetres en natif (ca ferait plus propre qu'avec l'api)... [/HS_OFF]
Recherche récursive dans un dossier :

Code : Tout sélectionner

Procedure.s SearchFileRecursive(Directory.s,FileToSearch.s)
	Protected directoryID,result.s
	directoryID = ExamineDirectory(#PB_Any,directory,"*.*")
	While NextDirectoryEntry(directoryID)
		If DirectoryEntryType(directoryID) = #PB_DirectoryEntry_File 
			If FileToSearch = DirectoryEntryName(directoryID)
				result = Directory + FileToSearch
				Break
			EndIf
		Else
			If DirectoryEntryName(directoryID) <> "." And DirectoryEntryName(directoryID) <> ".."
				result = SearchFileRecursive(directory+DirectoryEntryName(directoryID)+"/",FileToSearch)
				If result
					Break
				EndIf
			EndIf
		EndIf
	Wend
	FinishDirectory(directoryID)
	ProcedureReturn result
EndProcedure

Debug SearchFileRecursive(#PB_Compiler_Home+"Examples\","Back_3.bmp")
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: CreateShortcut()

Message par poshu »

Marc56 a écrit :Hello,

La bibliothèque FileSystem contient un tas de commandes utiles à la programmation système.
Je pense qu'il serait intéressant d'ajouter une commande officielle de création de raccourci (si c'est faisable)
CreateShortcut() ?

Même si cette commande ne créé pas tous les champs possibles des fichiers .lnk, les champs Cible: et Démarrer dans: sont les plus utiles. C'est ce que font les outils d'automation. Certains ajoutent une variable système correspondant à "Desktop", "HomeDir" (~) ou "Start Menu"

Raison: Il existe de nombreux codes sur le forum, mais plus ou moins compatibles d'une version à l'autre de PB et rarement compatibles entre versions Windows, Linux, Mac

:wink:
créer des raccourcis sous windows uniquement (j'ai ni mon mac ni mon nux sous la main pour le faire sous les autres OS) :

Code : Tout sélectionner

Procedure CreateShortcut(Path.s, LINK.s, Argument.s, DESCRIPTION.s, WorkingDirectory.s, ShowCommand.l, IconFile.s, IconIndexInFile.l)
	
	CoInitialize_(0)
	If CoCreateInstance_(?CLSID_ShellLink,0,1,?IID_IShellLink,@psl.IShellLinkW) =  0
		
		Set_ShellLink_preferences:
		
		psl\SetPath(Path)
		psl\SetArguments(Argument)
		psl\SetWorkingDirectory(WorkingDirectory)
		psl\SetDescription(DESCRIPTION)
		psl\SetShowCmd(ShowCommand)
		psl\SetHotkey(HotKey)
		psl\SetIconLocation(IconFile, IconIndexInFile)
		
		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
		
		
		IID_IShellLink: ; {000214F9-0000-0000-C000-000000000046}
		Data.l $000214F9
		Data.w $0000, $0000
		Data.b $C0, $00, $00, $00, $00, $00, $00, $46
		
	EndDataSection   
	
EndProcedure

CreateShortcut("C:\Windows\System32\Notepad.exe","C:\Users\Poshu\Desktop\Super Notepad.lnk","","NotePAD is a lightweight editor","",#SW_SHOWMAXIMIZED,"%SystemRoot%\system32\SHELL32.dll",12)
Attention aux droits d'écriture, certains dossiers spéciaux demandent des droits spéciaux.
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: CreateShortcut()

Message par Ar-S »

Merci Poshu. Testé sous W10x64 ça marche nikel.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: CreateShortcut()

Message par JohnJohnsonSHERMAN »

Oh mon dieu, cette jungle d'API... Mes yeux ont mal :mrgreen: :mrgreen: (cerveau débranché pour sureté)
D'ou l'intérêt d'une fonction native à PB... :lol:

En tout cas c'est trés intéressant, merci poshu:)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre