runprogram() et postmag()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pierrep
Messages : 19
Inscription : dim. 30/janv./2011 12:02

runprogram() et postmag()

Message par pierrep »

Bonjour,
J'ai trouvé dans DROOPY.pb un exemple test qui m'intéresse:

Code : Tout sélectionner

phandle=RunProgram("notepad.exe")
WaitProgramInitialisation(phandle) ; to let notepad start...
hWnd = FindClassWindow("notepad")
Delay(1000)
PostMsg(hWnd, #WM_CLOSE, 0,0) ; close notepad
Si je comprends bien cet exemple , Notepad doit s'ouvrir puis se fermer.
Malheureusement Notepad s'ouvre sans se refermer.
Est ce que j'ai mal compris l'exemple , ou bien il y a un problème ?
Merci pour toute réponse
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: runprogram() et postmag()

Message par Ar-S »

Un bouton pour ouvrir ou fermer la calculatrice par exemple.

Code : Tout sélectionner

Enumeration
  #Window_0
  #BT
EndEnumeration

Global NomFenetre$="Calculatrice" ; Ici tu entres le nom de la fenetre de rainmeter, 
Global NomExe$="calc.exe"
Global PIDduPROG


;-----La Procédure-------


Procedure OuvreOuFerme(nomFenetre.s,nomEXE.s) ; By Ar-S
  ChercheFenetre=FindWindow_(0,nomFenetre) ; Cherche le Handle de la fenêtre
  Debug "Test de la fenêtre :" +Str(ChercheFenetre)
  If ChercheFenetre=0 ; Si la fenêtre n'a pas été trouvée
    Debug "Programme non ouvert donc on l'ouvre :"+ProgAfermer$
    RunProgram("C:\windows\system32\calc.exe") ; On lance le programme
    PIDduPROG=GetPidProcess(nomEXE) ; On cherche le numéro qui lui est attribué
    Debug "PID Du Programme :"+Str(PIDduPROG)
  Else
    ProgAfermer$=HandleToFileName(ChercheFenetre) ; 
    Debug "Le programme a fermer :"+ProgAfermer$
    PIDduPROG=GetPidProcess(NomExe$) ; On cherche le numéro qui lui est attribué
    KillProcess(PIDduPROG) ; Sinon On tue le programme
    Debug KillProcess(PIDduPROG)
    Debug "Prog fermé ;)"
  EndIf

EndProcedure
  

;----- lancement du programme avec un seul bouton :) ------

If OpenWindow(#Window_0, 450, 200, 194, 46, "OpenClose", #PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  ButtonGadget(#BT, 5, 5, 180, 35, "1 Bouton suffit")
  
  
  ;{- La Boucle d'évenements
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #BT
            OuvreOuFerme(NomFenetre$,NomExe$) ; ça Roxe ?
        EndSelect
        
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Window_0
            CloseWindow(#Window_0)
            Break
        EndSelect
    EndSelect
  ForEver
EndIf
~~~~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
pierrep
Messages : 19
Inscription : dim. 30/janv./2011 12:02

Re: runprogram() et postmag()

Message par pierrep »

Merci pour ta réponse;
Mais mon but était d'éviter utilisation de KillProcess() ,car chaque fois que je l'introduis dans un programme cela entraine des anomalies ( en particulier affichage écran anormal ...) ; L'exemple de Droopy avait l'avantage de ne pas utiliser KillProcess
Peut être il y a des précaution a avoir dans l'utilisation de KillProcess
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: runprogram() et postmag()

Message par Ar-S »

Remplace

Code : Tout sélectionner

KillProcess(PIDduPROG) ; Sinon On tue le programme
par

Code : Tout sélectionner

PostMsg(PIDduPROG, #WM_CLOSE, 0,0)
ça marche ;)
~~~~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
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: runprogram() et postmag()

Message par venom »

ça marche mais c'est de l'api sa





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: runprogram() et postmag()

Message par Ar-S »

KillProgram() fait aussi partie de la droopy et utilise les API ;)
~~~~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
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: runprogram() et postmag()

Message par venom »

autant pour moi, je penser au killProgram() intègres a purebasic je n'ai pas le droopy's lib






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: runprogram() et postmag()

Message par Ar-S »

ah non c'est moi qui me goure, toutes mes excuses, je m'emmêle entre killprogram et killprocess ^^
~~~~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
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: runprogram() et postmag()

Message par venom »

:lol: lol pas de souci. le résultat c'est que ça fonctionne pour pierrep :wink:





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
pierrep
Messages : 19
Inscription : dim. 30/janv./2011 12:02

Re: runprogram() et postmag()

Message par pierrep »

J'ai testé et sauf erreur de ma part ça ne marche pas.(la fenêtre s'ouvre mais ne se referme pas)
Apparemment PostMag () attend Windowhandle et non PIDduprogramme.
Le problème pour moi est justement de connaitre l'identifiant d'une fenêtre qui a été ouverte par un exécutable.
Est ce que cela est possible ?
Merci
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: runprogram() et postmag()

Message par venom »

avec les fonction native de purebasic, et runprogram(), je suis capable d'ouvrir et fermer notepad a ma guise.
ou je n'ai pas tout saisi. voici un code :

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
Enumeration
  #Button_0
EndEnumeration

  If OpenWindow(#Window_0, 220, 0, 200, 40, "",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
      ButtonGadget(#Button_0, 10, 10, 180, 20, "ouvrir notepad", #PB_Button_Default | #PB_Button_Toggle)

  EndIf
  
  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        
       Case #Button_0
        If GetGadgetState(#Button_0) = 1
         SetGadgetText(#Button_0, "fermer notepad")
          notepad = RunProgram("notepad.exe", "", "", #PB_Program_Open|#PB_Program_Read)
        ElseIf GetGadgetState(#Button_0) = 0
         KillProgram(notepad)
          SetGadgetText(#Button_0, "ouvrir notepad")
        EndIf 
         
      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
pierrep
Messages : 19
Inscription : dim. 30/janv./2011 12:02

Re: runprogram() et postmag()

Message par pierrep »

Merci Venom pour ton aide.
Mon but n’est pas d’ouvrir ou fermer Notepad avec un bouton, mais d’ouvrir un EXE quel qu’il soit à l’intérieur d’un programme puis de le refermer.
J’avais donc dans un premier temps utilisé comme toi Runprogram() suivi de KillProgram() . Comme KillProgram ne refermait pas la fenêtre ouverte par Runprogram je suis parti sur la procedure Killprocess . Dans ce cas la fenêtre se refermait bien mais l’introduction de Killprocess semblait perturber la bonne marche de la suite de mon programme. D’où ma demande d’aide
En rajoutant les options que tu as mises dans Runprogram et que je n’avais pas mises (à savoir Open et Read), je me suis aperçu que Killprogram marchait aussi bien que Killprocess . Malheureusement des perturbations (surtout d’affichage) persistent également.
J’ai débuté Purebasic en Janvier, j’ai donc encore beaucoup à apprendre et il y a surement quelque chose dans les lignes de mon programme qui ne plait pas à Purebasic. Je ne peux pas écrire le code ici car il est beaucoup trop long. Chaque partie du programme prise séparément fonctionne mais l’assemblage plante. Problème de mémoire ou autre? (bien que je referme le programme avec closeprogram()
Je pense qu’il me reste plus qu’à chercher mais quelqu’un pourrait peut être faire un petit tuto sur les options de Runprogram() car la doc PureBasic ne m’a pas parue bien clair .
Merci encore à tous ceux qui prennent le temps de répondre
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: runprogram() et postmag()

Message par Ar-S »

Tu ne voudrais pas nous mettre du code plus complet ? D'autant plus que ce genre de manipulation pourra servir à d'autres.
~~~~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
Répondre