Récupérer des informations sur les fenêtres

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Récupérer des informations sur les fenêtres

Message par Le Soldat Inconnu »

Salut,

Je suis en train de modifier mon code me permettant d'afficher des informations sur la fenêtre se trouvant sous la souris.

Le programme récupère :
- handle
- titre
- dimension
- style
- style étendu

Ma modification permet de modifier la fenêtre.
Si je fais clic droit sur "Size", je peux modifier la taille de la fenêtre.
Si je fais clic droit sur "Style", je peux modifier le style de la fenêtre.
Si je fais clic droit sur "Style Ex", je peux modifier le style étendu de la fenêtre.

Et c'est sur le style et le style étendu que j'ai un problème.

J'arrive bien à modifier le style, mais je n'arrive pas à forcer la fenêtre à se rafraichir pour voir le résultat
voir la procedure Modifier_Style(), la ligne RedrawWindow_(

Pour exemple, vous pouvez afficher les informations de la listicon de l'explorateur Windows, vous éditez le style et vous cochez/déchochez #WS_BORDER ce qui doit avoir pour effet d'afficher une bordure noire autour.
Je n'y arrive pas sous Windows 7, pourtant, si je redimensionne la fenêtre (donc je force l'explorateur a se redessiner). on voit apparaitre la bordure noire, ce qui signifie que le style est bien appliqué.

Au secours :mrgreen: merci

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Obtenir des informations sur la fenêtre sous la souris, ainsi que toutes les fenêtres parentes.

Structure Style_Info
  Value.l
  Text.s
EndStructure
Global NewList Style.Style_Info()
;{ Liste des styles
AddElement(Style()) : Style()\Value = #WS_BORDER : Style()\Text = "#WS_BORDER"
AddElement(Style()) : Style()\Value = #WS_CAPTION : Style()\Text = "#WS_CAPTION"
AddElement(Style()) : Style()\Value = #WS_CHILD : Style()\Text = "#WS_CHILD"
AddElement(Style()) : Style()\Value = #WS_CHILDWINDOW : Style()\Text = "#WS_CHILDWINDOW"
AddElement(Style()) : Style()\Value = #WS_CLIPCHILDREN : Style()\Text = "#WS_CLIPCHILDREN"
AddElement(Style()) : Style()\Value = #WS_CLIPSIBLINGS : Style()\Text = "#WS_CLIPSIBLINGS"
AddElement(Style()) : Style()\Value = #WS_DISABLED : Style()\Text = "#WS_DISABLED"
AddElement(Style()) : Style()\Value = #WS_DLGFRAME : Style()\Text = "#WS_DLGFRAME"
AddElement(Style()) : Style()\Value = #WS_GROUP : Style()\Text = "#WS_GROUP"
AddElement(Style()) : Style()\Value = #WS_HSCROLL : Style()\Text = "#WS_HSCROLL"
AddElement(Style()) : Style()\Value = #WS_ICONIC : Style()\Text = "#WS_ICONIC"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZE : Style()\Text = "#WS_MAXIMIZE"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZEBOX : Style()\Text = "#WS_MAXIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_MINIMIZE : Style()\Text = "#WS_MINIMIZE"
AddElement(Style()) : Style()\Value = #WS_MINIMIZEBOX : Style()\Text = "#WS_MINIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPED : Style()\Text = "#WS_OVERLAPPED"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPEDWINDOW : Style()\Text = "#WS_OVERLAPPEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_POPUP : Style()\Text = "#WS_POPUP"
AddElement(Style()) : Style()\Value = #WS_POPUPWINDOW : Style()\Text = "#WS_POPUPWINDOW"
AddElement(Style()) : Style()\Value = #WS_SIZEBOX : Style()\Text = "#WS_SIZEBOX"
AddElement(Style()) : Style()\Value = #WS_SYSMENU : Style()\Text = "#WS_SYSMENU"
AddElement(Style()) : Style()\Value = #WS_TABSTOP : Style()\Text = "#WS_TABSTOP"
AddElement(Style()) : Style()\Value = #WS_THICKFRAME : Style()\Text = "#WS_THICKFRAME"
AddElement(Style()) : Style()\Value = #WS_TILED : Style()\Text = "#WS_TILED"
AddElement(Style()) : Style()\Value = #WS_TILEDWINDOW : Style()\Text = "#WS_TILEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_VISIBLE : Style()\Text = "#WS_VISIBLE"
AddElement(Style()) : Style()\Value = #WS_VSCROLL : Style()\Text = "#WS_VSCROLL"
;}

Global NewList StyleEx.Style_Info()
;{ Liste des styles étendus
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_ACCEPTFILES : StyleEx()\Text = "#WS_EX_ACCEPTFILES"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CAPTIONOKBTN : StyleEx()\Text = "#WS_EX_CAPTIONOKBTN"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CLIENTEDGE : StyleEx()\Text = "#WS_EX_CLIENTEDGE"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CONTEXTMENU : StyleEx()\Text = "#WS_EX_CONTEXTMENU"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_DLGMODALFRAME : StyleEx()\Text = "#WS_EX_DLGMODALFRAME"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_INK : StyleEx()\Text = "#WS_EX_INK"
#WS_EX_LAYERED = $00080000
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYERED : StyleEx()\Text = "#WS_EX_LAYERED"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYOUTRTL : StyleEx()\Text = "#WS_EX_LAYOUTRTL"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LTRREADING : StyleEx()\Text = "#WS_EX_LTRREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOACTIVATE : StyleEx()\Text = "#WS_EX_NOACTIVATE"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOANIMATION : StyleEx()\Text = "#WS_EX_NOANIMATION"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NODRAG : StyleEx()\Text = "#WS_EX_NODRAG"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOINHERITLAYOUT : StyleEx()\Text = "#WS_EX_NOINHERITLAYOUT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_OVERLAPPEDWINDOW : StyleEx()\Text = "#WS_EX_OVERLAPPEDWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_PALETTEWINDOW : StyleEx()\Text = "#WS_EX_PALETTEWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_RTLREADING : StyleEx()\Text = "#WS_EX_RTLREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_STATICEDGE : StyleEx()\Text = "#WS_EX_STATICEDGE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOOLWINDOW : StyleEx()\Text = "#WS_EX_TOOLWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOPMOST : StyleEx()\Text = "#WS_EX_TOPMOST"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_WINDOWEDGE : StyleEx()\Text = "#WS_EX_WINDOWEDGE"
;}

Enumeration
	#Liste
	#Figer
	#Barre
	#Actualiser
	#Copier
	#Menu1
	#Menu1_Copier
	#Menu2
	#Menu2_Copier
	#Menu2_Modifier
	#Size_Left
	#Size_Right
	#Size_Top
	#Size_Bottom
	#Size_Width
	#Size_Heigh
	#Style_Liste
	#StyleEx_Liste
EndEnumeration

#Rafraichissement = 1000
#Vitesse = 50
#Temps_Max = #Rafraichissement / #Vitesse
#Temps_Actualiser = 200 / #Vitesse

#Largeur = 250
#Largeur2 = 220

Procedure.l GetTreePos(Gadget.l)
  ProcedureReturn GetScrollPos_(GadgetID(Gadget), #SB_VERT)
EndProcedure

Procedure.l SetTreePos(Gadget.l, Position.l)
  ProcedureReturn SetScrollPos_(GadgetID(Gadget), #SB_VERT, Position, 1)
EndProcedure

Procedure Analyse_Window(hWnd.l)
	Protected Size.RECT, Size_Parent.POINT
  
	LockWindowUpdate_(WindowID(0))
	
  Niveau = 0
  Element = -1
  ClearGadgetItemList(0)
  
  Repeat
    
    If Niveau = 0
      Element + 1 : AddGadgetItem(#Liste, Element, "Sous la souris", 0, 0)
    Else
      Element + 1 : AddGadgetItem(#Liste, Element, "Parent " + Str(Niveau), 0, 0)
    EndIf
    
    Element + 1 : AddGadgetItem(#Liste, Element, "hWnd = " + Str(hWnd), 0, 1)
    SetGadgetItemState(#Liste, Element - 1, #PB_Tree_Expanded)
    
    Text1.s = Space(255)
    GetWindowText_(hWnd, @Text1, 255)
    Text2.s = Space(255)
    SendMessage_(hWnd, #WM_GETTEXT, 255, @Text2)
    If Text1 Or Text2
      Element + 1 : 
			If Text1 = Text2
				AddGadgetItem(#Liste, Element, "Text = " + Text1, 0, 1)
			Else
				AddGadgetItem(#Liste, Element, "Text", 0, 1)
			EndIf
    EndIf
    If Text1
      Element + 1 : AddGadgetItem(#Liste, Element, "GetWindowText_(...) = " + Text1, 0, 2)
    EndIf
    If Text2
      Element + 1 : AddGadgetItem(#Liste, Element, "SendMessage_(...) = " + Text2, 0, 2)
    EndIf
    If (Text1 And Text2 = "") Or (Text1 = "" And Text2)
      SetGadgetItemState(#Liste, Element - 1, #PB_Tree_Collapsed)
    ElseIf Text1 And Text2
      SetGadgetItemState(#Liste, Element - 2, #PB_Tree_Collapsed)
    EndIf
    
    Class.s = Space(255)
    GetClassName_(hWnd, @Class, 256)
    If Class
      Element + 1 : AddGadgetItem(#Liste, Element, "Class = " + Class, 0, 1)
    EndIf
    
    Element + 1 : AddGadgetItem(#Liste, Element, "Size", 0, 1)
		SetGadgetItemData(#Liste, Element, hWnd)
    GetWindowRect_(hWnd, Size.RECT)
		hWnd_Parent = GetParent_(hWnd)
		If hWnd_Parent <> 0
			Size_Parent\X = 0
			Size_Parent\y = 0
			ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
			Size\Left - Size_Parent\X
			Size\Right - Size_Parent\X
			Size\Top - Size_Parent\y
			Size\Bottom - Size_Parent\y
		EndIf
    Element + 1 : AddGadgetItem(#Liste, Element, "Left = " + Str(Size\Left) + " / Top = " + Str(Size\Top), 0, 2)
		SetGadgetItemState(#Liste, Element - 1, #PB_Tree_Expanded)
    Element + 1 : AddGadgetItem(#Liste, Element, "Width = " + Str(Size\Right - Size\Left) + " / Height = " + Str(Size\Bottom - Size\Top), 0, 2)
		
		Size_Parent\X = 0
		Size_Parent\y = 0
		ClientToScreen_(hWnd, Size_Parent.POINT)
		Element + 1 : AddGadgetItem(#Liste, Element, "ClientToScreen_(...)", 0, 2)
    Element + 1 : AddGadgetItem(#Liste, Element, "X = " + Str(Size_Parent\X), 0, 3)
    Element + 1 : AddGadgetItem(#Liste, Element, "Y = " + Str(Size_Parent\y), 0, 3)
		
    GetWindowRect_(hWnd, Size.RECT)
		Element + 1 : AddGadgetItem(#Liste, Element, "GetWindowRect_(...)", 0, 2)
    Element + 1 : AddGadgetItem(#Liste, Element, "Left = " + Str(Size\Left), 0, 3)
		Element + 1 : AddGadgetItem(#Liste, Element, "Right = " + Str(Size\Right), 0, 3)
    Element + 1 : AddGadgetItem(#Liste, Element, "Top = " + Str(Size\Top), 0, 3)
		Element + 1 : AddGadgetItem(#Liste, Element, "Bottom = " + Str(Size\Bottom), 0, 3)
    
    Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
    If Style
      Element + 1 : AddGadgetItem(#Liste, Element, "Style", 0, 1)
			SetGadgetItemData(#Liste, Element, hWnd)
      ForEach Style()
        If Style & Style()\Value
          Element + 1 : AddGadgetItem(#Liste, Element, Style()\Text, 0, 2)
        EndIf
      Next
    EndIf
    
    Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
    If Style
      Element + 1 : AddGadgetItem(#Liste, Element, "Style Ex", 0, 1)
			SetGadgetItemData(#Liste, Element, hWnd)
      ForEach StyleEx()
        If Style & StyleEx()\Value
          Element + 1 : AddGadgetItem(#Liste, Element, StyleEx()\Text, 0, 2)
        EndIf
      Next
    EndIf
    
    hWnd = GetParent_(hWnd)
    Niveau + 1
  Until hWnd = 0
	
  SetTreePos(#Liste, 0)
  
	LockWindowUpdate_(0)
	
EndProcedure

Global Window_Size
Procedure Modifier_Size_Fenetre(hWnd.l)
	If IsWindow(1)
		CloseWindow(1)
	EndIf
	If OpenWindow(1, 0, 0, #Largeur2, 24 * 3, "Size", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Size = hWnd
		StickyWindow(1, 1)
		Largeur = #Largeur2 / 4
		GetWindowRect_(hWnd, Size.RECT)
		hWnd_Parent = GetParent_(hWnd)
		If hWnd_Parent
			ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
			Size\Left - Size_Parent\X
			Size\Right - Size_Parent\X
			Size\Top - Size_Parent\y
			Size\Bottom - Size_Parent\y
		EndIf
		TextGadget(#PB_Any, 0, 0, Largeur, 24, "Left ", #PB_Text_Right)
		SpinGadget(#Size_Left, Largeur, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Left, Size\Left)
		TextGadget(#PB_Any, Largeur * 2, 0, Largeur, 24, "Right ", #PB_Text_Right)
		SpinGadget(#Size_Right, Largeur * 3, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Right, Size\Right)
		TextGadget(#PB_Any, 0, 24, Largeur, 24, "Top ", #PB_Text_Right)
		SpinGadget(#Size_Top, Largeur, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Top, Size\Top)
		TextGadget(#PB_Any, Largeur * 2, 24, Largeur, 24, "Bottom ", #PB_Text_Right)
		SpinGadget(#Size_Bottom, Largeur * 3, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Bottom, Size\Bottom)
		TextGadget(#PB_Any, 0, 24 * 2, Largeur, 24, "Width ", #PB_Text_Right)
		SpinGadget(#Size_Width, Largeur, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Width, Size\Right - Size\Left)
		TextGadget(#PB_Any, Largeur * 2, 24 * 2, Largeur, 24, "Height ", #PB_Text_Right)
		SpinGadget(#Size_Heigh, Largeur * 3, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Heigh, Size\Bottom - Size\Top)
		
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Size(Type)
	Select Type
		Case 1
			Size.RECT
			Size\Top = GetGadgetState(#Size_Top)
			Size\Bottom = GetGadgetState(#Size_Bottom)
			Size\Left = GetGadgetState(#Size_Left)
			Size\Right = GetGadgetState(#Size_Right)
			SetWindowPos_(Window_Size, 0, Size\Left, Size\Top, Size\Right - Size\Left, Size\Bottom - Size\Top, 0)
			SetGadgetState(#Size_Width, Size\Right - Size\Left)
			SetGadgetState(#Size_Heigh, Size\Bottom - Size\Top)
			While WindowEvent() : Wend
		Case 2
			Size.RECT
			Size\Top = GetGadgetState(#Size_Top)
			Size\Bottom = Size\Top + GetGadgetState(#Size_Heigh)
			Size\Left = GetGadgetState(#Size_Left)
			Size\Right = Size\Left + GetGadgetState(#Size_Width)
			SetWindowPos_(Window_Size, 0, Size\Left, Size\Top, Size\Right - Size\Left, Size\Bottom - Size\Top, #SWP_NOMOVE)
			SetGadgetState(#Size_Right, Size\Right)
			SetGadgetState(#Size_Bottom, Size\Bottom)
			While WindowEvent() : Wend
	EndSelect
EndProcedure
Global Window_Style
Procedure Modifier_Style_Fenetre(hWnd.l)
	If IsWindow(2)
		CloseWindow(2)
	EndIf
	If OpenWindow(2, 0, 0, #Largeur2, 200, "Style", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Style = hWnd
		StickyWindow(2, 1)
		ListIconGadget(#Style_Liste, 0, 0, #Largeur2, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
		Element = -1
		ForEach Style()
			Element + 1
			AddGadgetItem(#Style_Liste, Element, Style()\Text)
			If Style & Style()\Value
				SetGadgetItemState(#Style_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#Style_Liste, Element, 1)
			Else
				SetGadgetItemData(#Style_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Style()
	Element = -1
	ForEach Style()
		Element + 1
		If GetGadgetItemState(#Style_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#Style_Liste, Element)
			SetGadgetItemData(#Style_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) | Style()\Value)
			Else
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) & ~Style()\Value)
			EndIf
			RedrawWindow_(Window_Style, 0, 0, #RDW_UPDATENOW)
		EndIf
	Next
EndProcedure
Global Window_StyleEx
Procedure Modifier_StyleEx_Fenetre(hWnd.l)
	If IsWindow(3)
		CloseWindow(3)
	EndIf
	If OpenWindow(3, 0, 0, #Largeur2, 200, "Style Ex", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_StyleEx = hWnd
		StickyWindow(3, 1)
		ListIconGadget(#StyleEx_Liste, 0, 0, #Largeur2, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
		Element = -1
		ForEach StyleEx()
			Element + 1
			AddGadgetItem(#StyleEx_Liste, Element, StyleEx()\Text)
			If Style & StyleEx()\Value
				SetGadgetItemState(#StyleEx_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#StyleEx_Liste, Element, 1)
			Else
				SetGadgetItemData(#StyleEx_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_StyleEx()
	Element = -1
	ForEach StyleEx()
		Element + 1
		If GetGadgetItemState(#StyleEx_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#StyleEx_Liste, Element)
			SetGadgetItemData(#StyleEx_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) | Style()\Value)
			Else
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) & ~Style()\Value)
			EndIf
			RedrawWindow_(Window_StyleEx, 0, 0, #RDW_UPDATENOW)
		EndIf
	Next
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, #Largeur, 400 + 24 * 3 + 16, "Window ...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

StickyWindow(0, 1)

TreeGadget(#Liste, 0, 0, #Largeur, 400)
ButtonGadget(#Figer, 0, 400, #Largeur, 24, "Figer", #PB_Button_Toggle)
GadgetToolTip(#Figer, "Figer les informations obtenus pour permettre la lecture")
ProgressBarGadget(#Barre, 0, 400 + 24, #Largeur, 16, 0, #Temps_Max, #PB_ProgressBar_Smooth)
ButtonGadget(#Actualiser, 0, 400 + 40, #Largeur, 24, "Actualiser")
GadgetToolTip(#Actualiser, "Laisser la souris au dessus du bouton pour actualiser les informations en temps réel")
ButtonGadget(#Copier, 0, 400 + 40 + 24, #Largeur, 24, "Copier")
GadgetToolTip(#Copier, "Copier l'ensemble des informations")

If CreatePopupMenu(#Menu1)
	MenuItem(#Menu1_Copier, "Copier")
Else
	End
EndIf
If CreatePopupMenu(#Menu2)
	MenuItem(#Menu2_Copier, "Copier")
	MenuBar()
	MenuItem(#Menu2_Modifier, "Modifier")
Else
	End
EndIf


AddWindowTimer(0, 1, #Vitesse)
Temps = 0

Repeat
  Event = WaitWindowEvent()
  
	Select EventWindow()
		Case 0 ;- Fenêtre principale
			
			Select Event
					
				Case #PB_Event_CloseWindow
					End
					
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Liste
							Select EventType()
								Case #PB_EventType_RightClick
									Position = GetGadgetState(#Liste)
									If Position >= 0
										If GetGadgetItemData(#Liste, Position) <> 0
											DisplayPopupMenu(#Menu2, WindowID(0))
										Else
											DisplayPopupMenu(#Menu1, WindowID(0))
										EndIf
									EndIf
							EndSelect
						Case #Figer
							Figer = GetGadgetState(#Figer)
						Case #Copier
							Texte.s = ""
							For n = 0 To CountGadgetItems(#Liste) - 1
								For Niveau = 1 To GetGadgetItemAttribute(#Liste, n, #PB_Tree_SubLevel)
									Texte + Chr(9)
								Next
								Texte + GetGadgetItemText(#Liste, n)
								Texte + Chr(13) + Chr(10)
							Next
							SetClipboardText(Texte)
						Case #Actualiser
							Analyse_Window(Window)
					EndSelect
					
				Case #PB_Event_Menu
					Select EventMenu()
						Case #Menu1_Copier, #Menu2_Copier
							Position = GetGadgetState(#Liste)
							If Position >= 0
								SetClipboardText(GetGadgetItemText(#Liste, Position))
							EndIf
						Case #Menu2_Modifier
							Position = GetGadgetState(#Liste)
							If Position >= 0
								Select GetGadgetItemText(#Liste, Position)
									Case "Size"
										Modifier_Size_Fenetre(GetGadgetItemData(#Liste, Position))
									Case "Style"
										Modifier_Style_Fenetre(GetGadgetItemData(#Liste, Position))
									Case "Style Ex"
										Modifier_StyleEx_Fenetre(GetGadgetItemData(#Liste, Position))
								EndSelect
							EndIf
					EndSelect
					
				Case #PB_Event_Timer
					Select EventTimer()
						Case 1
							Survol_Souris = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
							If Survol_Souris = GadgetID(#Actualiser) And Figer = 1
								If Temps = #Temps_Actualiser
									Analyse_Window(Window)
									Temps = 0
								ElseIf Temps < #Temps_Actualiser
									Temps + 1
								EndIf
							ElseIf Survol_Souris = Survol_Souris_Memoire And Figer = 0
								If Temps = #Temps_Max
									Window = Survol_Souris
									Analyse_Window(Window)
									Temps + 1
								ElseIf Temps < #Temps_Max
									Temps + 1
									SetGadgetState(#Barre, Temps)
								EndIf
							Else
								Temps = 0
								SetGadgetState(#Barre, Temps)
								Survol_Souris_Memoire = Survol_Souris
							EndIf
					EndSelect
			EndSelect
			
		Case 1 ;- Modifier Size
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(1)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Size_Left, #Size_Right
							Modifier_Size(1)
						Case #Size_Top, #Size_Bottom, #Size_Width, #Size_Heigh
							Modifier_Size(2)
					EndSelect
					
			EndSelect
			
		Case 2 ;- Modifier Style
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(2)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Style_Liste
							Select EventType()
								Case #PB_EventType_LeftClick
									Modifier_Style()
							EndSelect
					EndSelect
			EndSelect
			
		Case 3 ;- Modifier Style Ex
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(3)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #StyleEx_Liste
							Select EventType()
								Case #PB_EventType_LeftClick
									Modifier_StyleEx()
							EndSelect
					EndSelect
			EndSelect
	EndSelect
  
ForEver
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)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Récupérer des informations sur les fenêtres

Message par Backup »

Le Soldat Inconnu a écrit :
Pour exemple, vous pouvez afficher les informations de la listicon de l'explorateur Windows, vous éditez le style et vous cochez/déchochez #WS_BORDER ce qui doit avoir pour effet d'afficher une bordure noire autour.
pour ma part sur XP Sp3 le fait de decocher #WS_BORDER fait disparaitre la barre de titre de la fenetre de ton prg.....mais pas de cadre noir... (j'ai windowblinds)

si je teste en pointant et activant la fenetre de JAPBE par exemple
lorsque je reviens sur la fenetre de ton prg, pour modifier quelque chose
c'est la fenetre de ton prg, qui se modifie.. forcement en cliquant dessus on la reactive ;)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Récupérer des informations sur les fenêtres

Message par Le Soldat Inconnu »

c'est la fenetre de ton prg, qui se modifie.. forcement en cliquant dessus on la reactive
Ah oui, il faut cliquer sur "figer" pour que les informations de la fenêtre sous la souris reste
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)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Récupérer des informations sur les fenêtres

Message par Le Soldat Inconnu »

voici la dernière version,hormis le petit bug sur le changement de style, le reste fonctionne.

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Obtenir des informations sur la fenêtre sous la souris, ainsi que toutes les fenêtres parentes.

Structure Style_Info
  Value.l
  Text.s
EndStructure
Global NewList Style.Style_Info()
;{ Liste des styles
AddElement(Style()) : Style()\Value = #WS_BORDER : Style()\Text = "#WS_BORDER"
AddElement(Style()) : Style()\Value = #WS_CAPTION : Style()\Text = "#WS_CAPTION"
AddElement(Style()) : Style()\Value = #WS_CHILD : Style()\Text = "#WS_CHILD"
AddElement(Style()) : Style()\Value = #WS_CHILDWINDOW : Style()\Text = "#WS_CHILDWINDOW"
AddElement(Style()) : Style()\Value = #WS_CLIPCHILDREN : Style()\Text = "#WS_CLIPCHILDREN"
AddElement(Style()) : Style()\Value = #WS_CLIPSIBLINGS : Style()\Text = "#WS_CLIPSIBLINGS"
AddElement(Style()) : Style()\Value = #WS_DISABLED : Style()\Text = "#WS_DISABLED"
AddElement(Style()) : Style()\Value = #WS_DLGFRAME : Style()\Text = "#WS_DLGFRAME"
AddElement(Style()) : Style()\Value = #WS_GROUP : Style()\Text = "#WS_GROUP"
AddElement(Style()) : Style()\Value = #WS_HSCROLL : Style()\Text = "#WS_HSCROLL"
AddElement(Style()) : Style()\Value = #WS_ICONIC : Style()\Text = "#WS_ICONIC"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZE : Style()\Text = "#WS_MAXIMIZE"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZEBOX : Style()\Text = "#WS_MAXIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_MINIMIZE : Style()\Text = "#WS_MINIMIZE"
AddElement(Style()) : Style()\Value = #WS_MINIMIZEBOX : Style()\Text = "#WS_MINIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPED : Style()\Text = "#WS_OVERLAPPED"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPEDWINDOW : Style()\Text = "#WS_OVERLAPPEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_POPUP : Style()\Text = "#WS_POPUP"
AddElement(Style()) : Style()\Value = #WS_POPUPWINDOW : Style()\Text = "#WS_POPUPWINDOW"
AddElement(Style()) : Style()\Value = #WS_SIZEBOX : Style()\Text = "#WS_SIZEBOX"
AddElement(Style()) : Style()\Value = #WS_SYSMENU : Style()\Text = "#WS_SYSMENU"
AddElement(Style()) : Style()\Value = #WS_TABSTOP : Style()\Text = "#WS_TABSTOP"
AddElement(Style()) : Style()\Value = #WS_THICKFRAME : Style()\Text = "#WS_THICKFRAME"
AddElement(Style()) : Style()\Value = #WS_TILED : Style()\Text = "#WS_TILED"
AddElement(Style()) : Style()\Value = #WS_TILEDWINDOW : Style()\Text = "#WS_TILEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_VISIBLE : Style()\Text = "#WS_VISIBLE"
AddElement(Style()) : Style()\Value = #WS_VSCROLL : Style()\Text = "#WS_VSCROLL"
;}

Global NewList StyleEx.Style_Info()
;{ Liste des styles étendus
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_ACCEPTFILES : StyleEx()\Text = "#WS_EX_ACCEPTFILES"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CAPTIONOKBTN : StyleEx()\Text = "#WS_EX_CAPTIONOKBTN"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CLIENTEDGE : StyleEx()\Text = "#WS_EX_CLIENTEDGE"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CONTEXTMENU : StyleEx()\Text = "#WS_EX_CONTEXTMENU"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_DLGMODALFRAME : StyleEx()\Text = "#WS_EX_DLGMODALFRAME"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_INK : StyleEx()\Text = "#WS_EX_INK"
#WS_EX_LAYERED = $00080000
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYERED : StyleEx()\Text = "#WS_EX_LAYERED"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYOUTRTL : StyleEx()\Text = "#WS_EX_LAYOUTRTL"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LTRREADING : StyleEx()\Text = "#WS_EX_LTRREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOACTIVATE : StyleEx()\Text = "#WS_EX_NOACTIVATE"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOANIMATION : StyleEx()\Text = "#WS_EX_NOANIMATION"
; AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NODRAG : StyleEx()\Text = "#WS_EX_NODRAG"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOINHERITLAYOUT : StyleEx()\Text = "#WS_EX_NOINHERITLAYOUT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_OVERLAPPEDWINDOW : StyleEx()\Text = "#WS_EX_OVERLAPPEDWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_PALETTEWINDOW : StyleEx()\Text = "#WS_EX_PALETTEWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_RTLREADING : StyleEx()\Text = "#WS_EX_RTLREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_STATICEDGE : StyleEx()\Text = "#WS_EX_STATICEDGE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOOLWINDOW : StyleEx()\Text = "#WS_EX_TOOLWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOPMOST : StyleEx()\Text = "#WS_EX_TOPMOST"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_WINDOWEDGE : StyleEx()\Text = "#WS_EX_WINDOWEDGE"
;}

Enumeration
	#Liste
	#Figer
	#Barre
	#Actualiser
	#Copier
	#Menu1
	#Menu1_Copier
	#Menu1_Arbre_Complet
	#Menu2
	#Menu2_Copier
	#Menu2_Arbre_Complet
	#Menu2_Modifier
	#Size_Left
	#Size_Right
	#Size_Top
	#Size_Bottom
	#Size_Width
	#Size_Heigh
	#Style_Liste
	#StyleEx_Liste
	#Arbre_Complet_Liste
	#Arbre_Complet_Information
EndEnumeration

#Rafraichissement = 1000
#Vitesse = 50
#Temps_Max = #Rafraichissement / #Vitesse
#Temps_Actualiser = 200 / #Vitesse

#Largeur = 250
#Largeur2 = 220

Procedure.l GetTreePos(Gadget.l)
  ProcedureReturn GetScrollPos_(GadgetID(Gadget), #SB_VERT)
EndProcedure

Procedure.l SetTreePos(Gadget.l, Position.l)
  ProcedureReturn SetScrollPos_(GadgetID(Gadget), #SB_VERT, Position, 1)
EndProcedure

Procedure Analyse_Window(hWnd.l)
	Protected Size.RECT, Size_Parent.POINT
  
	LockWindowUpdate_(WindowID(0))
	
  Niveau = 0
  Element = -1
  ClearGadgetItemList(0)
  
  Repeat
    
    If Niveau = 0
      Element + 1 : AddGadgetItem(#Liste, Element, "Sous la souris", 0, 0)
    Else
      Element + 1 : AddGadgetItem(#Liste, Element, "Parent " + Str(Niveau), 0, 0)
    EndIf
    
    Element + 1 : AddGadgetItem(#Liste, Element, "hWnd = " + Str(hWnd), 0, 1)
    SetGadgetItemState(#Liste, Element - 1, #PB_Tree_Expanded)
    
    Text1.s = Space(255)
    GetWindowText_(hWnd, @Text1, 255)
    Text2.s = Space(255)
    SendMessage_(hWnd, #WM_GETTEXT, 255, @Text2)
    If Text1 Or Text2
      Element + 1 : 
			If Text1 = Text2
				AddGadgetItem(#Liste, Element, "Text = " + Text1, 0, 1)
			Else
				AddGadgetItem(#Liste, Element, "Text", 0, 1)
			EndIf
    EndIf
    If Text1
      Element + 1 : AddGadgetItem(#Liste, Element, "GetWindowText_(...) = " + Text1, 0, 2)
    EndIf
    If Text2
      Element + 1 : AddGadgetItem(#Liste, Element, "SendMessage_(...) = " + Text2, 0, 2)
    EndIf
    If (Text1 And Text2 = "") Or (Text1 = "" And Text2)
      SetGadgetItemState(#Liste, Element - 1, #PB_Tree_Collapsed)
    ElseIf Text1 And Text2
      SetGadgetItemState(#Liste, Element - 2, #PB_Tree_Collapsed)
    EndIf
    
    Class.s = Space(255)
    GetClassName_(hWnd, @Class, 256)
    If Class
      Element + 1 : AddGadgetItem(#Liste, Element, "Class = " + Class, 0, 1)
    EndIf
    
    Element + 1 : AddGadgetItem(#Liste, Element, "Size", 0, 1)
		SetGadgetItemData(#Liste, Element, hWnd)
    GetWindowRect_(hWnd, Size.RECT)
		hWnd_Parent = GetParent_(hWnd)
		If hWnd_Parent <> 0
			Size_Parent\x = 0
			Size_Parent\y = 0
			ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
			Size\Left - Size_Parent\x
			Size\Right - Size_Parent\x
			Size\Top - Size_Parent\y
			Size\Bottom - Size_Parent\y
		EndIf
    Element + 1 : AddGadgetItem(#Liste, Element, "Left = " + Str(Size\Left) + " / Top = " + Str(Size\Top), 0, 2)
		SetGadgetItemState(#Liste, Element - 1, #PB_Tree_Expanded)
    Element + 1 : AddGadgetItem(#Liste, Element, "Width = " + Str(Size\Right - Size\Left) + " / Height = " + Str(Size\Bottom - Size\Top), 0, 2)
		
		Size_Parent\x = 0
		Size_Parent\y = 0
		ClientToScreen_(hWnd, Size_Parent.POINT)
		Element + 1 : AddGadgetItem(#Liste, Element, "ClientToScreen_(...)", 0, 2)
    Element + 1 : AddGadgetItem(#Liste, Element, "X = " + Str(Size_Parent\x), 0, 3)
    Element + 1 : AddGadgetItem(#Liste, Element, "Y = " + Str(Size_Parent\y), 0, 3)
		
    GetWindowRect_(hWnd, Size.RECT)
		Element + 1 : AddGadgetItem(#Liste, Element, "GetWindowRect_(...)", 0, 2)
    Element + 1 : AddGadgetItem(#Liste, Element, "Left = " + Str(Size\Left), 0, 3)
		Element + 1 : AddGadgetItem(#Liste, Element, "Right = " + Str(Size\Right), 0, 3)
    Element + 1 : AddGadgetItem(#Liste, Element, "Top = " + Str(Size\Top), 0, 3)
		Element + 1 : AddGadgetItem(#Liste, Element, "Bottom = " + Str(Size\Bottom), 0, 3)
    
    Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
    If Style
      Element + 1 : AddGadgetItem(#Liste, Element, "Style", 0, 1)
			SetGadgetItemData(#Liste, Element, hWnd)
      ForEach Style()
        If Style & Style()\Value
          Element + 1 : AddGadgetItem(#Liste, Element, Style()\Text, 0, 2)
        EndIf
      Next
    EndIf
    
    Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
    If Style
      Element + 1 : AddGadgetItem(#Liste, Element, "Style Ex", 0, 1)
			SetGadgetItemData(#Liste, Element, hWnd)
      ForEach StyleEx()
        If Style & StyleEx()\Value
          Element + 1 : AddGadgetItem(#Liste, Element, StyleEx()\Text, 0, 2)
        EndIf
      Next
    EndIf
    
    hWnd = GetParent_(hWnd)
    Niveau + 1
  Until hWnd = 0
	
  SetTreePos(#Liste, 0)
  
	LockWindowUpdate_(0)
	
EndProcedure

Global Window_Size
Procedure Modifier_Size_Fenetre(hWnd.l)
	If IsWindow(1)
		CloseWindow(1)
	EndIf
	If OpenWindow(1, 0, 0, #Largeur2, 24 * 3, "Size", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Size = hWnd
		StickyWindow(1, 1)
		Largeur = #Largeur2 / 4
		GetWindowRect_(hWnd, Size.RECT)
		hWnd_Parent = GetParent_(hWnd)
		If hWnd_Parent
			ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
			Size\Left - Size_Parent\x
			Size\Right - Size_Parent\x
			Size\Top - Size_Parent\y
			Size\Bottom - Size_Parent\y
		EndIf
		TextGadget(#PB_Any, 0, 0, Largeur, 24, "Left ", #PB_Text_Right)
		SpinGadget(#Size_Left, Largeur, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Left, Size\Left)
		TextGadget(#PB_Any, Largeur * 2, 0, Largeur, 24, "Right ", #PB_Text_Right)
		SpinGadget(#Size_Right, Largeur * 3, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Right, Size\Right)
		TextGadget(#PB_Any, 0, 24, Largeur, 24, "Top ", #PB_Text_Right)
		SpinGadget(#Size_Top, Largeur, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Top, Size\Top)
		TextGadget(#PB_Any, Largeur * 2, 24, Largeur, 24, "Bottom ", #PB_Text_Right)
		SpinGadget(#Size_Bottom, Largeur * 3, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Bottom, Size\Bottom)
		TextGadget(#PB_Any, 0, 24 * 2, Largeur, 24, "Width ", #PB_Text_Right)
		SpinGadget(#Size_Width, Largeur, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Width, Size\Right - Size\Left)
		TextGadget(#PB_Any, Largeur * 2, 24 * 2, Largeur, 24, "Height ", #PB_Text_Right)
		SpinGadget(#Size_Heigh, Largeur * 3, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Heigh, Size\Bottom - Size\Top)
		
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Size(Type)
	Select Type
		Case 1
			Size.RECT
			Size\Top = GetGadgetState(#Size_Top)
			Size\Bottom = GetGadgetState(#Size_Bottom)
			Size\Left = GetGadgetState(#Size_Left)
			Size\Right = GetGadgetState(#Size_Right)
			SetWindowPos_(Window_Size, 0, Size\Left, Size\Top, Size\Right - Size\Left, Size\Bottom - Size\Top, 0)
			SetGadgetState(#Size_Width, Size\Right - Size\Left)
			SetGadgetState(#Size_Heigh, Size\Bottom - Size\Top)
			While WindowEvent() : Wend
		Case 2
			Size.RECT
			Size\Top = GetGadgetState(#Size_Top)
			Size\Bottom = Size\Top + GetGadgetState(#Size_Heigh)
			Size\Left = GetGadgetState(#Size_Left)
			Size\Right = Size\Left + GetGadgetState(#Size_Width)
			SetWindowPos_(Window_Size, 0, Size\Left, Size\Top, Size\Right - Size\Left, Size\Bottom - Size\Top, #SWP_NOMOVE)
			SetGadgetState(#Size_Right, Size\Right)
			SetGadgetState(#Size_Bottom, Size\Bottom)
			While WindowEvent() : Wend
	EndSelect
EndProcedure
Global Window_Style
Procedure Modifier_Style_Fenetre(hWnd.l)
	If IsWindow(2)
		CloseWindow(2)
	EndIf
	If OpenWindow(2, 0, 0, #Largeur2, 200, "Style", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Style = hWnd
		StickyWindow(2, 1)
		ListIconGadget(#Style_Liste, 0, 0, #Largeur2, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
		Element = -1
		ForEach Style()
			Element + 1
			AddGadgetItem(#Style_Liste, Element, Style()\Text)
			If Style & Style()\Value
				SetGadgetItemState(#Style_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#Style_Liste, Element, 1)
			Else
				SetGadgetItemData(#Style_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Style()
	Element = -1
	ForEach Style()
		Element + 1
		If GetGadgetItemState(#Style_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#Style_Liste, Element)
			SetGadgetItemData(#Style_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) | Style()\Value)
			Else
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) & ~Style()\Value)
			EndIf
			RedrawWindow_(Window_Style, 0, 0, #RDW_UPDATENOW)
		EndIf
	Next
EndProcedure
Global Window_StyleEx
Procedure Modifier_StyleEx_Fenetre(hWnd.l)
	If IsWindow(3)
		CloseWindow(3)
	EndIf
	If OpenWindow(3, 0, 0, #Largeur2, 200, "Style Ex", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_StyleEx = hWnd
		StickyWindow(3, 1)
		ListIconGadget(#StyleEx_Liste, 0, 0, #Largeur2, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
		Element = -1
		ForEach StyleEx()
			Element + 1
			AddGadgetItem(#StyleEx_Liste, Element, StyleEx()\Text)
			If Style & StyleEx()\Value
				SetGadgetItemState(#StyleEx_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#StyleEx_Liste, Element, 1)
			Else
				SetGadgetItemData(#StyleEx_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_StyleEx()
	Element = -1
	ForEach StyleEx()
		Element + 1
		If GetGadgetItemState(#StyleEx_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#StyleEx_Liste, Element)
			SetGadgetItemData(#StyleEx_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) | Style()\Value)
			Else
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) & ~Style()\Value)
			EndIf
			RedrawWindow_(Window_StyleEx, 0, 0, #RDW_UPDATENOW)
		EndIf
	Next
EndProcedure

Structure Arbre_Complet_Info
	hWnd.l
	Parent.l
	Text.s
	Class.s
	x.l
	y.l
	W.l
	H.l
EndStructure
Global NewList Arbre_Complet.Arbre_Complet_Info()
Procedure Generer_Arbre_Complet_Ajout(hWnd)
	AddElement(Arbre_Complet())
	Arbre_Complet()\hWnd = hWnd
	Arbre_Complet()\Parent = GetParent_(hWnd)
	Text.s = Space(255)
	GetWindowText_(hWnd, @Text, 255)
	Arbre_Complet()\Text = Text
	Class.s = Space(255)
	GetClassName_(hWnd, @Class, 255)
	Arbre_Complet()\Class = Class
	GetWindowRect_(hWnd, Size.RECT)
	If Arbre_Complet()\Parent <> 0
		Size_Parent.POINT
		Size_Parent\x = 0
		Size_Parent\y = 0
		ClientToScreen_(Arbre_Complet()\Parent, Size_Parent.POINT)
		Size\Left - Size_Parent\x
		Size\Right - Size_Parent\x
		Size\Top - Size_Parent\y
		Size\Bottom - Size_Parent\y
	EndIf
	Arbre_Complet()\x = Size\Left
	Arbre_Complet()\y = Size\Left
	Arbre_Complet()\W = Size\Right - Size\Left
	Arbre_Complet()\H = Size\Bottom - Size\Top
EndProcedure
Procedure Generer_Arbre_Complet_Recherche(hWnd, lParam)
	Generer_Arbre_Complet_Ajout(hWnd)
	ProcedureReturn #True
EndProcedure
Procedure Generer_Arbre_Complet_Afficher(hWnd, Niveau)
	ForEach Arbre_Complet()
		If Arbre_Complet()\hWnd = hWnd
			AddGadgetItem(#Arbre_Complet_Liste, -1, Arbre_Complet()\Text + " [ " + Arbre_Complet()\Class + " ]", 0, Niveau)
			SetGadgetItemData(#Arbre_Complet_Liste, CountGadgetItems(#Arbre_Complet_Liste) - 1, ListIndex(Arbre_Complet()))
			ForEach Arbre_Complet()
				If Arbre_Complet()\Parent = hWnd
					*ElementActuel.Arbre_Complet_Info = @Arbre_Complet()
					Generer_Arbre_Complet_Afficher(Arbre_Complet()\hWnd, Niveau + 1)
					ChangeCurrentElement(Arbre_Complet(), *ElementActuel)
				EndIf
			Next
			Break
		EndIf
	Next
EndProcedure
Procedure Generer_Arbre_Complet(hWnd)
	If IsWindow(4)
		CloseWindow(4)
	EndIf
	If OpenWindow(4, 0, 0, #Largeur2 * 3, 400, "Arbre complet", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		StickyWindow(4, 1)
		hWnd = GetAncestor_(hWnd, 2)
		ClearList(Arbre_Complet())
		Generer_Arbre_Complet_Ajout(hWnd)
		EnumChildWindows_(hWnd, @Generer_Arbre_Complet_Recherche(), 0)
		TreeGadget(#Arbre_Complet_Liste, 0, 0, #Largeur2 * 2, 400, #PB_Tree_AlwaysShowSelection)
		ListViewGadget(#Arbre_Complet_Information, #Largeur2 * 2, 0,  #Largeur2, 400)
	  Generer_Arbre_Complet_Afficher(hWnd, 0)
		For i = 0 To CountGadgetItems(#Arbre_Complet_Liste) - 1
			SetGadgetItemState(#Arbre_Complet_Liste, i, #PB_Tree_Expanded)
		Next
	EndIf
EndProcedure
Procedure Generer_Arbre_Complet_Information()
	Position = GetGadgetState(#Arbre_Complet_Liste)
	If Position > 0
		SelectElement(Arbre_Complet(), GetGadgetItemData(#Arbre_Complet_Liste, Position))
		ClearGadgetItems(#Arbre_Complet_Information)
		AddGadgetItem(#Arbre_Complet_Information, -1, "hWnd = " + Str(Arbre_Complet()\hWnd))
		AddGadgetItem(#Arbre_Complet_Information, -1, "Parent = " + Str(Arbre_Complet()\Parent))
		AddGadgetItem(#Arbre_Complet_Information, -1, "Text = " + Arbre_Complet()\Text)
		AddGadgetItem(#Arbre_Complet_Information, -1, "Class = " + Arbre_Complet()\Class)
		AddGadgetItem(#Arbre_Complet_Information, -1, "Left = " + Str(Arbre_Complet()\x))
		AddGadgetItem(#Arbre_Complet_Information, -1, "Top = " + Str(Arbre_Complet()\y))
		AddGadgetItem(#Arbre_Complet_Information, -1, "Width = " + Str(Arbre_Complet()\W))
		AddGadgetItem(#Arbre_Complet_Information, -1, "Height = " + Str(Arbre_Complet()\H))
		
	EndIf
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, #Largeur, 400 + 24 * 3 + 16, "Window ...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

StickyWindow(0, 1)

TreeGadget(#Liste, 0, 0, #Largeur, 400)
ButtonGadget(#Figer, 0, 400, #Largeur, 24, "Figer", #PB_Button_Toggle)
GadgetToolTip(#Figer, "Figer les informations obtenus pour permettre la lecture")
ProgressBarGadget(#Barre, 0, 400 + 24, #Largeur, 16, 0, #Temps_Max, #PB_ProgressBar_Smooth)
ButtonGadget(#Actualiser, 0, 400 + 40, #Largeur, 24, "Actualiser")
GadgetToolTip(#Actualiser, "Laisser la souris au dessus du bouton pour actualiser les informations en temps réel")
ButtonGadget(#Copier, 0, 400 + 40 + 24, #Largeur, 24, "Copier")
GadgetToolTip(#Copier, "Copier l'ensemble des informations")

If CreatePopupMenu(#Menu1)
	MenuItem(#Menu1_Copier, "Copier")
	MenuBar()
	MenuItem(#Menu1_Arbre_Complet, "Arborescence complête")
Else
	End
EndIf
If CreatePopupMenu(#Menu2)
	MenuItem(#Menu2_Copier, "Copier")
	MenuBar()
	MenuItem(#Menu1_Arbre_Complet, "Arborescence complête")
	MenuBar()
	MenuItem(#Menu2_Modifier, "Modifier")
Else
	End
EndIf


AddWindowTimer(0, 1, #Vitesse)
Temps = 0

Repeat
  Event = WaitWindowEvent()
  
	Select EventWindow()
		Case 0 ;- Fenêtre principale
			
			Select Event
					
				Case #PB_Event_CloseWindow
					End
					
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Liste
							Select EventType()
								Case #PB_EventType_RightClick
									Position = GetGadgetState(#Liste)
									If Position >= 0
										If GetGadgetItemData(#Liste, Position) <> 0
											DisplayPopupMenu(#Menu2, WindowID(0))
										Else
											DisplayPopupMenu(#Menu1, WindowID(0))
										EndIf
									EndIf
							EndSelect
						Case #Figer
							Figer = GetGadgetState(#Figer)
						Case #Copier
							Texte.s = ""
							For n = 0 To CountGadgetItems(#Liste) - 1
								For Niveau = 1 To GetGadgetItemAttribute(#Liste, n, #PB_Tree_SubLevel)
									Texte + Chr(9)
								Next
								Texte + GetGadgetItemText(#Liste, n)
								Texte + Chr(13) + Chr(10)
							Next
							SetClipboardText(Texte)
						Case #Actualiser
							Analyse_Window(Window)
					EndSelect
					
				Case #PB_Event_Menu
					Select EventMenu()
						Case #Menu1_Copier, #Menu2_Copier
							Position = GetGadgetState(#Liste)
							If Position >= 0
								SetClipboardText(GetGadgetItemText(#Liste, Position))
							EndIf
						Case #Menu1_Arbre_Complet, #Menu2_Arbre_Complet
							Generer_Arbre_Complet(Window)
						Case #Menu2_Modifier
							Position = GetGadgetState(#Liste)
							If Position >= 0
								Select GetGadgetItemText(#Liste, Position)
									Case "Size"
										Modifier_Size_Fenetre(GetGadgetItemData(#Liste, Position))
									Case "Style"
										Modifier_Style_Fenetre(GetGadgetItemData(#Liste, Position))
									Case "Style Ex"
										Modifier_StyleEx_Fenetre(GetGadgetItemData(#Liste, Position))
								EndSelect
							EndIf
					EndSelect
					
				Case #PB_Event_Timer
					Select EventTimer()
						Case 1
							Survol_Souris = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
							If Survol_Souris = GadgetID(#Actualiser) And Figer = 1
								If Temps = #Temps_Actualiser
									Analyse_Window(Window)
									Temps = 0
								ElseIf Temps < #Temps_Actualiser
									Temps + 1
								EndIf
							ElseIf Survol_Souris = Survol_Souris_Memoire And Figer = 0
								If Temps = #Temps_Max
									Window = Survol_Souris
									Analyse_Window(Window)
									Temps + 1
								ElseIf Temps < #Temps_Max
									Temps + 1
									SetGadgetState(#Barre, Temps)
								EndIf
							Else
								Temps = 0
								SetGadgetState(#Barre, Temps)
								Survol_Souris_Memoire = Survol_Souris
							EndIf
					EndSelect
			EndSelect
			
		Case 1 ;- Modifier Size
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(1)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Size_Left, #Size_Right
							Modifier_Size(1)
						Case #Size_Top, #Size_Bottom, #Size_Width, #Size_Heigh
							Modifier_Size(2)
					EndSelect
					
			EndSelect
			
		Case 2 ;- Modifier Style
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(2)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Style_Liste
							Modifier_Style()
					EndSelect
			EndSelect
			
		Case 3 ;- Modifier Style Ex
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(3)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #StyleEx_Liste
							Modifier_StyleEx()
					EndSelect
			EndSelect
			
		Case 4 ;- Arbre complet
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(4)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Arbre_Complet_Liste
							Generer_Arbre_Complet_Information()
					EndSelect
			EndSelect
	EndSelect
  
ForEver
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)]
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Récupérer des informations sur les fenêtres

Message par dayvid »

Ouoi punese :)

c'est bien ce code la 8O
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Récupérer des informations sur les fenêtres

Message par Kwai chang caine »

Joli code comme d'habitude, marche bien sous XP Pro :wink:
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Récupérer des informations sur les fenêtres

Message par Le Soldat Inconnu »

Nouvelle version

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Obtenir des informations sur la fenêtre sous la souris, ainsi que toutes les fenêtres parentes.

Structure Style_Info
  Value.l
  Text.s
EndStructure
Global NewList Style.Style_Info()
;{ Liste des styles
AddElement(Style()) : Style()\Value = #WS_BORDER : Style()\Text = "#WS_BORDER"
AddElement(Style()) : Style()\Value = #WS_CAPTION : Style()\Text = "#WS_CAPTION"
AddElement(Style()) : Style()\Value = #WS_CHILD : Style()\Text = "#WS_CHILD"
AddElement(Style()) : Style()\Value = #WS_CHILDWINDOW : Style()\Text = "#WS_CHILDWINDOW"
AddElement(Style()) : Style()\Value = #WS_CLIPCHILDREN : Style()\Text = "#WS_CLIPCHILDREN"
AddElement(Style()) : Style()\Value = #WS_CLIPSIBLINGS : Style()\Text = "#WS_CLIPSIBLINGS"
AddElement(Style()) : Style()\Value = #WS_DISABLED : Style()\Text = "#WS_DISABLED"
AddElement(Style()) : Style()\Value = #WS_DLGFRAME : Style()\Text = "#WS_DLGFRAME"
AddElement(Style()) : Style()\Value = #WS_GROUP : Style()\Text = "#WS_GROUP"
AddElement(Style()) : Style()\Value = #WS_HSCROLL : Style()\Text = "#WS_HSCROLL"
AddElement(Style()) : Style()\Value = #WS_ICONIC : Style()\Text = "#WS_ICONIC"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZE : Style()\Text = "#WS_MAXIMIZE"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZEBOX : Style()\Text = "#WS_MAXIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_MINIMIZE : Style()\Text = "#WS_MINIMIZE"
AddElement(Style()) : Style()\Value = #WS_MINIMIZEBOX : Style()\Text = "#WS_MINIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPED : Style()\Text = "#WS_OVERLAPPED"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPEDWINDOW : Style()\Text = "#WS_OVERLAPPEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_POPUP : Style()\Text = "#WS_POPUP"
AddElement(Style()) : Style()\Value = #WS_POPUPWINDOW : Style()\Text = "#WS_POPUPWINDOW"
AddElement(Style()) : Style()\Value = #WS_SIZEBOX : Style()\Text = "#WS_SIZEBOX"
AddElement(Style()) : Style()\Value = #WS_SYSMENU : Style()\Text = "#WS_SYSMENU"
AddElement(Style()) : Style()\Value = #WS_TABSTOP : Style()\Text = "#WS_TABSTOP"
AddElement(Style()) : Style()\Value = #WS_THICKFRAME : Style()\Text = "#WS_THICKFRAME"
AddElement(Style()) : Style()\Value = #WS_TILED : Style()\Text = "#WS_TILED"
AddElement(Style()) : Style()\Value = #WS_TILEDWINDOW : Style()\Text = "#WS_TILEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_VISIBLE : Style()\Text = "#WS_VISIBLE"
AddElement(Style()) : Style()\Value = #WS_VSCROLL : Style()\Text = "#WS_VSCROLL"
;}

Global NewList StyleEx.Style_Info()
;{ Liste des styles étendus
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_ACCEPTFILES : StyleEx()\Text = "#WS_EX_ACCEPTFILES"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_APPWINDOW : StyleEx()\Text = "#WS_EX_APPWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CLIENTEDGE : StyleEx()\Text = "#WS_EX_CLIENTEDGE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_COMPOSITED : StyleEx()\Text = "#WS_EX_COMPOSITED"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CONTEXTHELP : StyleEx()\Text = "#WS_EX_CONTEXTHELP"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CONTROLPARENT : StyleEx()\Text = "#WS_EX_CONTROLPARENT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_DLGMODALFRAME : StyleEx()\Text = "#WS_EX_DLGMODALFRAME"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYERED : StyleEx()\Text = "#WS_EX_LAYERED"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYOUTRTL : StyleEx()\Text = "#WS_EX_LAYOUTRTL"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LTRREADING : StyleEx()\Text = "#WS_EX_LTRREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_MDICHILD : StyleEx()\Text = "#WS_EX_MDICHILD"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOACTIVATE : StyleEx()\Text = "#WS_EX_NOACTIVATE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOINHERITLAYOUT : StyleEx()\Text = "#WS_EX_NOINHERITLAYOUT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOPARENTNOTIFY : StyleEx()\Text = "#WS_EX_NOPARENTNOTIFY"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_OVERLAPPEDWINDOW : StyleEx()\Text = "#WS_EX_OVERLAPPEDWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_PALETTEWINDOW : StyleEx()\Text = "#WS_EX_PALETTEWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_RTLREADING : StyleEx()\Text = "#WS_EX_RTLREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_STATICEDGE : StyleEx()\Text = "#WS_EX_STATICEDGE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOOLWINDOW : StyleEx()\Text = "#WS_EX_TOOLWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOPMOST : StyleEx()\Text = "#WS_EX_TOPMOST"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TRANSPARENT : StyleEx()\Text = "#WS_EX_TRANSPARENT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_WINDOWEDGE : StyleEx()\Text = "#WS_EX_WINDOWEDGE"
;}

Enumeration
	#Arbre
	#Progression
	#Figer
	#Information
	#MenuArbre
	#MenuArbre_Afficher_ID
	#MenuArbre_Afficher_Nom
	#MenuArbre_Afficher_Classe
	#MenuArbre_Actualiser
	#MenuArbre_Exporter
	#MenuInformation
	#MenuInformation_Editer
	#MenuInformation_Copier
	#Icone_Souris
	#Icone_Cadre
	#Icone_CadreFin = #Icone_Cadre + 100
	#MenuStyle
	#MenuStyle_Modifier
	#MenuStyle_Copier
	#MenuStyleEtendu
	#MenuStyleEtendu_Modifier
	#MenuStyleEtendu_Copier
	#MenuDimension
	#MenuDimension_Modifier
	#MenuDimension_Copier
	#MenuTexte
	#MenuTexte_Modifier
	#MenuTexte_Copier
	#MenuID
	#MenuID_Copier
	#MenuClasse
	#MenuClasse_Copier
	#Size_Left
	#Size_Right
	#Size_Top
	#Size_Bottom
	#Size_Width
	#Size_Heigh
	#Style_Liste
	#StyleEx_Liste
EndEnumeration

#Rafraichissement = 1000
#Vitesse = 50
#Temps_Max = #Rafraichissement / #Vitesse

#Fenetre_L = 600
#Fenetre_H = 200
#Fenetre_B = 2

#FenetreModifier_L = 300

Structure Arbre_Afficher_Info
	ID.b
	Nom.b
	Classe.b
EndStructure
Global Arbre_Afficher.Arbre_Afficher_Info

Procedure.l GetTreePos(Gadget.l)
  ProcedureReturn GetScrollPos_(GadgetID(Gadget), #SB_VERT)
EndProcedure

Procedure.l SetTreePos(Gadget.l, Position.l)
  ProcedureReturn SetScrollPos_(GadgetID(Gadget), #SB_VERT, Position, 1)
EndProcedure

Structure Arbre_Info
	hWnd.l
	Parent.l
	Text.s
	Class.s
EndStructure
Global NewList Arbre.Arbre_Info()
Procedure Arbre_Exporter()
	
	Fichier.s = SaveFileRequester("Exporter", "", "Fichier CSV|*.csv|Fichier texte|*.txt", 0)
	If Fichier
		If CheckFilename(GetFilePart(Fichier))
			Select SelectedFilePattern()
				Case 0
					If LCase(GetExtensionPart(Fichier)) <> "csv"
						Fichier + ".csv"
					EndIf
				Case 1
					If LCase(GetExtensionPart(Fichier)) <> "txt"
						Fichier + ".txt"
					EndIf
			EndSelect
			If FileSize(Fichier) = -1 Or MessageRequester("Exporter", "Remplacer le fichier existant ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
				
				If CreateFile(0, Fichier)
					
					WriteStringFormat(0, #PB_Unicode)
					WriteStringN(0, "Niveau" + Chr(9) + "ID" + Chr(9) + "Nom" + Chr(9) + "Classe", #PB_Unicode)
					WriteStringN(0, "", #PB_Unicode)
					
					For i = 0 To CountGadgetItems(#Arbre) - 1
						SelectElement(Arbre(), GetGadgetItemData(#Arbre, i))
						WriteStringN(0, Str(GetGadgetItemAttribute(#Arbre, i, #PB_Tree_SubLevel)) + Chr(9) + Str(Arbre()\hWnd) + Chr(9) + Arbre()\Text + Chr(9) + Arbre()\Class, #PB_Unicode)
					Next
					
					CloseFile(0)
				Else
					MessageRequester("Exporter", "Echec de la création du fichier")
				EndIf
				
			EndIf
			
		Else
			MessageRequester("Exporter", "Nom de fichier incorrect")
		EndIf
		
	EndIf
	
EndProcedure
Procedure Arbre_Recherche(hWnd, lParam)
	AddElement(Arbre())
	Arbre()\hWnd = hWnd
	ProcedureReturn #True
EndProcedure
Procedure Arbre_Afficher(hWnd, Niveau = 0, Selection = 0)
	If Niveau = 0
		ClearGadgetItems(#Arbre)
		If IsWindow_(hWnd) = 0
			ProcedureReturn
		EndIf
		Selection = hWnd
		hWnd = GetAncestor_(hWnd, 2)
		LockWindowUpdate_(WindowID(0))
	EndIf
	ForEach Arbre()
		If Arbre()\hWnd = hWnd
			If hWnd= Selection
				Image = ImageID(#Icone_Souris)
			Else
				i = 1
				Window = GetParent_(Selection)
				While Window <> hWnd And Window <> 0
					Window = GetParent_(Window)
					i + 1
				Wend
				If Window
					Image = ImageID(#Icone_Cadre + i)
				Else
					Image = ImageID(#Icone_Cadre)
				EndIf
			EndIf
			Texte.s = ""
			If Arbre_Afficher\Nom
				Texte + Arbre()\Text
			EndIf
			If Arbre()\Class And Arbre_Afficher\Classe
				If Texte
					Texte + " "
				EndIf
				Texte + "[ " + Arbre()\Class + " ]"
			EndIf
			If Arbre_Afficher\ID
				If Texte
					Texte + " = "
				EndIf
				Texte + Str(Arbre()\hWnd)
			EndIf
			AddGadgetItem(#Arbre, -1, Texte, Image, Niveau)
			SetGadgetItemData(#Arbre, CountGadgetItems(#Arbre) - 1, ListIndex(Arbre()))
			ForEach Arbre()
				If Arbre()\Parent = hWnd
					*ElementActuel.Arbre_Info = @Arbre()
					Arbre_Afficher(Arbre()\hWnd, Niveau + 1, Selection)
					ChangeCurrentElement(Arbre(), *ElementActuel)
				EndIf
			Next
			Break
		EndIf
	Next
	If Niveau = 0
		For i = 0 To CountGadgetItems(#Arbre) - 1
			SetGadgetItemState(#Arbre, i, #PB_Tree_Expanded)
			SelectElement(Arbre(), GetGadgetItemData(#Arbre, i))
			If Arbre()\hWnd = hWnd
				SetGadgetState(#Arbre, i)
				SetTreePos(#Arbre, i)
			EndIf
		Next
		LockWindowUpdate_(0)
	EndIf
EndProcedure
Procedure Informations(hWnd)
	Protected Size.RECT, Size_Parent.POINT
	LockWindowUpdate_(WindowID(0))
	
	ClearGadgetItems(#Information)
	
	Niveau = 0
	Element = -1
	
	Element + 1 : AddGadgetItem(#Information, Element, "hWnd = " + Str(hWnd), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuID)
	
	Text1.s = ""
	Text2.s = ""
	*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
	If *Memoire
		Result = GetWindowText_(hWnd, *Memoire, #MAX_PATH)
		If Result > 0 And Result < #MAX_PATH - 1
			Text1 = PeekS(*Memoire, Result)
		EndIf
		Result = SendMessage_(hWnd, #WM_GETTEXT, #MAX_PATH, *Memoire)
		If Result > 0 And Result < #MAX_PATH - 1
			Text2 = PeekS(*Memoire, Result)
		EndIf
		FreeMemory(*Memoire)
	EndIf
	If Text1 Or Text2
		Element + 1 : 
		If Text1 = Text2
			AddGadgetItem(#Information, Element, "Texte = " + Text1, 0, Niveau)
		Else
			AddGadgetItem(#Information, Element, "Texte", 0, Niveau)
		EndIf
		SetGadgetItemData(#Information, Element, #MenuTexte)
	EndIf
	
	Niveau + 1
	If Text1
		Element + 1 : AddGadgetItem(#Information, Element, "GetWindowText_(...) = " + Text1, 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuTexte)
	EndIf
	If Text2
		Element + 1 : AddGadgetItem(#Information, Element, "SendMessage_(...) = " + Text2, 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuTexte)
	EndIf
	If (Text1 And Text2 = "") Or (Text1 = "" And Text2)
		SetGadgetItemState(#Information, Element - 1, #PB_Tree_Collapsed)
	ElseIf Text1 And Text2
		SetGadgetItemState(#Information, Element - 2, #PB_Tree_Collapsed)
	EndIf
	
	Niveau - 1
	Class.s = ""
	*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
	If *Memoire
		Result = GetClassName_(hWnd, *Memoire, #MAX_PATH)
		If Result > 0 And Result < #MAX_PATH - 1
			Class = PeekS(*Memoire, Result)
		EndIf
		FreeMemory(*Memoire)
	EndIf
	If Class
		Element + 1 : AddGadgetItem(#Information, Element, "Classe = " + Class, 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuClasse)
	EndIf
	
	Element + 1 : AddGadgetItem(#Information, Element, "Dimension", 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	GetWindowRect_(hWnd, Size.RECT)
	hWnd_Parent = GetParent_(hWnd)
	If hWnd_Parent <> 0
		Size_Parent\x = 0
		Size_Parent\y = 0
		ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
		Size\left - Size_Parent\x
		Size\right - Size_Parent\x
		Size\top - Size_Parent\y
		Size\Bottom - Size_Parent\y
	EndIf
	Niveau + 1
	Element + 1 : AddGadgetItem(#Information, Element, "X = " + Str(Size\left) + " / Y = " + Str(Size\top), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	SetGadgetItemState(#Information, Element - 1, #PB_Tree_Expanded)
	Element + 1 : AddGadgetItem(#Information, Element, "Largeur = " + Str(Size\right - Size\left) + " / Hauteur = " + Str(Size\Bottom - Size\top), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	
	Size_Parent\x = 0
	Size_Parent\y = 0
	ClientToScreen_(hWnd, Size_Parent.POINT)
	Element + 1 : AddGadgetItem(#Information, Element, "ClientToScreen_(...)", 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Niveau + 1
	Element + 1 : AddGadgetItem(#Information, Element, "X = " + Str(Size_Parent\x), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Y = " + Str(Size_Parent\y), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	
	Niveau - 1
	GetWindowRect_(hWnd, Size.RECT)
	Element + 1 : AddGadgetItem(#Information, Element, "GetWindowRect_(...)", 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Niveau + 1
	Element + 1 : AddGadgetItem(#Information, Element, "Left = " + Str(Size\left), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Right = " + Str(Size\right), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Top = " + Str(Size\top), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Bottom = " + Str(Size\Bottom), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	
	Niveau - 2
	Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
	If Style
		Element + 1 : AddGadgetItem(#Information, Element, "Style", 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuStyle)
		Niveau + 1
		ForEach Style()
			If Style & Style()\Value
				Element + 1 : AddGadgetItem(#Information, Element, Style()\Text, 0, Niveau)
				SetGadgetItemData(#Information, Element, #MenuStyle)
			EndIf
		Next
		Niveau - 1
	EndIf
	
	Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
	If Style
		Element + 1 : AddGadgetItem(#Information, Element, "Style étendu", 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuStyleEtendu)
		Niveau + 1
		ForEach StyleEx()
			If Style & StyleEx()\Value
				Element + 1 : AddGadgetItem(#Information, Element, StyleEx()\Text, 0, Niveau)
				SetGadgetItemData(#Information, Element, #MenuStyleEtendu)
			EndIf
		Next
		Niveau - 1
	EndIf
	
	LockWindowUpdate_(0)
EndProcedure
Procedure Analyse(hWnd)
	If IsWindow_(hWnd) = 0
		ProcedureReturn
	EndIf
	
	ClearList(Arbre())
	Window = GetAncestor_(hWnd, 2)
	
	EnumChildWindows_(Window, @Arbre_Recherche(), 0)
	ForEach Arbre()
		Arbre()\Parent = GetParent_(Arbre()\hWnd)
		Text.s = ""
		*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
		If *Memoire
			Result = GetWindowText_(Arbre()\hWnd, *Memoire, #MAX_PATH)
			If Result > 0 And Result < #MAX_PATH - 1
				Text = PeekS(*Memoire, Result)
			EndIf
			FreeMemory(*Memoire)
		EndIf
		If Text = ""
			*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
			If *Memoire
				Result = SendMessage_(Arbre()\hWnd, #WM_GETTEXT, #MAX_PATH, *Memoire)
				If Result > 0 And Result < #MAX_PATH - 1
					Text = PeekS(*Memoire, Result)
				EndIf
				FreeMemory(*Memoire)
			EndIf
		EndIf
		Arbre()\Text = Text
		Class.s = ""
		*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
		If *Memoire
			Result = GetClassName_(Arbre()\hWnd, *Memoire, #MAX_PATH)
			If Result > 0 And Result < #MAX_PATH - 1
				Class = PeekS(*Memoire, Result)
			EndIf
			FreeMemory(*Memoire)
		EndIf
		Arbre()\Class = Class
	Next
	Arbre_Recherche(Window, 0)
	Arbre_Afficher(hWnd)
	Informations(hWnd)
	
EndProcedure


Procedure MenuArbre_Afficher()
	Somme = Arbre_Afficher\ID + Arbre_Afficher\Nom + Arbre_Afficher\Classe
	SetMenuItemState(#MenuArbre, #MenuArbre_Afficher_ID, Arbre_Afficher\ID)
	SetMenuItemState(#MenuArbre, #MenuArbre_Afficher_Nom, Arbre_Afficher\Nom)
	SetMenuItemState(#MenuArbre, #MenuArbre_Afficher_Classe, Arbre_Afficher\Classe)
	If Somme = 1
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_ID, Arbre_Afficher\ID)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Nom, Arbre_Afficher\Nom)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Classe, Arbre_Afficher\Classe)
	Else
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_ID, 0)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Nom, 0)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Classe, 0)
	EndIf
	DisplayPopupMenu(#MenuArbre, WindowID(0))
EndProcedure

Global Window_Size
Procedure Modifier_Size_Fenetre(hWnd.l)
	If IsWindow(1)
		CloseWindow(1)
	EndIf
	If OpenWindow(1, 0, 0, #FenetreModifier_L, 24 * 3, "Size", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Size = hWnd
		StickyWindow(1, 1)
		Largeur = #FenetreModifier_L / 4
		GetWindowRect_(hWnd, Size.RECT)
		hWnd_Parent = GetParent_(hWnd)
		If hWnd_Parent
			ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
			Size\left - Size_Parent\x
			Size\right - Size_Parent\x
			Size\top - Size_Parent\y
			Size\Bottom - Size_Parent\y
		EndIf
		TextGadget(#PB_Any, 0, 0, Largeur, 24, "Left ", #PB_Text_Right)
		SpinGadget(#Size_Left, Largeur, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Left, Size\left)
		TextGadget(#PB_Any, Largeur * 2, 0, Largeur, 24, "Right ", #PB_Text_Right)
		SpinGadget(#Size_Right, Largeur * 3, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Right, Size\right)
		TextGadget(#PB_Any, 0, 24, Largeur, 24, "Top ", #PB_Text_Right)
		SpinGadget(#Size_Top, Largeur, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Top, Size\top)
		TextGadget(#PB_Any, Largeur * 2, 24, Largeur, 24, "Bottom ", #PB_Text_Right)
		SpinGadget(#Size_Bottom, Largeur * 3, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Bottom, Size\Bottom)
		TextGadget(#PB_Any, 0, 24 * 2, Largeur, 24, "Width ", #PB_Text_Right)
		SpinGadget(#Size_Width, Largeur, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Width, Size\right - Size\left)
		TextGadget(#PB_Any, Largeur * 2, 24 * 2, Largeur, 24, "Height ", #PB_Text_Right)
		SpinGadget(#Size_Heigh, Largeur * 3, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Heigh, Size\Bottom - Size\top)
		
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Size(Type)
	Select Type
		Case 1
			Debug "Size 1"
			Size.RECT
			Size\top = GetGadgetState(#Size_Top)
			Size\Bottom = GetGadgetState(#Size_Bottom)
			Size\left = GetGadgetState(#Size_Left)
			Size\right = GetGadgetState(#Size_Right)
			SetWindowPos_(Window_Size, 0, Size\left, Size\top, Size\right - Size\left, Size\Bottom - Size\top, #SWP_NOACTIVATE)
			SetGadgetState(#Size_Width, Size\right - Size\left)
			SetGadgetState(#Size_Heigh, Size\Bottom - Size\top)
			; While WindowEvent() : Wend
		Case 2
			Debug "Size 2"
			Size.RECT
			Size\top = GetGadgetState(#Size_Top)
			Size\Bottom = Size\top + GetGadgetState(#Size_Heigh)
			Size\left = GetGadgetState(#Size_Left)
			Size\right = Size\left + GetGadgetState(#Size_Width)
			SetWindowPos_(Window_Size, 0, Size\left, Size\top, Size\right - Size\left, Size\Bottom - Size\top, #SWP_NOACTIVATE)
			SetGadgetState(#Size_Right, Size\right)
			SetGadgetState(#Size_Bottom, Size\Bottom)
			; While WindowEvent() : Wend
	EndSelect
	RedrawWindow_(Window_Size, 0, 0, #RDW_ERASE | #RDW_INVALIDATE)
	UpdateWindow_(Window_Size)
EndProcedure
Global Window_Style
Procedure Modifier_Style_Fenetre(hWnd.l)
	If IsWindow(2)
		CloseWindow(2)
	EndIf
	If OpenWindow(2, 0, 0, #FenetreModifier_L, 200, "Style", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Style = hWnd
		StickyWindow(2, 1)
		ListIconGadget(#Style_Liste, 0, 0, #FenetreModifier_L, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
		Element = -1
		ForEach Style()
			Element + 1
			AddGadgetItem(#Style_Liste, Element, Style()\Text)
			If Style & Style()\Value
				SetGadgetItemState(#Style_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#Style_Liste, Element, 1)
			Else
				SetGadgetItemData(#Style_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Style()
	Element = -1
	ForEach Style()
		Element + 1
		If GetGadgetItemState(#Style_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#Style_Liste, Element)
			SetGadgetItemData(#Style_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) | Style()\Value)
			Else
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) & ~Style()\Value)
			EndIf
			RedrawWindow_(Window_Style, 0, 0, #RDW_ERASE | #RDW_INVALIDATE)
			UpdateWindow_(Window_Style)
		EndIf
	Next
EndProcedure
Global Window_StyleEx
Procedure Modifier_StyleEx_Fenetre(hWnd.l)
	If IsWindow(3)
		CloseWindow(3)
	EndIf
	If OpenWindow(3, 0, 0, #FenetreModifier_L, 200, "Style Ex", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_StyleEx = hWnd
		StickyWindow(3, 1)
		ListIconGadget(#StyleEx_Liste, 0, 0, #FenetreModifier_L, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
		Element = -1
		ForEach StyleEx()
			Element + 1
			AddGadgetItem(#StyleEx_Liste, Element, StyleEx()\Text)
			If Style & StyleEx()\Value
				SetGadgetItemState(#StyleEx_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#StyleEx_Liste, Element, 1)
			Else
				SetGadgetItemData(#StyleEx_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_StyleEx()
	Element = -1
	ForEach StyleEx()
		Element + 1
		If GetGadgetItemState(#StyleEx_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#StyleEx_Liste, Element)
			SetGadgetItemData(#StyleEx_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) | StyleEx()\Value)
			Else
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) & ~StyleEx()\Value)
			EndIf
			RedrawWindow_(Window_StyleEx, 0, 0, #RDW_ERASE | #RDW_INVALIDATE)
			UpdateWindow_(Window_StyleEx)
		EndIf
	Next
EndProcedure




If OpenWindow(0, 0, 0, #Fenetre_L + 4 * #Fenetre_B, #Fenetre_H + 2 * #Fenetre_B, "Informations", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
	End
EndIf

UsePNGImageDecoder()
CatchImage(#Icone_Souris, ?Souris)
CatchImage(#Icone_Cadre, ?Cadre)
LoadFont(0, "Verdana", 6, #PB_Font_HighQuality)
For i = 1 To 99
	CopyImage(#Icone_Cadre, #Icone_Cadre + i)
	StartDrawing(ImageOutput(#Icone_Cadre + i))
		DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
		DrawingFont(FontID(0))
		Texte.s = Str(i)
		DrawText((16 - TextWidth(Texte)) / 2, (16 - TextHeight(Texte)) / 2, Texte, $C0000000)
	StopDrawing()
Next

CreateImage(#Figer, 16, 16, #PB_Image_Transparent | 32)
StartDrawing(ImageOutput(#Figer))
	DrawingMode(#PB_2DDrawing_AlphaBlend)
	Box(3, 2, 4, 12, $60000000)
	Box(9, 2, 4, 12, $60000000)
StopDrawing()
ButtonImageGadget(#Figer, #Fenetre_B, #Fenetre_B, 24, 24, ImageID(#Figer), #PB_Button_Toggle)
GadgetToolTip(#Figer, "Ne plus actualiser les informations")
ProgressBarGadget(#Progression, #Fenetre_B, #Fenetre_B * 2 + 24, 24, #Fenetre_H - 24 - #Fenetre_B, 0, #Temps_Max, #PB_ProgressBar_Vertical | #PB_ProgressBar_Smooth)
TreeGadget(#Arbre, 2 * #Fenetre_B + 24, #Fenetre_B, #Fenetre_L * 3 / 5 - 24, #Fenetre_H, #PB_Tree_AlwaysShowSelection | #PB_Tree_NoButtons)
TreeGadget(#Information, 3 * #Fenetre_B + #Fenetre_L * 3 / 5, #Fenetre_B, #Fenetre_L - #Fenetre_L * 3 / 5, #Fenetre_H, #PB_Tree_AlwaysShowSelection)

If CreatePopupImageMenu(#MenuArbre)
	MenuItem(#MenuArbre_Actualiser, "Actualiser")
	MenuBar()
	MenuItem(#MenuArbre_Afficher_ID, "Afficher l'ID")
	MenuItem(#MenuArbre_Afficher_Nom, "Afficher le nom")
	MenuItem(#MenuArbre_Afficher_Classe, "Afficher la classe")
	MenuBar()
	MenuItem(#MenuArbre_Exporter, "Exporter l'arbre")
EndIf
If CreatePopupImageMenu(#MenuDimension)
	MenuItem(#MenuDimension_Copier, "Copier")
	MenuBar()
	MenuItem(#MenuDimension_Modifier, "Editer")
EndIf
If CreatePopupImageMenu(#MenuStyle)
	MenuItem(#MenuStyle_Copier, "Copier")
	MenuBar()
	MenuItem(#MenuStyle_Modifier, "Editer")
EndIf
If CreatePopupImageMenu(#MenuStyleEtendu)
	MenuItem(#MenuStyleEtendu_Copier, "Copier")
	MenuBar()
	MenuItem(#MenuStyleEtendu_Modifier, "Editer")
EndIf
If CreatePopupImageMenu(#MenuID)
	MenuItem(#MenuID_Copier, "Copier")
EndIf
If CreatePopupImageMenu(#MenuClasse)
	MenuItem(#MenuClasse_Copier, "Copier")
EndIf

AddWindowTimer(0, 1, #Vitesse)

Arbre_Afficher\ID = 1
Arbre_Afficher\Nom = 1
Arbre_Afficher\Classe = 1

Repeat
	
	Event = WaitWindowEvent()
	
	Select EventWindow()
		Case 0
			Select Event
				Case #PB_Event_Timer
					Select EventTimer()
						Case 1
							Survol_Souris = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
							If Survol_Souris = Survol_Souris_Memoire And Figer = 0
								Temps + 1
								If Temps >= #Temps_Max * 1.5
									Temps = #Temps_Max
								EndIf
								If Temps = #Temps_Max
									Analyse_Window_hWnd = Survol_Souris
									Analyse(Analyse_Window_hWnd)
								EndIf
								SetGadgetState(#Progression, Temps)
							Else
								Temps = 0
								SetGadgetState(#Progression, Temps)
								Survol_Souris_Memoire = Survol_Souris
							EndIf
					EndSelect
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Figer
							Figer = GetGadgetState(#Figer)
						Case #Arbre
							Select EventType()
								Case #PB_EventType_RightClick
									MenuArbre_Afficher()
								Case #PB_EventType_LeftClick
									Position = GetGadgetState(#Arbre)
									If Position >= 0
										SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
										Informations(Arbre()\hWnd)
									EndIf
							EndSelect
						Case #Information
							Select EventType()
								Case #PB_EventType_RightClick
									Position = GetGadgetState(#Information)
									If Position >= 0
										Select GetGadgetItemData(#Information, Position)
											Case #MenuDimension
												DisplayPopupMenu(#MenuDimension, WindowID(0))
											Case #MenuStyle
												DisplayPopupMenu(#MenuStyle, WindowID(0))
											Case #MenuStyleEtendu
												DisplayPopupMenu(#MenuStyleEtendu, WindowID(0))
											Case #MenuTexte
												DisplayPopupMenu(#MenuTexte, WindowID(0))
											Case #MenuID
												DisplayPopupMenu(#MenuID, WindowID(0))
											Case #MenuClasse
												DisplayPopupMenu(#MenuClasse, WindowID(0))
										EndSelect
									EndIf
							EndSelect
					EndSelect
				Case #PB_Event_Menu
					Select EventMenu()
						Case #MenuArbre_Actualiser
							Analyse(Analyse_Window_hWnd)
						Case #MenuArbre_Afficher_ID
							Arbre_Afficher\ID = 1 - Arbre_Afficher\ID
							Arbre_Afficher(Analyse_Window_hWnd)
						Case #MenuArbre_Afficher_Nom
							Arbre_Afficher\Nom = 1 - Arbre_Afficher\Nom
							Arbre_Afficher(Analyse_Window_hWnd)
						Case #MenuArbre_Afficher_Classe
							Arbre_Afficher\Classe = 1 - Arbre_Afficher\Classe
							Arbre_Afficher(Analyse_Window_hWnd)
						Case #MenuArbre_Exporter
							Arbre_Exporter()
						Case #MenuID_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								SetClipboardText(Str(Arbre()\hWnd))
							EndIf
						Case #MenuClasse_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								SetClipboardText(Arbre()\Class)
							EndIf
						Case #MenuTexte_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								SetClipboardText(Arbre()\Text)
							EndIf
						Case #MenuDimension_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								GetWindowRect_(Arbre()\hWnd, WindowRect.RECT)
								Texte = "Declare WindowRect.RECT" + Chr(10)
								Texte + "WindowRect\left = " + Str(WindowRect\left) + Chr(10)
								Texte + "WindowRect\top = " + Str(WindowRect\top) + Chr(10)
								Texte + "WindowRect\right = " + Str(WindowRect\right) + Chr(10)
								Texte + "WindowRect\bottom = " + Str(WindowRect\Bottom)
								SetClipboardText(Texte)
							EndIf
						Case #MenuDimension_Modifier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								Modifier_Size_Fenetre(Arbre()\hWnd)
							EndIf
						Case #MenuStyle_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								Style = GetWindowLongPtr_(Arbre()\hWnd, #GWL_STYLE)
								Texte = ""
								ForEach Style()
									If Style & Style()\Value
										If Texte
											Texte + " | "
										EndIf
										Texte + Style()\Text
									EndIf
								Next
								SetClipboardText(Texte)
							EndIf
						Case #MenuStyle_Modifier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								Modifier_Style_Fenetre(Arbre()\hWnd)
							EndIf
						Case #MenuStyleEtendu_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								Style = GetWindowLongPtr_(Arbre()\hWnd, #GWL_EXSTYLE)
								Texte = ""
								ForEach StyleEx()
									If Style & StyleEx()\Value
										If Texte
											Texte + " | "
										EndIf
										Texte + StyleEx()\Text
									EndIf
								Next
								SetClipboardText(Texte)
							EndIf
						Case #MenuStyleEtendu_Modifier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre,Position))
								Modifier_StyleEx_Fenetre(Arbre()\hWnd)
							EndIf
					EndSelect
				Case #PB_Event_CloseWindow
					Quitter = 1
			EndSelect
			
		Case 1 ;- Modifier Size
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(1)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Size_Right, #Size_Bottom
							Modifier_Size(1)
						Case #Size_Left, #Size_Top, #Size_Width, #Size_Heigh
							Modifier_Size(2)
					EndSelect
					
			EndSelect
			
		Case 2 ;- Modifier Style
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(2)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Style_Liste
							Modifier_Style()
					EndSelect
			EndSelect
			
		Case 3 ;- Modifier Style Ex
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(3)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #StyleEx_Liste
							Modifier_StyleEx()
					EndSelect
			EndSelect
			
	EndSelect
	
Until Quitter


DataSection
	Souris:
	Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$10000000,$10000000,$00000608,$FFF31F00,$00000061,$59487009,$0B000073,$0B000013
	Data.l $9A000113,$0000189C,$48632000,$00004D52,$0000257A,$00008380,$0000FFF9,$0000E980,$00003075,$000060EA,$0000983A,$5F926F17
	Data.l $000046C5,$44493501,$DA785441,$4ABDD3A4,$05144103,$A64663E0,$1734FCD6,$0A40EB04,$48194841,$B52B5F6A,$D83BE04F,$04692A98
	Data.l $04D25161,$B24541A2,$05D835C4,$B992585C,$C4246C7B,$E09AECCD,$7EE774C0,$0733B81C,$43AFF124,$958D7D72,$59A5630F,$94CECD94
	Data.l $116EB93C,$F78367F2,$A5634E68,$0D7C43EF,$CC9200B6,$F2067643,$5500BD90,$7ECE1865,$AA033B21,$C56AD5CA,$F2F84924,$F646B6FA
	Data.l $61249202,$2C5CC71C,$9F8F1C16,$AEE49AB6,$A4534D31,$85550A69,$8AAA0E73,$878CB56A,$ADF6D7A0,$0E6C0BD8,$9CE0E73B,$8C72A543
	Data.l $36EBDBBB,$FE66EE80,$2AA80B30,$F9F31554,$0AB56A27,$F4E4E000,$8EF7907C,$36603E4A,$B46F508B,$1F5E9BE2,$200039CE,$465D4B80
	Data.l $9D465D1D,$993897C2,$F958D33C,$C69A5632,$430C28CA,$8D3DC106,$266F9195,$6F5C60DB,$1D0062B4,$8001465D,$423870E9,$00047CB9
	Data.l $A2E56353,$B4FC2FF0,$58CAAF58,$D1E56311,$5632B958,$9259B2CE,$FC001EF8,$02A88537,$00911768,$49000000,$AE444E45
	Data.b $42,$60,$82
	Cadre:
	Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$10000000,$10000000,$00000608,$FFF31F00,$00000061,$59487009,$0B000073,$0B000013
	Data.l $9A000113,$0000189C,$48632000,$00004D52,$0000257A,$00008380,$0000FFF9,$0000E980,$00003075,$000060EA,$0000983A,$5F926F17
	Data.l $000046C5,$44493F01,$DA785441,$4E3191CC,$86144102,$3B3379FF,$5876409B,$B1B70485,$1EF4D432,$CF4ECA81,$3609C160,$C22B601E
	Data.l $E1296C05,$20925B02,$12102495,$3502A56D,$D9618561,$52A40B19,$57E36009,$8AFBE6BD,$386C31FF,$A00D7001,$E2EF75F2,$4008C015
	Data.l $00BBC00B,$0C200670,$56B2F0C3,$41045DAB,$80421790,$B4CDF631,$9D3A62D6,$0F1C7126,$39FAF5EB,$DC002680,$98345146,$B976264C
	Data.l $CB2CDA5C,$63186FEC,$B6BD7AEC,$B6C2C58B,$0007EDDB,$1CD00037,$6B5AC78F,$18C5F76D,$BAD6B563,$11DD2A54,$2C58A700,$F604214A
	Data.l $29063185,$E54A54A5,$9CE58008,$28708883,$DB46739C,$FE10B1E2,$D808FFC8,$D8C66563,$88EC7026,$57CC2FDB,$543E95AB,$F534D34E
	Data.l $00232F3C,$F7AF5EC3,$DFA06878,$850A8FEF,$F00733C2,$F274E9D2,$17356AD5,$94A9C104,$9312EE52,$76E8F924,$A34683BB,$3DD11311
	Data.l $4A0F3CF3,$972E5529,$AFDF7CAF,$13EBAEB8,$08A38FD1,$38E39821,$93F9CE73,$9B35A631,$073EDECD,$B0BA4B00,$91A8685B,$000000CA
	Data.l $4E454900,$6042AE44
	Data.b $82
EndDataSection

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)]
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Récupérer des informations sur les fenêtres

Message par dayvid »

Je teste, merci :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Récupérer des informations sur les fenêtres

Message par Kwai chang caine »

Tu va trouver que je me répète, mais vraiment tes codes c'est toujours du velours
Marche nickel sur XP PRO, juste le pointeur de la souris qui reste "gravé" dans la fenêtre de gauche et pas toujours au même endroit 8O

Encore merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Récupérer des informations sur les fenêtres

Message par Le Soldat Inconnu »

Nouvelle mise à jour :

- Ajout du numéro du process et du nom du programme dans les informations de la fenêtre mères
- Ajout d'un boutons pour scanner toutes les fenêtres ouvertes
- Qlques petites corrections

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4

; Explication du programme :
; Obtenir des informations sur la fenêtre sous la souris, ainsi que toutes les fenêtres parentes.

Structure Style_Info
	Value.l
	Text.s
EndStructure
Global NewList Style.Style_Info()
;{ Liste des styles
AddElement(Style()) : Style()\Value = #WS_BORDER : Style()\Text = "#WS_BORDER"
AddElement(Style()) : Style()\Value = #WS_CAPTION : Style()\Text = "#WS_CAPTION"
AddElement(Style()) : Style()\Value = #WS_CHILD : Style()\Text = "#WS_CHILD"
AddElement(Style()) : Style()\Value = #WS_CHILDWINDOW : Style()\Text = "#WS_CHILDWINDOW"
AddElement(Style()) : Style()\Value = #WS_CLIPCHILDREN : Style()\Text = "#WS_CLIPCHILDREN"
AddElement(Style()) : Style()\Value = #WS_CLIPSIBLINGS : Style()\Text = "#WS_CLIPSIBLINGS"
AddElement(Style()) : Style()\Value = #WS_DISABLED : Style()\Text = "#WS_DISABLED"
AddElement(Style()) : Style()\Value = #WS_DLGFRAME : Style()\Text = "#WS_DLGFRAME"
AddElement(Style()) : Style()\Value = #WS_GROUP : Style()\Text = "#WS_GROUP"
AddElement(Style()) : Style()\Value = #WS_HSCROLL : Style()\Text = "#WS_HSCROLL"
AddElement(Style()) : Style()\Value = #WS_ICONIC : Style()\Text = "#WS_ICONIC"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZE : Style()\Text = "#WS_MAXIMIZE"
AddElement(Style()) : Style()\Value = #WS_MAXIMIZEBOX : Style()\Text = "#WS_MAXIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_MINIMIZE : Style()\Text = "#WS_MINIMIZE"
AddElement(Style()) : Style()\Value = #WS_MINIMIZEBOX : Style()\Text = "#WS_MINIMIZEBOX"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPED : Style()\Text = "#WS_OVERLAPPED"
AddElement(Style()) : Style()\Value = #WS_OVERLAPPEDWINDOW : Style()\Text = "#WS_OVERLAPPEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_POPUP : Style()\Text = "#WS_POPUP"
AddElement(Style()) : Style()\Value = #WS_POPUPWINDOW : Style()\Text = "#WS_POPUPWINDOW"
AddElement(Style()) : Style()\Value = #WS_SIZEBOX : Style()\Text = "#WS_SIZEBOX"
AddElement(Style()) : Style()\Value = #WS_SYSMENU : Style()\Text = "#WS_SYSMENU"
AddElement(Style()) : Style()\Value = #WS_TABSTOP : Style()\Text = "#WS_TABSTOP"
AddElement(Style()) : Style()\Value = #WS_THICKFRAME : Style()\Text = "#WS_THICKFRAME"
AddElement(Style()) : Style()\Value = #WS_TILED : Style()\Text = "#WS_TILED"
AddElement(Style()) : Style()\Value = #WS_TILEDWINDOW : Style()\Text = "#WS_TILEDWINDOW"
AddElement(Style()) : Style()\Value = #WS_VISIBLE : Style()\Text = "#WS_VISIBLE"
AddElement(Style()) : Style()\Value = #WS_VSCROLL : Style()\Text = "#WS_VSCROLL"
;} 

Global NewList StyleEx.Style_Info()
;{ Liste des styles étendus
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_ACCEPTFILES : StyleEx()\Text = "#WS_EX_ACCEPTFILES"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_APPWINDOW : StyleEx()\Text = "#WS_EX_APPWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CLIENTEDGE : StyleEx()\Text = "#WS_EX_CLIENTEDGE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_COMPOSITED : StyleEx()\Text = "#WS_EX_COMPOSITED"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CONTEXTHELP : StyleEx()\Text = "#WS_EX_CONTEXTHELP"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_CONTROLPARENT : StyleEx()\Text = "#WS_EX_CONTROLPARENT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_DLGMODALFRAME : StyleEx()\Text = "#WS_EX_DLGMODALFRAME"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYERED : StyleEx()\Text = "#WS_EX_LAYERED"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LAYOUTRTL : StyleEx()\Text = "#WS_EX_LAYOUTRTL"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_LTRREADING : StyleEx()\Text = "#WS_EX_LTRREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_MDICHILD : StyleEx()\Text = "#WS_EX_MDICHILD"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOACTIVATE : StyleEx()\Text = "#WS_EX_NOACTIVATE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOINHERITLAYOUT : StyleEx()\Text = "#WS_EX_NOINHERITLAYOUT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_NOPARENTNOTIFY : StyleEx()\Text = "#WS_EX_NOPARENTNOTIFY"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_OVERLAPPEDWINDOW : StyleEx()\Text = "#WS_EX_OVERLAPPEDWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_PALETTEWINDOW : StyleEx()\Text = "#WS_EX_PALETTEWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_RTLREADING : StyleEx()\Text = "#WS_EX_RTLREADING"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_STATICEDGE : StyleEx()\Text = "#WS_EX_STATICEDGE"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOOLWINDOW : StyleEx()\Text = "#WS_EX_TOOLWINDOW"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TOPMOST : StyleEx()\Text = "#WS_EX_TOPMOST"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_TRANSPARENT : StyleEx()\Text = "#WS_EX_TRANSPARENT"
AddElement(StyleEx()) : StyleEx()\Value = #WS_EX_WINDOWEDGE : StyleEx()\Text = "#WS_EX_WINDOWEDGE"
;} 

Enumeration
	#Arbre
	#Progression
	#Figer
	#Information
	#Rechercher
	#MenuArbre
	#MenuArbre_Afficher_ID
	#MenuArbre_Afficher_Nom
	#MenuArbre_Afficher_Classe
	#MenuArbre_Actualiser
	#MenuArbre_Exporter
	#MenuInformation
	#MenuInformation_Editer
	#MenuInformation_Copier
	#Icone_Souris
	#Icone_Loupe
	#Icone_CadreDebut
	#Icone_Cadre = #Icone_CadreDebut + 100
	#Icone_CadreFin = #Icone_Cadre + 100
	#MenuStyle
	#MenuStyle_Modifier
	#MenuStyle_Copier
	#MenuStyleEtendu
	#MenuStyleEtendu_Modifier
	#MenuStyleEtendu_Copier
	#MenuDimension
	#MenuDimension_Modifier
	#MenuDimension_Copier
	#MenuTexte
	#MenuTexte_Modifier
	#MenuTexte_Copier
	#MenuID
	#MenuID_Copier
	#MenuPId
	#MenuPId_Copier
	#MenuPId_Lister
	#MenuPName
	#MenuPName_Copier
	#MenuClasse
	#MenuClasse_Copier
	#Size_Left
	#Size_Right
	#Size_Top
	#Size_Bottom
	#Size_Width
	#Size_Heigh
	#Style_Liste
	#StyleEx_Liste
EndEnumeration

#Rafraichissement = 1000
#Vitesse = 50
#Temps_Max = #Rafraichissement / #Vitesse

#Fenetre_L = 600
#Fenetre_H = 200
#Fenetre_B = 2

#FenetreModifier_L = 300

Structure Arbre_Afficher_Info
	ID.b
	Nom.b
	Classe.b
EndStructure
Global Arbre_Afficher.Arbre_Afficher_Info

Procedure.l SetTreePos(Gadget.l, Position.l)
	ProcedureReturn SetScrollPos_(GadgetID(Gadget), #SB_VERT, Position, 1)
EndProcedure

Procedure.s GetWindowText(hWnd, SendMessage = 0)
	Protected Text.s
	*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
	If *Memoire
		If SendMessage = 0
			Result = GetWindowText_(hWnd, *Memoire, #MAX_PATH)
			If Result > 0 And Result < #MAX_PATH - 1
				Text = PeekS(*Memoire, Result)
			EndIf
		Else
			Result = SendMessage_(hWnd, #WM_GETTEXT, #MAX_PATH, *Memoire)
			If Result > 0 And Result < #MAX_PATH - 1
				Text = PeekS(*Memoire, Result)
			EndIf
		EndIf
		FreeMemory(*Memoire)
	EndIf
	ProcedureReturn Text
EndProcedure
Procedure.s GetWindowClass(hWnd)
	Protected Class.s
	*Memoire = AllocateMemory(#MAX_PATH * StringByteLength(" "))
	If *Memoire
		Result = GetClassName_(hWnd, *Memoire, #MAX_PATH)
		If Result > 0 And Result < #MAX_PATH - 1
			Class = PeekS(*Memoire, Result)
		EndIf
		FreeMemory(*Memoire)
	EndIf
	ProcedureReturn Class
EndProcedure
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
			CompilerIf #PB_Compiler_Unicode
				ProcessEntry\dwSize = SizeOf(PROCESSENTRY32)
				If CallFunction(Process32, "Process32FirstW", Snapshot, @ProcessEntry)
					Repeat
						If ProcessID = ProcessEntry\th32ProcessID
							ProgramfileName = PeekS(@ProcessEntry\szExeFile)
							Break
						EndIf
					Until CallFunction(Process32, "Process32NextW", Snapshot, @ProcessEntry) = 0
				EndIf
			CompilerElse
				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
			CompilerEndIf
			CloseHandle_(Snapshot)
		EndIf
		CloseLibrary(Process32)
	EndIf
	ProcedureReturn ProgramfileName
EndProcedure

Structure Arbre_Info
	hWnd.l
	PId.l
	Parent.l
	Text.s
	Class.s
EndStructure
Global NewList Arbre.Arbre_Info()
Procedure Arbre_Exporter()
	
	Fichier.s = SaveFileRequester("Exporter", "", "Fichier CSV|*.csv|Fichier texte|*.txt", 0)
	If Fichier
		If CheckFilename(GetFilePart(Fichier))
			Select SelectedFilePattern()
				Case 0
					If LCase(GetExtensionPart(Fichier)) <> "csv"
						Fichier + ".csv"
					EndIf
				Case 1
					If LCase(GetExtensionPart(Fichier)) <> "txt"
						Fichier + ".txt"
					EndIf
			EndSelect
			If FileSize(Fichier) = -1 Or MessageRequester("Exporter", "Remplacer le fichier existant ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
				
				If CreateFile(0, Fichier)
					
					WriteStringFormat(0, #PB_Unicode)
					WriteStringN(0, "Niveau" + Chr(9) + "ID" + Chr(9) + "Nom" + Chr(9) + "Classe", #PB_Unicode)
					WriteStringN(0, "", #PB_Unicode)
					
					For i = 0 To CountGadgetItems(#Arbre) - 1
						SelectElement(Arbre(), GetGadgetItemData(#Arbre, i))
						WriteStringN(0, Str(GetGadgetItemAttribute(#Arbre, i, #PB_Tree_SubLevel)) + Chr(9) + Str(Arbre()\hWnd) + Chr(9) + Arbre()\Text + Chr(9) + Arbre()\Class, #PB_Unicode)
					Next
					
					CloseFile(0)
				Else
					MessageRequester("Exporter", "Echec de la création du fichier")
				EndIf
				
			EndIf
			
		Else
			MessageRequester("Exporter", "Nom de fichier incorrect")
		EndIf
		
	EndIf
	
EndProcedure
Procedure Arbre_Recherche(hWnd, lParam)
	AddElement(Arbre())
	Arbre()\hWnd = hWnd
	Arbre()\Parent = GetParent_(hWnd)
	Arbre()\Text = GetWindowText(hWnd)
	If Arbre()\Text = ""
		Arbre()\Text = GetWindowText(hWnd, 1)
	EndIf
	Arbre()\Class = GetWindowClass(hWnd)
	GetWindowThreadProcessId_(hWnd, @Arbre()\PId)
	ProcedureReturn #True
EndProcedure
Procedure Arbre_Afficher(Selection, hWnd = 0, Niveau = 0)
	If Niveau = 0
		ClearGadgetItems(#Arbre)
		LockWindowUpdate_(WindowID(0))
	EndIf
	ForEach Arbre()
		If Arbre()\hWnd = hWnd Or (hWnd = 0 And Arbre()\Parent = 0)
			If Arbre()\hWnd = Selection
				Image = ImageID(#Icone_Souris)
			Else
				i = 1
				Window = GetParent_(Selection)
				While Window <> Arbre()\hWnd And Window <> 0
					Window = GetParent_(Window)
					i + 1
				Wend
				If Window
					Image = ImageID(#Icone_Cadre + i)
				Else
					i = -1
					Window = GetParent_(Arbre()\hWnd)
					While Window <> Selection And Window <> 0
						Window = GetParent_(Window)
						i - 1
					Wend
					If Window
						Image = ImageID(#Icone_Cadre + i)
					Else
						Image = ImageID(#Icone_Cadre)
					EndIf
				EndIf
			EndIf
			Texte.s = ""
			If Arbre_Afficher\Nom
				Texte + Arbre()\Text
			EndIf
			If Arbre()\Class And Arbre_Afficher\Classe
				If Texte
					Texte + " "
				EndIf
				Texte + "[ " + Arbre()\Class + " ]"
			EndIf
			If Arbre_Afficher\ID
				If Texte
					Texte + " = "
				EndIf
				Texte + Str(Arbre()\hWnd)
			EndIf
			AddGadgetItem(#Arbre, -1, Texte, Image, Niveau)
			SetGadgetItemData(#Arbre, CountGadgetItems(#Arbre) - 1, ListIndex(Arbre()))
			*ElementPrecedent.Arbre_Info = @Arbre()
			ForEach Arbre()
				If Arbre()\Parent = *ElementPrecedent\hWnd
					*ElementActuel.Arbre_Info = @Arbre()
					Arbre_Afficher(Selection, Arbre()\hWnd, Niveau + 1)
					ChangeCurrentElement(Arbre(), *ElementActuel)
				EndIf
			Next
			ChangeCurrentElement(Arbre(), *ElementPrecedent)
		EndIf
	Next
	If Niveau = 0
		ii = 0
		For i = 0 To CountGadgetItems(#Arbre) - 1
			SetGadgetItemState(#Arbre, i, #PB_Tree_Expanded)
			SelectElement(Arbre(), GetGadgetItemData(#Arbre, i))
			If Arbre()\hWnd = Selection
				ii = i
			EndIf
		Next
		SetGadgetState(#Arbre, ii)
		LockWindowUpdate_(0)
		SetTreePos(#Arbre, ii - 5)
	EndIf
EndProcedure
Procedure Informations(hWnd)
	Protected Size.RECT, Size_Parent.POINT
	LockWindowUpdate_(WindowID(0))
	
	ClearGadgetItems(#Information)
	
	Niveau = 0
	Element = -1
	
	hWnd_Parent = GetParent_(hWnd)
	
	Element + 1 : AddGadgetItem(#Information, Element, "hWnd = " + Str(hWnd), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuID)
	
	Text1.s = GetWindowText(hWnd)
	Text2.s = GetWindowText(hWnd, 1)
	If Text1 Or Text2
		Element + 1 :
		If Text1 = Text2
			AddGadgetItem(#Information, Element, "Texte = " + Text1, 0, Niveau)
		Else
			AddGadgetItem(#Information, Element, "Texte", 0, Niveau)
		EndIf
		SetGadgetItemData(#Information, Element, #MenuTexte)
	EndIf
	
	Niveau + 1
	If Text1
		Element + 1 : AddGadgetItem(#Information, Element, "GetWindowText_(...) = " + Text1, 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuTexte)
	EndIf
	If Text2
		Element + 1 : AddGadgetItem(#Information, Element, "SendMessage_(...) = " + Text2, 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuTexte)
	EndIf
	If (Text1 And Text2 = "") Or (Text1 = "" And Text2)
		SetGadgetItemState(#Information, Element - 1, #PB_Tree_Collapsed)
	ElseIf Text1 And Text2
		SetGadgetItemState(#Information, Element - 2, #PB_Tree_Collapsed)
	EndIf
	
	Niveau - 1
	Class.s = GetWindowClass(hWnd)
	If Class
		Element + 1 : AddGadgetItem(#Information, Element, "Classe = " + Class, 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuClasse)
	EndIf
	
	If hWnd_Parent = 0
		GetWindowThreadProcessId_(hWnd, @PId)
		Element + 1 : AddGadgetItem(#Information, Element, "Process ID = " + Str(PId), 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuPId)
		Element + 1 : AddGadgetItem(#Information, Element, "Process Name = " + ProgramfileNameFromWindow(hWnd), 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuPName)
	EndIf
	
	Element + 1 : AddGadgetItem(#Information, Element, "Dimension", 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	GetWindowRect_(hWnd, Size.RECT)
	If hWnd_Parent <> 0
		Size_Parent\x = 0
		Size_Parent\y = 0
		ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
		Size\left - Size_Parent\x
		Size\right - Size_Parent\x
		Size\top - Size_Parent\y
		Size\Bottom - Size_Parent\y
	EndIf
	Niveau + 1
	Element + 1 : AddGadgetItem(#Information, Element, "X = " + Str(Size\left) + " / Y = " + Str(Size\top), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	SetGadgetItemState(#Information, Element - 1, #PB_Tree_Expanded)
	Element + 1 : AddGadgetItem(#Information, Element, "Largeur = " + Str(Size\right - Size\left) + " / Hauteur = " + Str(Size\Bottom - Size\top), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	
	Size_Parent\x = 0
	Size_Parent\y = 0
	ClientToScreen_(hWnd, Size_Parent.POINT)
	Element + 1 : AddGadgetItem(#Information, Element, "ClientToScreen_(...)", 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Niveau + 1
	Element + 1 : AddGadgetItem(#Information, Element, "X = " + Str(Size_Parent\x), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Y = " + Str(Size_Parent\y), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	
	Niveau - 1
	GetWindowRect_(hWnd, Size.RECT)
	Element + 1 : AddGadgetItem(#Information, Element, "GetWindowRect_(...)", 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Niveau + 1
	Element + 1 : AddGadgetItem(#Information, Element, "Left = " + Str(Size\left), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Right = " + Str(Size\right), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Top = " + Str(Size\top), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	Element + 1 : AddGadgetItem(#Information, Element, "Bottom = " + Str(Size\Bottom), 0, Niveau)
	SetGadgetItemData(#Information, Element, #MenuDimension)
	
	Niveau - 2
	Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
	If Style
		Element + 1 : AddGadgetItem(#Information, Element, "Style", 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuStyle)
		Niveau + 1
		ForEach Style()
			If Style & Style()\Value
				Element + 1 : AddGadgetItem(#Information, Element, Style()\Text, 0, Niveau)
				SetGadgetItemData(#Information, Element, #MenuStyle)
			EndIf
		Next
		Niveau - 1
	EndIf
	
	Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
	If Style
		Element + 1 : AddGadgetItem(#Information, Element, "Style étendu", 0, Niveau)
		SetGadgetItemData(#Information, Element, #MenuStyleEtendu)
		Niveau + 1
		ForEach StyleEx()
			If Style & StyleEx()\Value
				Element + 1 : AddGadgetItem(#Information, Element, StyleEx()\Text, 0, Niveau)
				SetGadgetItemData(#Information, Element, #MenuStyleEtendu)
			EndIf
		Next
		Niveau - 1
	EndIf
	
	LockWindowUpdate_(0)
EndProcedure
Procedure Analyse(hWnd)
	If IsWindow_(hWnd) = 0
		ProcedureReturn
	EndIf
	
	ClearList(Arbre())
	Window = GetAncestor_(hWnd, 2)
	
	EnumChildWindows_(Window, @Arbre_Recherche(), 0) ; Recherche toutes les fenêtres enfants
	Arbre_Recherche(Window, 0) ; Ajoute la fenêtre principale
	
	Arbre_Afficher(hWnd)
	Informations(hWnd)
	
EndProcedure
Procedure Liste(PId = 0)
	
	ClearList(Arbre())
	hWnd.l = FindWindow_(0, 0)
	While hWnd <> 0
		Arbre_Recherche(hWnd, 0)
		If PId And Arbre()\PId <> PId
			DeleteElement(Arbre())
		EndIf
		hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
	Wend
	
	Arbre_Afficher(0)
	Informations(0)
	
EndProcedure


Procedure MenuArbre_Afficher()
	Somme = Arbre_Afficher\ID + Arbre_Afficher\Nom + Arbre_Afficher\Classe
	SetMenuItemState(#MenuArbre, #MenuArbre_Afficher_ID, Arbre_Afficher\ID)
	SetMenuItemState(#MenuArbre, #MenuArbre_Afficher_Nom, Arbre_Afficher\Nom)
	SetMenuItemState(#MenuArbre, #MenuArbre_Afficher_Classe, Arbre_Afficher\Classe)
	If Somme = 1
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_ID, Arbre_Afficher\ID)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Nom, Arbre_Afficher\Nom)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Classe, Arbre_Afficher\Classe)
	Else
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_ID, 0)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Nom, 0)
		DisableMenuItem(#MenuArbre, #MenuArbre_Afficher_Classe, 0)
	EndIf
	DisplayPopupMenu(#MenuArbre, WindowID(0))
EndProcedure

Global Window_Size
Procedure Modifier_Size_Fenetre(hWnd.l)
	If IsWindow(1)
		CloseWindow(1)
	EndIf
	If OpenWindow(1, 0, 0, #FenetreModifier_L, 24 * 3, "Size", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Size = hWnd
		StickyWindow(1, 1)
		Largeur = #FenetreModifier_L / 4
		GetWindowRect_(hWnd, Size.RECT)
		hWnd_Parent = GetParent_(hWnd)
		If hWnd_Parent
			ClientToScreen_(hWnd_Parent, Size_Parent.POINT)
			Size\left - Size_Parent\x
			Size\right - Size_Parent\x
			Size\top - Size_Parent\y
			Size\Bottom - Size_Parent\y
		EndIf
		TextGadget(#PB_Any, 0, 0, Largeur, 24, "Left ", #PB_Text_Right)
		SpinGadget(#Size_Left, Largeur, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Left, Size\left)
		TextGadget(#PB_Any, Largeur * 2, 0, Largeur, 24, "Right ", #PB_Text_Right)
		SpinGadget(#Size_Right, Largeur * 3, 0, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Right, Size\right)
		TextGadget(#PB_Any, 0, 24, Largeur, 24, "Top ", #PB_Text_Right)
		SpinGadget(#Size_Top, Largeur, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Top, Size\top)
		TextGadget(#PB_Any, Largeur * 2, 24, Largeur, 24, "Bottom ", #PB_Text_Right)
		SpinGadget(#Size_Bottom, Largeur * 3, 24, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Bottom, Size\Bottom)
		TextGadget(#PB_Any, 0, 24 * 2, Largeur, 24, "Width ", #PB_Text_Right)
		SpinGadget(#Size_Width, Largeur, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Width, Size\right - Size\left)
		TextGadget(#PB_Any, Largeur * 2, 24 * 2, Largeur, 24, "Height ", #PB_Text_Right)
		SpinGadget(#Size_Heigh, Largeur * 3, 24 * 2, Largeur, 24, -10000, 10000, #PB_Spin_Numeric)
		SetGadgetState(#Size_Heigh, Size\Bottom - Size\top)
		
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Size(Type)
	Select Type
		Case 1
			Debug "Size 1"
			Size.RECT
			Size\top = GetGadgetState(#Size_Top)
			Size\Bottom = GetGadgetState(#Size_Bottom)
			Size\left = GetGadgetState(#Size_Left)
			Size\right = GetGadgetState(#Size_Right)
			SetWindowPos_(Window_Size, 0, Size\left, Size\top, Size\right - Size\left, Size\Bottom - Size\top, #SWP_NOACTIVATE)
			SetGadgetState(#Size_Width, Size\right - Size\left)
			SetGadgetState(#Size_Heigh, Size\Bottom - Size\top)
			; While WindowEvent() : Wend
		Case 2
			Debug "Size 2"
			Size.RECT
			Size\top = GetGadgetState(#Size_Top)
			Size\Bottom = Size\top + GetGadgetState(#Size_Heigh)
			Size\left = GetGadgetState(#Size_Left)
			Size\right = Size\left + GetGadgetState(#Size_Width)
			SetWindowPos_(Window_Size, 0, Size\left, Size\top, Size\right - Size\left, Size\Bottom - Size\top, #SWP_NOACTIVATE)
			SetGadgetState(#Size_Right, Size\right)
			SetGadgetState(#Size_Bottom, Size\Bottom)
			; While WindowEvent() : Wend
	EndSelect
	RedrawWindow_(Window_Size, 0, 0, #RDW_ERASE | #RDW_INVALIDATE)
	UpdateWindow_(Window_Size)
EndProcedure
Global Window_Style
Procedure Modifier_Style_Fenetre(hWnd.l)
	If IsWindow(2)
		CloseWindow(2)
	EndIf
	If OpenWindow(2, 0, 0, #FenetreModifier_L, 200, "Style", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_Style = hWnd
		StickyWindow(2, 1)
		ListIconGadget(#Style_Liste, 0, 0, #FenetreModifier_L, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_STYLE)
		Element = -1
		ForEach Style()
			Element + 1
			AddGadgetItem(#Style_Liste, Element, Style()\Text)
			If Style & Style()\Value
				SetGadgetItemState(#Style_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#Style_Liste, Element, 1)
			Else
				SetGadgetItemData(#Style_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_Style()
	Element = -1
	ForEach Style()
		Element + 1
		If GetGadgetItemState(#Style_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#Style_Liste, Element)
			SetGadgetItemData(#Style_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) | Style()\Value)
			Else
				SetWindowLongPtr_(Window_Style, #GWL_STYLE, GetWindowLongPtr_(Window_Style, #GWL_STYLE) & ~Style()\Value)
			EndIf
			RedrawWindow_(Window_Style, 0, 0, #RDW_ERASE | #RDW_INVALIDATE)
			UpdateWindow_(Window_Style)
		EndIf
	Next
EndProcedure
Global Window_StyleEx
Procedure Modifier_StyleEx_Fenetre(hWnd.l)
	If IsWindow(3)
		CloseWindow(3)
	EndIf
	If OpenWindow(3, 0, 0, #FenetreModifier_L, 200, "Style Ex", #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0))
		Window_StyleEx = hWnd
		StickyWindow(3, 1)
		ListIconGadget(#StyleEx_Liste, 0, 0, #FenetreModifier_L, 200, "Style de le fenêtre", 200 - 24, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #LVS_NOCOLUMNHEADER)
		Style = GetWindowLongPtr_(hWnd, #GWL_EXSTYLE)
		Element = -1
		ForEach StyleEx()
			Element + 1
			AddGadgetItem(#StyleEx_Liste, Element, StyleEx()\Text)
			If Style & StyleEx()\Value
				SetGadgetItemState(#StyleEx_Liste, Element, #PB_ListIcon_Checked)
				SetGadgetItemData(#StyleEx_Liste, Element, 1)
			Else
				SetGadgetItemData(#StyleEx_Liste, Element, 0)
			EndIf
		Next
		While WindowEvent() : Wend
	EndIf
EndProcedure
Procedure Modifier_StyleEx()
	Element = -1
	ForEach StyleEx()
		Element + 1
		If GetGadgetItemState(#StyleEx_Liste, Element) & #PB_ListIcon_Checked
			Selection = 1
		Else
			Selection = 0
		EndIf
		If Selection <> GetGadgetItemData(#StyleEx_Liste, Element)
			SetGadgetItemData(#StyleEx_Liste, Element, Selection)
			If Selection
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) | StyleEx()\Value)
			Else
				SetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE, GetWindowLongPtr_(Window_StyleEx, #GWL_EXSTYLE) & ~StyleEx()\Value)
			EndIf
			RedrawWindow_(Window_StyleEx, 0, 0, #RDW_ERASE | #RDW_INVALIDATE)
			UpdateWindow_(Window_StyleEx)
		EndIf
	Next
EndProcedure




If OpenWindow(0, 0, 0, #Fenetre_L + 4 * #Fenetre_B, #Fenetre_H + 2 * #Fenetre_B, "Informations", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
	End
EndIf

UsePNGImageDecoder()
CatchImage(#Icone_Souris, ?Souris)
CatchImage(#Icone_Cadre, ?Cadre)
CatchImage(#Icone_Loupe, ?Loupe)
LoadFont(0, "Verdana", 6, #PB_Font_HighQuality)
For i = -99 To 99
	If i <> 0
		CopyImage(#Icone_Cadre, #Icone_Cadre + i)
		StartDrawing(ImageOutput(#Icone_Cadre + i))
			DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
			DrawingFont(FontID(0))
			Texte.s = Str(Abs(i))
			If i > 0
				DrawText((16 - TextWidth(Texte)) / 2,(16 - TextHeight(Texte)) / 2, Texte, $D0000000)
			Else
				DrawText((16 - TextWidth(Texte)) / 2,(16 - TextHeight(Texte)) / 2, Texte, $80000000)
			EndIf
		StopDrawing()
	EndIf
Next

CreateImage(#Figer, 16, 16, #PB_Image_Transparent | 32)
StartDrawing(ImageOutput(#Figer))
	DrawingMode(#PB_2DDrawing_AlphaBlend)
	Box(3, 2, 4, 12, $60000000)
	Box(9, 2, 4, 12, $60000000)
StopDrawing()
ButtonImageGadget(#Figer, #Fenetre_B, #Fenetre_B, 24, 24, ImageID(#Figer), #PB_Button_Toggle)
GadgetToolTip(#Figer, "Ne plus actualiser les informations")
ProgressBarGadget(#Progression, #Fenetre_B, #Fenetre_B * 2 + 24, 24, #Fenetre_H - 24 - 24 - 8 - #Fenetre_B, 0, #Temps_Max, #PB_ProgressBar_Vertical | #PB_ProgressBar_Smooth)
ButtonImageGadget(#Rechercher, #Fenetre_B, #Fenetre_B + #Fenetre_H - 24, 24, 24, ImageID(#Icone_Loupe))
GadgetToolTip(#Rechercher, "Lister toutes les fenêtres")
TreeGadget(#Arbre, 2 * #Fenetre_B + 24, #Fenetre_B, #Fenetre_L * 3 / 5 - 24, #Fenetre_H, #PB_Tree_AlwaysShowSelection | #PB_Tree_NoButtons)
TreeGadget(#Information, 3 * #Fenetre_B + #Fenetre_L * 3 / 5, #Fenetre_B, #Fenetre_L - #Fenetre_L * 3 / 5, #Fenetre_H, #PB_Tree_AlwaysShowSelection)

If CreatePopupImageMenu(#MenuArbre)
	MenuItem(#MenuArbre_Actualiser, "Actualiser")
	MenuBar()
	MenuItem(#MenuArbre_Afficher_ID, "Afficher l'ID")
	MenuItem(#MenuArbre_Afficher_Nom, "Afficher le nom")
	MenuItem(#MenuArbre_Afficher_Classe, "Afficher la classe")
	MenuBar()
	MenuItem(#MenuArbre_Exporter, "Exporter l'arbre")
EndIf
If CreatePopupImageMenu(#MenuDimension)
	MenuItem(#MenuDimension_Copier, "Copier")
	MenuBar()
	MenuItem(#MenuDimension_Modifier, "Editer")
EndIf
If CreatePopupImageMenu(#MenuStyle)
	MenuItem(#MenuStyle_Copier, "Copier")
	MenuBar()
	MenuItem(#MenuStyle_Modifier, "Editer")
EndIf
If CreatePopupImageMenu(#MenuStyleEtendu)
	MenuItem(#MenuStyleEtendu_Copier, "Copier")
	MenuBar()
	MenuItem(#MenuStyleEtendu_Modifier, "Editer")
EndIf
If CreatePopupImageMenu(#MenuID)
	MenuItem(#MenuID_Copier, "Copier")
EndIf
If CreatePopupImageMenu(#MenuPId)
	MenuItem(#MenuPId_Copier, "Copier")
	MenuItem(#MenuPId_Lister, "Rechercher toutes les fenêtres avec le même Process ID")
EndIf
If CreatePopupImageMenu(#MenuPName)
	MenuItem(#MenuPName_Copier, "Copier")
EndIf
If CreatePopupImageMenu(#MenuClasse)
	MenuItem(#MenuClasse_Copier, "Copier")
EndIf

AddWindowTimer(0, 1, #Vitesse)

Arbre_Afficher\ID = 1
Arbre_Afficher\Nom = 1
Arbre_Afficher\Classe = 1

Repeat
	
	Event = WaitWindowEvent()
	
	Select EventWindow()
		Case 0
			Select Event
				Case #PB_Event_Timer
					Select EventTimer()
						Case 1
							Survol_Souris = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
							If Survol_Souris = Survol_Souris_Memoire And Figer = 0 And Survol_Souris <> WindowID(0) And GetParent_(Survol_Souris) <> WindowID(0)
								Temps + 1
								If Temps >= #Temps_Max * 1.5
									Temps = #Temps_Max
								EndIf
								If Temps = #Temps_Max
									Analyse_Window_hWnd = Survol_Souris
									Analyse(Analyse_Window_hWnd)
								EndIf
								SetGadgetState(#Progression, Temps)
							Else
								Temps = 0
								SetGadgetState(#Progression, Temps)
								Survol_Souris_Memoire = Survol_Souris
							EndIf
					EndSelect
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Figer
							Figer = GetGadgetState(#Figer)
						Case #Rechercher
							Figer = 1
							SetGadgetState(#Figer, 1)
							Liste()
							
						Case #Arbre
							Select EventType()
								Case #PB_EventType_LeftDoubleClick
									Position = GetGadgetState(#Arbre)
									If Position >= 0
										SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
										Analyse_Window_hWnd = Arbre()\hWnd
										Analyse(Analyse_Window_hWnd)
									EndIf
								Case #PB_EventType_RightClick
									MenuArbre_Afficher()
								Case #PB_EventType_LeftClick
									Position = GetGadgetState(#Arbre)
									If Position >= 0
										SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
										Informations(Arbre()\hWnd)
									EndIf
								Default
									Position = GetGadgetState(#Arbre)
									If Position >= 0
										SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
										Informations(Arbre()\hWnd)
									EndIf
							EndSelect
						Case #Information
							Select EventType()
								Case #PB_EventType_RightClick
									Position = GetGadgetState(#Information)
									If Position >= 0
										Select GetGadgetItemData(#Information, Position)
											Case #MenuDimension
												DisplayPopupMenu(#MenuDimension, WindowID(0))
											Case #MenuStyle
												DisplayPopupMenu(#MenuStyle, WindowID(0))
											Case #MenuStyleEtendu
												DisplayPopupMenu(#MenuStyleEtendu, WindowID(0))
											Case #MenuTexte
												DisplayPopupMenu(#MenuTexte, WindowID(0))
											Case #MenuID
												DisplayPopupMenu(#MenuID, WindowID(0))
											Case #MenuPId
												DisplayPopupMenu(#MenuPId, WindowID(0))
											Case #MenuPName
												DisplayPopupMenu(#MenuPName, WindowID(0))
											Case #MenuClasse
												DisplayPopupMenu(#MenuClasse, WindowID(0))
										EndSelect
									EndIf
							EndSelect
					EndSelect
				Case #PB_Event_Menu
					Select EventMenu()
						Case #MenuArbre_Actualiser
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Analyse_Window_hWnd = Arbre()\hWnd
								Analyse(Analyse_Window_hWnd)
							EndIf
						Case #MenuArbre_Afficher_ID
							Arbre_Afficher\ID = 1 - Arbre_Afficher\ID
							Arbre_Afficher(Analyse_Window_hWnd)
						Case #MenuArbre_Afficher_Nom
							Arbre_Afficher\Nom = 1 - Arbre_Afficher\Nom
							Arbre_Afficher(Analyse_Window_hWnd)
						Case #MenuArbre_Afficher_Classe
							Arbre_Afficher\Classe = 1 - Arbre_Afficher\Classe
							Arbre_Afficher(Analyse_Window_hWnd)
						Case #MenuArbre_Exporter
							Arbre_Exporter()
						Case #MenuID_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								SetClipboardText(Str(Arbre()\hWnd))
							EndIf
						Case #MenuPId_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								SetClipboardText(Str(Arbre()\PId))
							EndIf
						Case #MenuPId_Lister
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Figer = 1
								SetGadgetState(#Figer, 1)
								Liste(Arbre()\PId)
							EndIf
						Case #MenuPId_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								SetClipboardText(ProgramfileNameFromWindow(Arbre()\hWnd))
							EndIf
						Case #MenuClasse_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								SetClipboardText(Arbre()\Class)
							EndIf
						Case #MenuTexte_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								SetClipboardText(Arbre()\Text)
							EndIf
						Case #MenuDimension_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								GetWindowRect_(Arbre()\hWnd, WindowRect.RECT)
								Texte = "Declare WindowRect.RECT" + Chr(10)
								Texte + "WindowRect\left = " + Str(WindowRect\left) + Chr(10)
								Texte + "WindowRect\top = " + Str(WindowRect\top) + Chr(10)
								Texte + "WindowRect\right = " + Str(WindowRect\right) + Chr(10)
								Texte + "WindowRect\bottom = " + Str(WindowRect\Bottom)
								SetClipboardText(Texte)
							EndIf
						Case #MenuDimension_Modifier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Modifier_Size_Fenetre(Arbre()\hWnd)
							EndIf
						Case #MenuStyle_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Style = GetWindowLongPtr_(Arbre()\hWnd, #GWL_STYLE)
								Texte = ""
								ForEach Style()
									If Style & Style()\Value
										If Texte
											Texte + " | "
										EndIf
										Texte + Style()\Text
									EndIf
								Next
								SetClipboardText(Texte)
							EndIf
						Case #MenuStyle_Modifier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Modifier_Style_Fenetre(Arbre()\hWnd)
							EndIf
						Case #MenuStyleEtendu_Copier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Style = GetWindowLongPtr_(Arbre()\hWnd, #GWL_EXSTYLE)
								Texte = ""
								ForEach StyleEx()
									If Style & StyleEx()\Value
										If Texte
											Texte + " | "
										EndIf
										Texte + StyleEx()\Text
									EndIf
								Next
								SetClipboardText(Texte)
							EndIf
						Case #MenuStyleEtendu_Modifier
							Position = GetGadgetState(#Arbre)
							If Position >= 0
								SelectElement(Arbre(), GetGadgetItemData(#Arbre, Position))
								Modifier_StyleEx_Fenetre(Arbre()\hWnd)
							EndIf
					EndSelect
				Case #PB_Event_CloseWindow
					Quitter = 1
			EndSelect
			
		Case 1 ;- Modifier Size
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(1)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Size_Right, #Size_Bottom
							Modifier_Size(1)
						Case #Size_Left, #Size_Top, #Size_Width, #Size_Heigh
							Modifier_Size(2)
					EndSelect
					
			EndSelect
			
		Case 2 ;- Modifier Style
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(2)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #Style_Liste
							Modifier_Style()
					EndSelect
			EndSelect
			
		Case 3 ;- Modifier Style Ex
			Select Event
				Case #PB_Event_CloseWindow
					CloseWindow(3)
				Case #PB_Event_Gadget
					Select EventGadget()
						Case #StyleEx_Liste
							Modifier_StyleEx()
					EndSelect
			EndSelect
			
	EndSelect
	
Until Quitter


DataSection
	Souris :
		Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00, $00000061, $59487009, $0B000073, $0B000013
		Data.l $9A000113, $0000189C, $48632000, $00004D52, $0000257A, $00008380, $0000FFF9, $0000E980, $00003075, $000060EA, $0000983A, $5F926F17
		Data.l $000046C5, $44493501, $DA785441, $4ABDD3A4, $05144103, $A64663E0, $1734FCD6, $0A40EB04, $48194841, $B52B5F6A, $D83BE04F, $04692A98
		Data.l $04D25161, $B24541A2, $05D835C4, $B992585C, $C4246C7B, $E09AECCD, $7EE774C0, $0733B81C, $43AFF124, $958D7D72, $59A5630F, $94CECD94
		Data.l $116EB93C, $F78367F2, $A5634E68, $0D7C43EF, $CC9200B6, $F2067643, $5500BD90, $7ECE1865, $AA033B21, $C56AD5CA, $F2F84924, $F646B6FA
		Data.l $61249202, $2C5CC71C, $9F8F1C16, $AEE49AB6, $A4534D31, $85550A69, $8AAA0E73, $878CB56A, $ADF6D7A0, $0E6C0BD8, $9CE0E73B, $8C72A543
		Data.l $36EBDBBB, $FE66EE80, $2AA80B30, $F9F31554, $0AB56A27, $F4E4E000, $8EF7907C, $36603E4A, $B46F508B, $1F5E9BE2, $200039CE, $465D4B80
		Data.l $9D465D1D, $993897C2, $F958D33C, $C69A5632, $430C28CA, $8D3DC106, $266F9195, $6F5C60DB, $1D0062B4, $8001465D, $423870E9, $00047CB9
		Data.l $A2E56353, $B4FC2FF0, $58CAAF58, $D1E56311, $5632B958, $9259B2CE, $FC001EF8, $02A88537, $00911768, $49000000, $AE444E45
		Data.b $42, $60, $82
	Cadre :
		Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00, $00000061, $59487009, $0B000073, $0B000013
		Data.l $9A000113, $0000189C, $48632000, $00004D52, $0000257A, $00008380, $0000FFF9, $0000E980, $00003075, $000060EA, $0000983A, $5F926F17
		Data.l $000046C5, $44493F01, $DA785441, $4E3191CC, $86144102, $3B3379FF, $5876409B, $B1B70485, $1EF4D432, $CF4ECA81, $3609C160, $C22B601E
		Data.l $E1296C05, $20925B02, $12102495, $3502A56D, $D9618561, $52A40B19, $57E36009, $8AFBE6BD, $386C31FF, $A00D7001, $E2EF75F2, $4008C015
		Data.l $00BBC00B, $0C200670, $56B2F0C3, $41045DAB, $80421790, $B4CDF631, $9D3A62D6, $0F1C7126, $39FAF5EB, $DC002680, $98345146, $B976264C
		Data.l $CB2CDA5C, $63186FEC, $B6BD7AEC, $B6C2C58B, $0007EDDB, $1CD00037, $6B5AC78F, $18C5F76D, $BAD6B563, $11DD2A54, $2C58A700, $F604214A
		Data.l $29063185, $E54A54A5, $9CE58008, $28708883, $DB46739C, $FE10B1E2, $D808FFC8, $D8C66563, $88EC7026, $57CC2FDB, $543E95AB, $F534D34E
		Data.l $00232F3C, $F7AF5EC3, $DFA06878, $850A8FEF, $F00733C2, $F274E9D2, $17356AD5, $94A9C104, $9312EE52, $76E8F924, $A34683BB, $3DD11311
		Data.l $4A0F3CF3, $972E5529, $AFDF7CAF, $13EBAEB8, $08A38FD1, $38E39821, $93F9CE73, $9B35A631, $073EDECD, $B0BA4B00, $91A8685B, $000000CA
		Data.l $4E454900, $6042AE44
		Data.b $82
	Loupe :
		Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00, $02000061, $4144495B, $639C7854, $2D024060
		Data.l $336A9DED, $98AB2FE6, $8AD362B7, $AE967389, $6B6BAB2E, $36C8CD4C, $9803C060, $F3198C60, $3A9B1496, $D3519CF8, $57976CB3, $D3570FD1
		Data.l $B7D108B6, $D293AB70, $1C1938B4, $9A99DA93, $D38CC29A, $16B32980, $5BE9A814, $890A88F6, $CB482AF1, $CBCAA830, $2B2A6831, $E9EB1831
		Data.l $9B696831, $391AA9B1, $F0FB3D97, $01AB07AB, $4AAD4D0D, $AD5A4A52, $0C827C42, $0C22A2E2, $0C2CACAC, $596340CC, $72F1F681, $EA9832B1
		Data.l $AAA831A9, $E8A83219, $F9781559, $1BA2DA06, $2FC9C2C0, $C9C9C212, $2A2125C3, $0FEBF0C8, $BF9FC303, $21900910, $C2C1CC20, $A6A3A0C0
		Data.l $CDE6F0CC, $97BB8653, $A501C44F, $E0B8A30E, $7D667FCF, $06565676, $0606764E, $06060E1E, $06062E7E, $E488762E, $0C0CDF8F, $F286813F
		Data.l $883330F3, $70318889, $60E808F2, $FBEDE178, $7EBF8CF7, $676064FF, $E4073A05, $9C8DA074, $73E7406C, $B3703032, $CDC45C23, $1EF401C9
		Data.l $3240462B, $FCF979BD, $AF578BDA, $19067EC1, $A059A202, $39F107CE, $01919880, $FC337F84, $16F9F1F9, $BF8C0186, $74B9AF3E, $C7AFC6F5
		Data.l $B030DECF, $03676D01, $310CC019, $DF4F1600, $78637DBE, $DFC9E6F7, $2C9EAF0F, $64003743, $64404338, $B3B59D4A, $8FA46357, $B8B4832D
		Data.l $F7E25808, $CF86063F, $5E1819DF, $F0C6FBBD, $8653E9E0, $1F579B1D, $6D56D89B, $1000D58D, $6B890AF0, $2DB131D3, $6234B3B5, $04919451
		Data.l $F0CACCDA, $862FEBE9, $331F4F47, $F5B6DAEC, $8AB2929C, $3B63A5CA, $FDF9FE0F, $DAED70B3, $0DD177B5, $809F0302, $B8E0F360, $6599898C
		Data.l $6B0BFBCD, $E4A70EBB, $F1F1CF96, $F1F3720F, $EAEF65F1, $3725709D, $A5BFE737, $D08DE5A5, $AC6550D0, $FE03E006, $EDB67EFE, $D26FEDED
		Data.l $5BFFD3D3, $67915959, $AFAFAF88, $C7474775, $4CCCCC9B, $05EE4B90, $334B0707, $0A86D612, $ACFCFCFC, $370D0D0D, $E3B1D8ED, $97171733
		Data.l $00AEC90D, $2F2F2F01, $6F6F6F55, $001B1029, $E4B50D02, $CDFDD6E6, $00000000, $444E4549, $826042AE
EndDataSection
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)]
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Récupérer des informations sur les fenêtres

Message par PAPIPP »

Bonjour LSI
Bravo pour ce prg
Une petite remarque
Dans le popup menu, le terme ID correspond en fait au handle du gadget, il est donc variable d’un lancement à l’autre
Le Ctrl_ID ou ID est une info constante par rapport au handle parent. d’un lancement à l’autre
Il peut être trouvé avec :
ctrlid$ = Str(GetWindowLong_(hwnd, #GWL_ID))
Voici à titre d’exemple le PRG de net maestro à comparer avec le tien sur la calculatrice par exemple
On voit nettement la différence entre handle gadget et ID ou Ctrl_ID

Code : Tout sélectionner

;==============================================================
; Program:         Digger
; Author:          Lloyd Gallant (netmaestro)
; Date:            December 20, 2007
; Target OS:       Microsoft Windows All
; Target Compiler: PureBasic 4.0 and later
; License:         Free, unrestricted, use at your own risk
;==============================================================

OpenWindow(0,0,0,440,64,"",#PB_Window_BorderLess|#WS_BORDER|#PB_Window_Invisible)
StickyWindow(0,1)
wclight =  RGB(255,255,223)
wcdark  =  RGB(235,235,203)
SetWindowColor(0,wclight)
ExamineDesktops()
screenw = DesktopWidth(0)
screenh = DesktopHeight(0)
CreateGadgetList(WindowID(0))
TextGadget(0,0,0,100,16,"")
TextGadget(1,60,0,80,16,"Hwnd")
TextGadget(2,140,0,100,16,"Caption")
TextGadget(3,240,0,60,16,"Ctrl ID")
TextGadget(4,300,0,140,16,"Classname")
TextGadget(5,0,16,60,10,"")
TextGadget(6,0,26,60,16,"Window:")
TextGadget(7,0,42,60,22,"   Parent:")
TextGadget(8,60,26,80,16,"")
TextGadget(9,140,26,100,16,"")
TextGadget(10,240,26,60,16,"")
TextGadget(11,300,26,140,16,"")
TextGadget(12,60,42,80,16,"")
TextGadget(13,140,42,100,16,"")
TextGadget(14,240,42,60,16,"")
TextGadget(15,300,42,140,16,"")
For i=0 To 7
  SetGadgetColor(i,#PB_Gadget_BackColor,wcdark)
Next
For i=8 To 15
  SetGadgetColor(i,#PB_Gadget_BackColor,wclight)
Next
HideWindow(0,0)

Repeat
  Delay(1)
  ev=WindowEvent()
  x=DesktopMouseX():y=DesktopMouseY()
  If x > screenw-WindowWidth(0)
    wx = x-WindowWidth(0)
  Else
    wx = x+10
  EndIf
  If y >= screenh-WindowHeight(0)+20
    wy = y-WindowHeight(0)-10
  Else
    wy = y+20
  EndIf
  ResizeWindow(0, wx, wy, #PB_Ignore, #PB_Ignore)
  hwnd = WindowFromPoint_(x|y<<32)
  If hwnd<>oldhwnd Or ev=#PB_Event_Repaint
    hwnd$ = Hex(hwnd)
    caption$ = Space(100)
    GetWindowText_(hwnd, @caption$, 99)
    ctrlid$ = Str(GetWindowLong_(hwnd, #GWL_ID))
    class$ = Space(140)
    GetClassName_(hwnd, @class$, 139)
    SetGadgetText(8, hwnd$)
    SetGadgetText(9, caption$)
    SetGadgetText(10, ctrlid$)
    SetGadgetText(11, class$)
    parent = GetParent_(hwnd)
    parent$ = Hex(parent)
    caption$ = Space(100)
    GetWindowText_(parent, @caption$, 99)
    ctrlid$ = Str(GetWindowLong_(parent, #GWL_ID))
    class$ = Space(140)
    GetClassName_(parent, @class$, 139)
    SetGadgetText(12, parent$)
    SetGadgetText(13, caption$)
    SetGadgetText(14, ctrlid$)
    SetGadgetText(15, class$)
    oldhwnd = hwnd   
    RedrawWindow_(WindowID(0),0,0,#RDW_UPDATENOW)
  EndIf
Until GetAsyncKeyState_(#VK_RBUTTON) & 32768
A quoi peut donc bien servir ce Ctrl_ID ou ID ?
Voir ici le pilotage d’une application externe.
http://www.purebasic.fr/french/vie ... 3&t=12301
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Récupérer des informations sur les fenêtres

Message par Le Soldat Inconnu »

Je ne connaissais pas ce control ID, faut que je zieute :mrgreen:
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)]
Répondre