Récuperer le Handle

Sujets variés concernant le développement en PureBasic
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Récuperer le Handle

Message par wolfjeremy »

Salut,

Comment est-ce que on peut récuperer le Handle d'une fenetre d'un autre programme ?

Existe il une methode pour forcer un programme a se minimiser ?

Merci d'avance pour votre réponse.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

L'API FindWindow devrait faire l'affaire.
"Qui baise trop bouffe un poil." P. Desproges
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Ok merci (j'ai toujour pas trouver de doc complète pour l'api... j'ai bien trouver des programme mais il n'y en a aucun qui marche :mad: )

EDIT : tu n'aurais pas un exemple d'utilisation ?

Code : Tout sélectionner

FindWindow (LPCTSTR lpszClass, LPCTSTR lpszWindow)
Je capte pas :?
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Voici un code de Chris que j'ai retrouvé dans mes dossiers.

Il est assez complet mais tu devrais trouver la partie qui t'intéresse facilement :

Code : Tout sélectionner

; Auteur : Chris
; Version de PB : 4.0
; 
; Explication du programme :
; Pour connaître toutes les informations concernant l'objet sous la souris

;- Enumérations
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Btn_Ok
  #String_0
  #IP_0
  #Combo_0
  #List_0
  #Btn_Img_0
  #Progress_0
  #Track_0
  #Btn_Quit
  #Btn_Cancel
EndEnumeration

; Appels de Structures. <-- Je sais pas si on dit ça, mais je me comprends.
CurPos.POINT
R.RECT
Parent.RECT
FP.RECT

;- Procédures
Procedure Open()
  If OpenWindow(#Window_0, 300, 200, 400, 360, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "Détection des objets", 0)
    hWnd = WindowID(#Window_0)
    SetWindowPos_(hWnd, #HWND_TOPMOST, WindowX(0), WindowY(0), WindowWidth(0), WindowHeight(0) + 32, #SWP_SHOWWINDOW)
    If CreateGadgetList(hWnd)
      EditorGadget(#String_0, 5, 5, 385, 320)
      For i = 0 To 22
        AddGadgetItem(#String_0, -1, " ")
      Next
      ButtonGadget(#Btn_Quit, 150, 330, 100, 25, "Quit")
      ProcedureReturn hWnd
    EndIf
  EndIf
EndProcedure

Procedure SetText(Handle, x, y, w, h, hParent, h_hParent, xP, yP, wP, hP, IDWindow, Name$, NameParent$)
  If hParent = 0 : NameParent$ = "Aucun" : EndIf
  SetGadgetItemText(#String_0, 0, "--------- Références de l'objet pointé", 0)
  SetGadgetItemText(#String_0, 2, "Handle de l'objet= " + Str(Handle), 0)
  SetGadgetItemText(#String_0, 3, "Position X = " + Str(x), 0)
  SetGadgetItemText(#String_0, 4, "Position Y = " + Str(y), 0)
  SetGadgetItemText(#String_0, 5, "Largeur = " + Str(w), 0)
  SetGadgetItemText(#String_0, 6, "Hauteur = " + Str(h), 0)
  SetGadgetItemText(#String_0, 7, "ID de l'objet = " + Str(IDWindow), 0)
  SetGadgetItemText(#String_0, 8, "Nom de classe = " + Name$, 0)
  SetGadgetItemText(#String_0, 10, "--------- Références du parent direct", 0)
  SetGadgetItemText(#String_0, 12, "Handle du Parent = " + Str(hParent), 0)
  SetGadgetItemText(#String_0, 13, "Position X du Parent = " + Str(xP), 0)
  SetGadgetItemText(#String_0, 14, "Position Y du Parent = " + Str(yP), 0)
  SetGadgetItemText(#String_0, 15, "Largeur du Parent = " + Str(wP), 0)
  SetGadgetItemText(#String_0, 16, "Hauteur du Parent = " + Str(hP), 0)
  SetGadgetItemText(#String_0, 17, "Nom de classe = " + NameParent$, 0)
  SetGadgetItemText(#String_0, 19, "--------- Références de la première fenêtre", 0)
  SetGadgetItemText(#String_0, 21, "Handle fenêtre Mère = " + Str(h_hParent), 0)
EndProcedure

;- Programme
hWnd = Open()
SetTimer_(hWnd, 1, 50, 0)

Repeat
  GetCursorPos_(CurPos) ; Position du curseur
  ; / Relatif à la Zone survolée
  Handle = WindowFromPoint_(CurPos\x, CurPos\y) ; Handle de la zone survolée
  GetWindowRect_(Handle, R) ; Dimensions de la zone survolée
  hParent = GetParent_(Handle)
  If hParent <> 0 ; Si "Handle" à un parent
    tmp = hParent ; stockage temporaire du handle du parent
    Repeat
      hTemp = GetParent_(tmp) ; Recherche du parent
      If hTemp = 0 ; Si la recherche donne 0, le handle précédent est celui
        h_hParent = tmp ; de la fenêtre mère
        GetWindowRect_(h_hParent, FP)
        Break
      Else
        tmp = hTemp
      EndIf
    Until hTemp = 0
  EndIf
  
  x = R\Left : y = R\Top : x2 = R\right : y2 = R\bottom : w = x2 - x : h = y2 - y
  xP = FP\Left : yP = FP\Top : x2P = FP\right : y2P = FP\bottom : wP = x2P - xP : hP = y2P - yP
  x - xP : y - yP
  
  IDWindow = GetWindowLong_(Handle, #GWL_ID)
  Name$ = Space(256)
  GetClassName_(Handle, @Name$, 256)
  NameParent$ = Space(256)
  GetClassName_(hParent, @NameParent$, 256)
  
  Select WaitWindowEvent()
    Case #WM_TIMER
      SetText(Handle, x, y, w, h, hParent, h_hParent, xP, yP, wP, hP, IDWindow, Name$, NameParent$)
      
    Case #PB_Event_CloseWindow
      Quit = 1
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Btn_Quit : Quit = 1
      EndSelect
  EndSelect
Until Quit = 1 : End
Désolé j'ai pas pu isolé la partie que tu cherche car mon PC rame trop :oops:
Dernière modification par Dorian le sam. 19/août/2006 2:05, modifié 1 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

wolfjeremy a écrit :Ok merci (j'ai toujour pas trouver de doc complète pour l'api... j'ai bien trouver des programme mais il n'y en a aucun qui marche :mad: )
Dans ce forum, Discussion générale\liens utiles et là tu trouveras les lien utiles pour les API
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Ok merci a vous deux.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

La doc pour les API c'est la MSDN qui est depuis peu disponible en téléchargement gratuitement.
"Qui baise trop bouffe un poil." P. Desproges
Répondre