[RESOLU] Créer un raccourci sur le bureau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Créer un raccourci sur le bureau

Message par omega »

@Falsam
Je suis vraiment désolé mais ça ne marche pas à tous les coups. Pour Purebasic.exe, ton exemple tel qu'il est, ça marche, c'est peut être un cas particulier. Voici une partie de mon code où ça bloque:

Code : Tout sélectionner

      
Chemin$=GetCurrentDirectory()+"Data\"
Idclient=0
Dbs$ = Chemin$+"client.db"
If Not OpenDatabase(Idclient, Dbs$, "", "")
   MessageRequester("Info", "Ouverture " + Dbs$ + " impossible!")
   End
EndIf
Mon application s'appelle Pctrav.exe (qui contient ce code ci-dessus), elle se trouve dans ce chemin:
d:\Pctrav\Pctrav.exe, j'ai donc 2 fichiers dans ce même dossier: (pctrav.exe + un sous-dossier nommé Data qui contient mes bases de données)
Mon application fonctionne très bien (depuis longtemps d'ailleurs). Quand je lance mon application là où elle se trouve, ça marche bien. Si je créé un raccourci de mon application manuellement, et que je lance mon programme à partir de mon raccourci, ça marche bien comme prévu. Mais quand j'utilise ton code pour créer un raccourci, le raccourci est créé mais il ne fonctionne pas. Voici le message qui s'affiche:
Ouverture c:users\MonPc\Desktop\Data\Client.db impossible ! \
Qu'en pensez-vous?
Merci
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Créer un raccourci sur le bureau

Message par Marc56 »

omega a écrit :@Falsam
Je suis vraiment désolé mais ça ne marche pas à tous les coups. Pour Purebasic.exe, ton exemple tel qu'il est, ça marche, c'est peut être un cas particulier. Voici une partie de mon code où ça bloque:

Code : Tout sélectionner

      
Chemin$=GetCurrentDirectory()+"Data\"
Idclient=0
Dbs$ = Chemin$+"client.db"
If Not OpenDatabase(Idclient, Dbs$, "", "")
   MessageRequester("Info", "Ouverture " + Dbs$ + " impossible!")
   End
EndIf
Mon application s'appelle Pctrav.exe (qui contient ce code ci-dessus), elle se trouve dans ce chemin:
d:\Pctrav\Pctrav.exe, j'ai donc 2 fichiers dans ce même dossier: (pctrav.exe + un sous-dossier nommé Data qui contient mes bases de données)
Mon application fonctionne très bien (depuis longtemps d'ailleurs). Quand je lance mon application là où elle se trouve, ça marche bien. Si je créé un raccourci de mon application manuellement, et que je lance mon programme à partir de mon raccourci, ça marche bien comme prévu. Mais quand j'utilise ton code pour créer un raccourci, le raccourci est créé mais il ne fonctionne pas. Voici le message qui s'affiche:
Ouverture c:users\MonPc\Desktop\Data\Client.db impossible ! \
Qu'en pensez-vous?
Merci
Ton application tente d'ouvrir la base de données dans Chemin$
et
chemin est composé de Chemin$=GetCurrentDirectory()+"Data\"
S'il ne trouve pas, c'est que le répertoire actuel n'est pas bien positionné
Tu peux vérifier en cours de programme en ajoutant un debug
Dbs$ = Chemin$+"client.db"
Debug Dbs$

Si tu veux utiliser GetCurrentDirectory() depuis un programme lancé par un lien, il faut que ce lien contienne bien le chemin de démarrage (WorkingDirectory) "Démarrer dans:"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Créer un raccourci sur le bureau

Message par falsam »

C'est de ma faute. Il manque le dossier d'exécution de l'application.

Voici les quelques modifications à effectuer avec le code que j'ai proposé initialement.

Ligne 5 : Ajout d'une variable mémorisant le dossier de l'application.
Global Application.s, LinkFileName.s, LinkName.s, WorkDirectory.s
Ligne 10 on mémorise le dossier de l'application
;Nom de l'executable : Exemple Demo.exe
Application = "D:\Purebasic Project\test1\demo.exe"

WorkDirectory = GetPathPart(Application)
Ligne 19 : On invoque la création du raccourci de l'application.
;Création du raccourci sur le bureau
If createShellLink(Application, LinkFileName, "", LinkName, WorkDirectory, Application, 0) = 0
   MessageRequester("Information", "Le raccourci est crée sur le bureau", #PB_MessageRequester_Ok)
EndIf
Le code que j'ai proposé est mise à jour.
https://www.purebasic.fr/french/viewtop ... 87#p199987
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Créer un raccourci sur le bureau

Message par omega »

Bonjour
@Marc56
J'ai bien précisé que mon application fonctionne très bien (depuis plus de 8 mois), je n'ai donc pas besoin de tester l'existence du dossier Chemin$ puisque je n'ai aucun problème de ce côté là. Il semble que tu n'as pas bien compris mon problème.
@Falsam
Je crois que ce que tu viens de proposer est justement l'instruction manquante, je vais mettre à jour le code et retester encore une fois. J'espère que cette fois, ça va marcher. Merci encore Falsam de ton aide.
Je te ferais signe après le test.
A+
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Créer un raccourci sur le bureau

Message par omega »

@Falsam
ça marche ! Merci beaucoup Falsam, tu es un vrai génie !
Bonne continuation !
Dernière modification par omega le jeu. 19/juil./2018 13:46, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Créer un raccourci sur le bureau

Message par Marc56 »

J'ai bien précisé que mon application fonctionne très bien (depuis plus de 8 mois), je n'ai donc pas besoin de tester l'existence du dossier Chemin$ puisque je n'ai aucun problème de ce côté là. Il semble que tu n'as pas bien compris mon problème.
Il me semble que tu n'as pas bien lui ma réponse jusqu'au bout, ni compris qu'un lien ne fonctionne pas comme le lancement direct d'un fichier
Si tu veux utiliser GetCurrentDirectory() depuis un programme lancé par un lien, il faut que ce lien contienne bien le chemin de démarrage (WorkingDirectory) "Démarrer dans:"
C'est exactement ce que t'a expliqué Falsam ensuite en te faisant ajouter WorkDirectory
Global Application.s, LinkFileName.s, LinkName.s, WorkDirectory.s
Il manquait le dossier d'exécution de l'application.

En faisant un Debug pour afficher le chemin en cours, tu aurais tout de suite vu que ton programme se lançait bien, mais le chemin "en cours" n'était pas forcément celui de l'exe

Regarde les propriétés d'un lien sur le bureau par exemple, il y a
- Cible:
- Démarrer dans:

[edit] Si tu ne renseignes pas "Démarrer dans:" alors ton exe se lance bien, mais le programme ne change pas de répertoire pour la suite.
Si tu fais un raccourci par l'assistant Windows, alors il met en cible le répertoire de l'EXE, donc dans ton cas, cela fonctionnait, mais si tu créé ce lien toi-même, alors "Démarré dans" doit être renseigné

Quand tu renseignes ce champs, c'est comme si tu faisait un batch avec
- CD chemin
- programme

Cliquer sur un lien n'est pas la même chose que cliquer directement sur l'EXE
Quand tu clique sur un EXE (dans l'explorer ou le menu windows), Windows va implicitement changer le répertoire en cours pour toi, donc c'est normal que cela fonctionne.

Debug et le Visualiseur de variables sont des outils indispensables.
Ajoute ShowVariableViewer() dans ton programme et clique sur rafraichir dès que quelque chose te semble bizarre, tu verra ce que contiennent tes variables.
Ou alors, met un point d'arrêt à la fin du programme puis passes le curseur souris sur le code: tu verras en tooltip le contenu de chaque variable

D'ailleurs tu vois bien dans ton propre message d'erreur que ton programme tente d'ouvrir la base dans un sous répertoire du bureau (Desktop)
Ouverture c:users\MonPc\Desktop\Data\Client.db impossible !
Alors que tu indique que le dossier de donnée est dans un sous répertoire de d:\Pctrav\Pctrav.ex
d:\Pctrav\Pctrav.exe, j'ai donc 2 fichiers dans ce même dossier: (pctrav.exe + un sous-dossier nommé Data qui contient mes bases de
PS. Mais je dois quand même reconnaitre que Falsam explique toujours bien plus proprement :P
Répondre