Page 1 sur 1

CreateShortcut()

Publié : lun. 08/août/2016 15:46
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:

Re: CreateShortcut()

Publié : lun. 08/août/2016 15:56
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]

Re: CreateShortcut()

Publié : mer. 07/déc./2016 8:45
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")

Re: CreateShortcut()

Publié : mer. 07/déc./2016 8:53
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.

Re: CreateShortcut()

Publié : mer. 07/déc./2016 12:22
par Ar-S
Merci Poshu. Testé sous W10x64 ça marche nikel.

Re: CreateShortcut()

Publié : mer. 07/déc./2016 19:15
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:)