mais je me rappel qu'un membre du forum ( denis ? chris ? comtois ? ) avait posté un code qui renvoyait le type de gadget survolé ou cliqué ...
Code : Tout sélectionner
; Auteur : Chris
; Version de PB : 4
;
; 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, "Détection des objets", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, 0)
hWnd = WindowID(#Window_0)
SetWindowPos_(hWnd, #HWND_TOPMOST, WindowX(#Window_0), WindowY(#Window_0), WindowWidth(#Window_0), WindowHeight(#Window_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