Nom du programme à partir de l'ID d'une fenêtre

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Nom du programme à partir de l'ID d'une fenêtre

Message par Le Soldat Inconnu »

Si vous avez l'handle ou l'id (comme vous préférez le dire) d'une fenêtre, voisi un code pour choper le nom du programme correspondant.

Suivant le post de Hi-Toro sur le fofo anglais, j'ai juste écrit ça plus propre et pour Pb 4.20
http://www.purebasic.fr/english/viewtop ... highlight=

Attention, pour 4.3, faut changer pour WindowFromPoint_(, alors débrouiller vous, na !

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Trouver le nom du programme à partir de l'ID d'une fenêtre

Procedure.s ProgramfileNameFromWindow(WindowID)
  Protected ProcessID, Process32, Snapshot, ProcessEntry.PROCESSENTRY32, ProgramfileName.s
  GetWindowThreadProcessId_(WindowID, @ProcessID)
  
  Process32 = OpenLibrary (#PB_Any, "kernel32.dll") 
  If Process32
    Snapshot = CallFunction (Process32, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0) 
    If Snapshot 
      ProcessEntry\dwSize = SizeOf(PROCESSENTRY32) 
      If CallFunction (Process32, "Process32First", Snapshot, @ProcessEntry) 
        Repeat
          If ProcessID = ProcessEntry\th32ProcessID 
            ProgramfileName = PeekS(@ProcessEntry\szExeFile)
            Break
          EndIf
        Until CallFunction (Process32, "Process32Next", Snapshot, @ProcessEntry) = 0
      EndIf    
      CloseHandle_(Snapshot) 
    EndIf 
    CloseLibrary(Process32) 
  EndIf 
  ProcedureReturn ProgramfileName
EndProcedure






; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 30, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

StickyWindow(0, 1)

TextGadget(0, 5, 5, 290, 20, "")

SetTimer_(WindowID(0), 1, 500, 0)

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #WM_TIMER
      Select EventwParam()
        Case 1
          Fenetre = WindowFromPoint_(DesktopMouseX(), DesktopMouseY())
          Texte.s =ProgramfileNameFromWindow(Fenetre)
          SetGadgetText(0, Texte)
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
          
      EndSelect
  EndSelect
  
Until Event = #PB_Event_CloseWindow

KillTimer_(WindowID(0), 1)

End

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci soldat pour ce code 8)
Attention, pour 4.3, faut changer pour WindowFromPoint_(, alors débrouiller vous, na !
Oui, je sais FREDO y bosse dur pour notre plaisir, mais quand meme y nous en donne du boulot :lol:

Autrement une question idiote, (Tiens ça va changer :lol:).
Plusque tu en parle, comment ça s'appelle la constante ou le chiffre que l'on met pour chaque gadget pour l'identifier ???
Moi je l'apelle aussi l'ID !!! :roll:
Il devrait y avoir un autre nom, car dans ma tete c'est pas toujours clair.
J'appelle l'ID de windows "le handle"
Et l'ID de PB "IdPb", est ce que j'ai tout juste, ou comme dab, il faut que la remette dans ma culotte :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Normalement
Handle = Gadget(#Identifiant, ...)

Moi, moi, Handle, j'aime pas, c'est anglais, donc je garde "identifiant" dans tous les cas
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci, mais c'est vrai que ça porte a confusion tout ça.
Dommage que FRED est pas donné un nom du debut à son identifiant
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Perso au début, ça m'a dérangé que PB travaille avec des ID, car un gadget à un handle (unique) et aussi un identifiant (pas forcément unique, mais avec PB c'est toujours le cas), donc c'est deux choses différentes.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je suis content que je ne sois pas le seul a m'etre melanger un peu les pinceaux.
J'ai encore parfoir du mal a savoir si il faut que je mette WindowId(#X) ou directement X (Pareil pour les gadgets)
Alors j'essaye les deux, une fois ça plante donc c'est l'autre :oops:
Mais tout le monde sait dans ce forum, que la KCC method est la seule a ne pas suivre :lol:
Répondre