Bien, mi problema es que quiero sacar el HWND de un control en especifico de la barra de tareas, con el findwindow busco la barra de tareas, y con el el findwindowex busco el control hijo, todo va bien pero no puedo acceder a los controles hijos del mismo control hijo, bueno es que dentro de la barra de tareas tenemos varios controles que pude identificar: El Boton "Inicio"(BUTTON), El "ReBarWindow32", el "TrayNotifyWnd".
Adentro del ReBarWindow32 existe un control hijo llamado "ToolbarWindow32", ademas de que el TrayNotifyWnd tambien tiene sus controles hijos, pero en especial quiero el ToolbarWindow32 del ReBarWindow32, el codigo que uso es este pero el findwindowex me retorna 0 despues de que quiero buscar el Handle del ToolbarWindow32:
Private Sub Command1_Click()
Dim Papa As Long
Dim Abuelo As Long
Dim Hijo as long
Abuelo = FindWindow("Shell_TrayWnd", "")
Papa = FindWindowEx(Abuelo, 0, "ReBarWindow32", vbNullString)
'hasta aqui esta bien despues no
Hijo = FindWindowEx(Papa, 0, "ToolbarWindow32",vbNullString)
'Hijo me sale a cero, no se porque
End Sub
Estoy seguro que si es la clase correcta, y que si es su hijo, ya que hice un programita que me pinta el objeto segun el WindowFromPoint, me dice su clase, y su handle. Despues copio el handle de la clase "ToolbarWindow32" y la uso con el Api isChild y me da que si es Hijo. Aqui dejo el Code del programa para que vean que es cierto:
'SE OCUPA UN PICTURE, DOS TEXBOX Y UN TIMER
Private Type Coord
X As Long
Y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Sub GetCursorPos Lib "user32" (Cordenada As Coord)
Private Declare Function WindowFromPoint Lib "user32" (ByVal CordenadaX As Long, ByVal CordenadaY As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal HDC As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal HDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal HDC As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal HDC As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
Private Declare Function PrintWindow Lib "user32" (ByVal hwnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal HDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal HDC As Long, ByVal nStretchMode As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, Rects As RECT) As Long
Private Sub Timer1_Timer()
Dim p As Coord
Dim WFP As Long
Static L As Long
Dim DC As Long
Dim HDC As Long
Dim HBMP As Long
Dim R As RECT
Static E As Boolean
Dim X As Long
Dim S As String
GetCursorPos p
WFP = WindowFromPoint(p.X, p.Y)
If WFP = L Or WFP = 65702 Then
Exit Sub
Else
Text1.Text = WFP
S = Space(256)
X = GetClassName(WFP, S, 256)
S = Left(S, X)
Text2.Text = S
Me.Caption = S & " " & WFP
L = WFP
GetWindowRect L, R
W = R.Right - R.Left
H = R.Bottom - R.Top
DC = GetDC(0)
HDC = CreateCompatibleDC(0)
HBMP = CreateCompatibleBitmap(DC, W, H)
SelectObject HDC, HBMP
PrintWindow WFP, HDC, 0
StretchBlt Me.Picture1.HDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, _
HDC, 0, 0, W, H, vbSrcCopy
Picture1.Refresh
DeleteDC HDC
DeleteObject HBMP
DeleteDC DC
End If
End Sub
PORFAVOR AYUDA