Page 1 sur 1
runprogram() et postmag()
Publié : dim. 13/mars/2011 15:11
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
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 16:53
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
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 18:24
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
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 18:36
par Ar-S
Remplace
par
ça marche

Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 18:52
par venom
ça marche mais c'est de l'api sa
@++
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 18:54
par Ar-S
KillProgram() fait aussi partie de la droopy et utilise les API

Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 18:56
par venom
autant pour moi, je penser au killProgram() intègres a purebasic je n'ai pas le droopy's lib
@++
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 18:58
par Ar-S
ah non c'est moi qui me goure, toutes mes excuses, je m'emmêle entre killprogram et killprocess ^^
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 19:01
par venom

lol pas de souci. le résultat c'est que ça fonctionne pour pierrep
@++
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 22:30
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
Re: runprogram() et postmag()
Publié : dim. 13/mars/2011 22:44
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
@++
Re: runprogram() et postmag()
Publié : mar. 15/mars/2011 18:01
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
Re: runprogram() et postmag()
Publié : mar. 15/mars/2011 18:14
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.