[erreur] GetPidProcess()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[erreur] GetPidProcess()

Message 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.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: [erreur] GetPidProcess()

Message par Patrick88 »

Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [erreur] GetPidProcess()

Message 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
Dernière modification par falsam le lun. 18/avr./2011 14:25, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [erreur] GetPidProcess()

Message 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...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [erreur] GetPidProcess()

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [erreur] GetPidProcess()

Message 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
Répondre