Page 1 sur 1
[..] Connaitre l'épaisseur d'une fenêtre ?
Posté : mar. 08 déc. 2009 07:42
par Kikoolol
Bonjour.
Alors voilà, je doit faire plusieurs recherche de Pixel dans un cadre bien précis qui est situé dans une fenêtre, pour déterminer les deux points de ce cadre, j'aimerais pouvoir retiré l'épaisseur et la hauteur du cadre de la fenêtre.
Car vous l'aurez remarquer, lors d'un WinGetPos($Windows), les coordonnés transmisent correspondent à une coordonnés du cadre.
Comment avoir des informations cadre ? Ou même encore mieux comment trouver les coordonnés DANS la fenêtre.
Merci
Re: [..] Connaitre l'épaisseur d'une fenêtre ?
Posté : mar. 08 déc. 2009 08:21
par Tlem
J'avais trouvé ce code lors de quelques recherches sur le forum Anglais.
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Opt("GuiOnEventMode", 1)
HotKeySet("{ESC}", "QuitApp")
;If Not IsDeclared("WM_WINDOWPOSCHANGING") Then Assign("WM_WINDOWPOSCHANGING",0x0047)
Global $ahGUI[4]
Global $Frame_Color = 0xFF0000
Global $Frame_Width = 2
Global $iShow = True
$Main_GUI = GUICreate("Highlight Window Demo")
GUISetOnEvent($GUI_EVENT_CLOSE, "QuitApp")
GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING")
GUICreateSquare($Main_GUI)
GUISetState(@SW_SHOW, $Main_GUI)
While 1
Sleep(10)
If $iShow And Not WinActive($Main_GUI) Then
For $i = 0 To 3
GUISetState(@SW_HIDE, $ahGUI[$i])
Next
$iShow = False
EndIf
WEnd
Func GUICreateSquare($hWnd)
$aWin = WinGetPos($hWnd)
$iBorder = _WinAPI_GetSystemMetrics(8) ; Border width
$iBar = _WinAPI_GetSystemMetrics(4) ; Title bar height
$aCA = WinGetClientSize($Main_GUI)
$X = ($aWin[0] + $iBorder) - $Frame_Width
$Y = ($aWin[1] + $iBar + $iBorder) - $Frame_Width
$W = $aCA[0] + $Frame_Width
$H = $aCA[1] + $Frame_Width
If IsHWnd($ahGUI[0]) Then
WinMove($ahGUI[0], "", $X, $Y)
Else
$ahGUI[0] = GUICreate("", $W+$iBorder, $Frame_Width, $X, $Y, $WS_POPUP, $WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
GUISetBkColor($Frame_Color)
EndIf
If IsHWnd($ahGUI[1]) Then
WinMove($ahGUI[1], "", $X, $Y)
Else
$ahGUI[1] = GUICreate("", $Frame_Width, $H+$iBorder, $X, $Y, $WS_POPUP, $WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
GUISetBkColor($Frame_Color)
EndIf
If IsHWnd($ahGUI[2]) Then
WinMove($ahGUI[2], "", $X+$aCA[0]+$iBorder, $Y)
Else
$ahGUI[2] = GUICreate("", $Frame_Width, $H+$iBorder, $X+$W, $Y, $WS_POPUP, $WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
GUISetBkColor($Frame_Color)
EndIf
If IsHWnd($ahGUI[3]) Then
WinMove($ahGUI[3], "", $X, $Y+$aCA[1]+$iBorder)
Else
$ahGUI[3] = GUICreate("", $W+$Frame_Width, $Frame_Width, $X, $Y+$H, $WS_POPUP, $WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
GUISetBkColor($Frame_Color)
EndIf
For $i = 0 To 3
GUISetState(@SW_SHOW, $ahGUI[$i])
Next
If Not WinActive($Main_GUI) Then
WinActivate($Main_GUI)
$iShow = True
EndIf
EndFunc
Func WM_WINDOWPOSCHANGING($hWnd, $MsgID, $WParam, $LParam)
If $hWnd = $Main_GUI Then GUICreateSquare($Main_GUI)
Return $GUI_RUNDEFMSG
EndFunc
Func QuitApp()
Exit
EndFunc
La partie qui vous intéresse se trouve ligne 38 et 39.

Re: [..] Connaitre l'épaisseur d'une fenêtre ?
Posté : mar. 08 déc. 2009 18:23
par Kikoolol
Nickel merci beauoup

Re: [..] Connaitre l'épaisseur d'une fenêtre ?
Posté : dim. 20 déc. 2009 12:56
par Kikoolol
Après plusieurs test sur différent OS, je me rend compte qu'en réalité certaine valeur sont fausse.
Comme par exemple les variables $iBorder et $iBar, savez vous comment y remediez ?
Re: [..] Connaitre l'épaisseur d'une fenêtre ?
Posté : dim. 20 déc. 2009 17:46
par Tlem
Pas spécialement. Il faut sans doute faire des recherches sur le forum Anglais.
Re: [..] Connaitre l'épaisseur d'une fenêtre ?
Posté : dim. 20 déc. 2009 18:59
par Kikoolol
J'ai chercher sur le forum Anglais sans succès...
Mon but principal étant de trouver la coordonnées du premier et du dernier Pixel dans la fenêtre... (Sans utiliser de couleurs)
Que dois-je faire ?