Page 1 sur 1

[Résolu] Ouvrir un exe avec le bon chemin...

Publié : jeu. 15/août/2019 16:24
par SPH
Salut a tous, :)

j'ai besoin de votre savoir !
Mon logiciel de cryptage fait des fichiers ".mkey2"
J'ai donc dis a windows qu'il lance mon crypteur quand on double clic sur un fichier .mkey2
Ce que j'aimerais, c'est que mon crypteur s'ouvre sur le chemin du fichier double cliqué (ExplorerTreeGadget) !

Voici un code court qui peut etre considéré comme mon logiciel :

Code : Tout sélectionner

OpenWindow(0, 0, 0, 749, 515, "SPH", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

Global Repertoire$
calcul=0

ExplorerTreeGadget(1, 11, 73, 230, 280, Repertoire$, #PB_Explorer_NoFiles)
ExplorerListGadget(2, 247,73,490,280, "*.*", #PB_Explorer_NoFolders|#PB_Explorer_NoParentFolder)
SendMessage_(GadgetID(2),#LVM_SETCOLUMNWIDTH,0,188) ; largeur colonne
SendMessage_(GadgetID(2),#LVM_SETCOLUMNWIDTH,1,80) ; largeur colonne

FrameGadget(3, 11,  360, 726,33, "", #PB_Frame_Single)

;titre
TextGadget(4, 20, 370,90,20,"Password :")
;password
StringGadget(5, 80,  366, 570, 20, ""  )

;invisible
ButtonGadget(6, 656,  366, 30, 20, "Hide", #PB_Button_Toggle)


;cls
ButtonGadget(7, 693,  366, 40, 20, "Clear")

Procedure Afficher_fichiers()
  SetGadgetText(2, "")                    ; Vider la liste des fichiers
  Repertoire$ = GetGadgetText(1)          ; Voir quel est le répertoire sélectionné
  SetGadgetText(2, Repertoire$)           ; Remplir la liste avec le répertoire
EndProcedure

BindGadgetEvent(1, @Afficher_fichiers(), #PB_EventType_Change) ; #PB_EventType_LeftClick) 


Repeat
  Evenement = WindowEvent()
  If Evenement = #PB_Event_Gadget
    If EventGadget()=6 ; hide button
      If GetGadgetState(6)=1         
        StringGadget(5, 80,  366, 570, 20, GetGadgetText(5),#PB_String_Password)
      Else
        StringGadget(5, 80,  366, 570, 20, GetGadgetText(5))
      EndIf
      
      
    EndIf
    
   
    window_event = WaitWindowEvent(5) ;changing the progressbar's will always cause this to catch an event
    While window_event <> 0
      If window_event = #PB_Event_CloseWindow : Break 2: EndIf
      window_event = WindowEvent()
    Wend
   
  EndIf
Delay(5)
Until Evenement = #PB_Event_CloseWindow
End

;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;
Thx a lot 8)

Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : jeu. 15/août/2019 17:34
par Ar-S
Bonne question.

Si le fait de double cliqué sur un .mkey2 lance ton soft, il faudrait voir si il se comporte comme un fichier glisser/déposer. à ce compte là ce serait simple.
Je ne peux pas faire le test de suite car ce soir c'est tapas au village.

J'ai pris cette base :
Le glissé déposé affiche le bon endroit.
Ajoute juste le "ouvrir avec" sous windows et tu seras fixé.

Code : Tout sélectionner

Global PAthFile$

Enumeration
  #WIN
   #BTexit
  #tree
EndEnumeration

Procedure OpenWindow_WIN()
  OpenWindow(#WIN, 489, 566, 371, 73, "AES PROTECTOR // LDV MULTIMEDIA "+V$, #PB_Window_TitleBar)
  ButtonGadget(#BTexit,349,0,20,36,"x",#BS_FLAT)
  EnableWindowDrop(#WIN,#PB_Drop_Files,#PB_Drag_Copy)
  SetWindowColor(#WIN,$0)
EndProcedure


Procedure DropOn()

  PathFile$ = ""
     If FileSize(EventDropFiles())>0
      PathFile$ = EventDropFiles()
     ExplorerTreeGadget(#tree, 1, 1, 350, 90, GetPathPart(PAthFile$), #PB_Explorer_NoFiles)
    EndIf 
  
  Debug "fichier "+pathfile$

EndProcedure


; --------------------------------
;- /// PROGRAMME ///
; --------------------------------

OpenWindow_WIN()


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_WindowDrop  
      
      DropOn()
      
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #BTexit
          exit = 1

      EndSelect
      
  EndSelect
Until exit = 1

End


Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : jeu. 15/août/2019 17:41
par Marc56
Si tu cliques sur un fichier associé à un programme, alors le fichier cliqué est identifié comme le premier paramètre du programme.
Tu le récupère avec son chemin complet par ProgramParameter(0)
(Idem que s'il était droppé sur l'icône, ou passé en ligne de commande)
Avec PB 0 est le premier paramètre contrairement à d'autres systèmes ou 0 est le programme ou parfois la ligne complète.

Il suffit ensuite d'extraire le path et de redéfinir les deux gadgets

Code : Tout sélectionner

SetGadgetText(1, GetPathPart( ProgramParameter( 0 ) ) )
:wink:

Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : jeu. 15/août/2019 18:07
par SPH
Si le fait de double cliqué sur un .mkey2 lance ton soft, il faudrait voir si il se comporte comme un fichier glisser/déposer. à ce compte là ce serait simple.
Comme mon logiciel est supposé "fermé" au double cliquage, il ne peux se comporter comme un cliquer-glisser (helas)
Je ne peux pas faire le test de suite car ce soir c'est tapas au village.
:mrgreen:

Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : jeu. 15/août/2019 20:14
par Ollivier
Je confirme la proposition de Marc56.

La chaîne retournée par ProgramParameter(0) est l'une de celles stockées dans l'IDE :

1) Menu "Compilateur"
2) Item "Options du compilateur"
3) Onglet "Compiler/Exécuter"(*)
4) Conteneur "Options de lancement"
5) Champs "Paramètres de l'exécutable"

Et compiler ça :

Code : Tout sélectionner

MessageRequester("Info", ProgramParameter(0) )
Ça affichera le chemin, le nom et l'extension du fichier cliqué et exécuté sous Windows (sous Linux, je l'ignore).

Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : jeu. 15/août/2019 20:57
par Marc56
Comme mon logiciel est supposé "fermé" au double cliquage, il ne peux se comporter comme un cliquer-glisser (helas)
En fait, si.
Que tu double-clique sur ton .mkey2 ou que tu drag un fichier .mkey2 sur l'icone de l'EXE, c'est pareil.

Le programme EXE s'ouvre et reçoit le fichier de données en paramètre 0

:wink:

Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : jeu. 15/août/2019 21:05
par SPH
Ollivier a écrit :Je confirme la proposition de Marc56.

La chaîne retournée par ProgramParameter(0) est l'une de celles stockées dans l'IDE :

1) Menu "Compilateur"
2) Item "Options du compilateur"
3) Onglet "Compiler/Exécuter"(*)
4) Conteneur "Options de lancement"
5) Champs "Paramètres de l'exécutable"

Et compiler ça :

Code : Tout sélectionner

MessageRequester("Info", ProgramParameter(0) )
Ça affichera le chemin, le nom et l'extension du fichier cliqué et exécuté sous Windows (sous Linux, je l'ignore).
HO LA VAAAAACHE !!!!!! CA MAAAAARCHE !!!!!!

Je suis trop content !
Mais où as tu déniché cette technique :?: 8O 8O 8O

Re: [Résolu] Ouvrir un exe avec le bon chemin...

Publié : jeu. 15/août/2019 21:56
par Ar-S

Code : Tout sélectionner

ProgramParameter( 0 )
Excellent :!:
Décidément je (re)découvre toujours des trucs avec PB.. :P C'est parfait !

Re: [Résolu] Ouvrir un exe avec le bon chemin...

Publié : jeu. 15/août/2019 23:08
par Ollivier
SPH a écrit :Je suis trop content !
Mais où as tu déniché cette technique ?
Simple : j'ai grugé sur le message de Marc56. C'est une technique qui a pratiquement 40 années et que Marc connaît avec plus d'expérience. Merci à lui pour ce rappel (je pensais que c'était une constante...).

Re: Ouvrir un exe (.pb compilé) avec le bon chemin...

Publié : ven. 16/août/2019 7:28
par SPH
Ollivier a écrit :1) Menu "Compilateur"
2) Item "Options du compilateur"
3) Onglet "Compiler/Exécuter"(*)
4) Conteneur "Options de lancement"
5) Champs "Paramètres de l'exécutable"
On y mets quoi dans le champs ? :?:

Re: [Résolu] Ouvrir un exe avec le bon chemin...

Publié : ven. 16/août/2019 8:15
par Marc56
On y mets quoi dans le champs ?
Le(s) paramètre(s) que tu veux passer à l’exécutable quand tu compile dans l'IDE.

ex: c:\tmp\test.mkey2
(chemin complet)

Ainsi, plus besoin de compiler en EXE et sortir de l'IDE pour tester un programme demandant des paramètres.

Les paramètres que tu mets (donc au besoin des fichiers) sont les même que ceux que recevrait le programme si tu le lançait en ligne de commande ou si tu faisais un dnd de fichier sur l'icône.

À noter que même sans associer de fichier, si tu créé un raccourci de ton programme sur le bureau et que tu y fais un dnd d'un fichier .mkey2, cela aura le même effet: ProgramParameter(0) aura le premier fichier. Valable aussi pour plusieurs fichiers: ProgramParameter(0) 1 2 3

Re: [Résolu] Ouvrir un exe avec le bon chemin...

Publié : ven. 16/août/2019 13:28
par SPH
Marc56 a écrit :
On y mets quoi dans le champs ?
Le(s) paramètre(s) que tu veux passer à l’exécutable quand tu compile dans l'IDE.
Non, je dis ca parce qu'en ne mettant rien, ca marche quand meme !! :?
Normal ? :?:

Re: [Résolu] Ouvrir un exe avec le bon chemin...

Publié : ven. 16/août/2019 15:27
par Ollivier
Pour être certain que plusieurs paramètres puissent passer, je crois qu'il y a un standard syntaxique (au moins) sous windows :

Code : Tout sélectionner

"param1" "param2" "param3" etc...
Le mécanisme est assez similaire à l'interaction utilisateur/interpréteur :

On fournit manuellement des chaînes balisées par des guillemets et, la fonction ProgramParameter(Index) rend la chaîne pointée par l'index, à l'intérieur des balises.

Re: [Résolu] Ouvrir un exe avec le bon chemin...

Publié : ven. 16/août/2019 20:04
par Marc56
Non, je dis ca parce qu'en ne mettant rien, ca marche quand meme !! :?
Normal ? :?:
Cette option de l'IDE prend toute la ligne même vide. Le contenu est à traiter par le programmeur.
Les guillemets servent à empêcher la découpe pour les paramètre avec espaces (ie: Program Files)
Si la ligne est vide, l'IDE considère = ""

PS. Dans ProgramParameter(0) le zéro est facultatif, la réponse de Derren était donc aussi juste.
https://www.purebasic.fr/english/viewto ... 38#p540538