Page 1 sur 1

[erreur] GetPidProcess()

Publié : sam. 16/avr./2011 16:36
par blendman
salut

j'ai un problème très bizarre avec GetPidProcess() (droopy lib).

Lorsque je l'utilise avec un petit fichier (genre 300 lignes), tout va bien, mais sur un autre fichier beaucoup plus conséquent, ça plante.
de plus, rien n'est indiqué dans le debugger pour savoir ce qui pose problème.

Y'a t-il des problèmes connus avec GetPidProcess() et des gros fichiers ?

Sinon, existe-til le même genre de fonctions directement en purebasic ?

En gros, j'aimerai savoir si un exe a été lancé (update.exe en l'occurance, pour savoir si on a fait un update avant de lancer le jeu).
Je cherche donc l'équivalent de :
GetPidProcess() et
killprocess()
en pb.

A moins que vous ne sachiez si ce genre de fonctions pose problème avec des gros fichiers.

Re: [erreur] GetPidProcess()

Publié : lun. 18/avr./2011 10:07
par Patrick88

Re: [erreur] GetPidProcess()

Publié : lun. 18/avr./2011 11:21
par falsam
EnumWindows_ énumère toutes les fenêtres principales de windows. Il faut utiliser une fonction de rappel (callback) pour pouvoir récupérer les valeurs.

GetWindowText_ renvoie le texte associé à une fenêtre ou à un contrôle.

Un petit code que tu compilera et que tu lanceras deux fois pour voir le résultat.

Code : Tout sélectionner

Enumeration
  #MainForm
EndEnumeration

;L'application est elle lancée
Procedure.l IsRun(WindowHandle.l, lParam.l)   
  Protected ApplicationListe.s
  ApplicationListe = Space(200) 
  
  ;Debug WindowHandle pour voir la liste de tous les handle 
  ;Debug  WindowHandle
  
  ;Ici on recupere le titre de chaque fenetre depuis la liste des handles
  GetWindowText_(WindowHandle, @ApplicationListe, 200) 
  
  ;Debug ApplicationListe pour voir le resultat
  ;Debug ApplicationListe
  
  ;Enfin on cherche si notre fenetre fait partie de la liste 
  If FindString(ApplicationListe, "Test", 1) <> 0 
   ProcedureReturn #False
  Else 
    ProcedureReturn #True
  EndIf 
EndProcedure 

;Fenetre principale 
Procedure MainFormShow()
  OpenWindow(#MainForm,0,0,400,300,"Test",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
EndProcedure

If EnumWindows_(@IsRun(), #False)
  MainFormShow()
Else
  MessageRequester("Information","L'application est déja active")
  End
EndIf

Repeat
  Select WaitWindowEvent()

    Case #PB_Event_CloseWindow
        End
  EndSelect
ForEver

Re: [erreur] GetPidProcess()

Publié : lun. 18/avr./2011 12:05
par blendman
Patrick88 : merci, j'ai trouvé des liens très intéressant, notamment la nouvelle version de la droopy lib :D

falsam :Merci pour ton exemple, c'est intéressant. J'ai regardé les lignes debuger, pour mieux voir.
Par contre, à chaque fois que je lance l'application (compilée) ça me met le message "L'application est déja active", que je la lance une fois, deux fois ou plus...

Re: [erreur] GetPidProcess()

Publié : lun. 18/avr./2011 13:39
par falsam
Pas chez moi, sauf si l'application est déjà lancé. Vérifie bien que ton application ne tourne pas déjà en tache de fond.

PS : Quel est ton System d'exploitation ?

Re: [erreur] GetPidProcess()

Publié : lun. 18/avr./2011 14:07
par blendman
falsam a écrit :Pas chez moi, sauf si l'application est déjà lancé. Vérifie bien que ton application ne tourne pas déjà en tache de fond.

PS : Quel est ton System d'exploitation ?
je suis sous xp, j'ai testé avec pb4.60beta2, je vais tester avec pb 4.51

L'application n'était pas lancée en tâche de fond ;)

EDIT : bon, ben meme résultat avec pb 4.51 :P