Estoy haciendo una librería para manejar tooltips (al menos los de tipo tooltips_class32) ya que de momento no los he visto de otro tipo.
Tengo ya varias funciones hechas, pero al llegar a la que devuelve el texto del tooltip me he quedao encallao :P.
Se me ocurre, que estas ventanas, deben tener igual que el resto controles donde mostrar los iconos, textos... así pues, he intentado obtener los controles de una ventana de clase tooltips_class32 con este código que encontré hace ya tiempo por el foro inglés (no recuerdo el autor...):
Código: Seleccionar todo
#Include <WinAPI.au3>
$HDllCall=DllOpen("User32.dll")
Tooltip("Capturando controles", 50, 80, "Controles", 0, 1)
$WList=WinList("[class:tooltips_class32]")
For $I=1 To $WList[0][0] Step +1
If $WList[$I][0]=="Capturando controles" Then
$HParent=$WList[$I][1]
ExitLoop
EndIf
Next
;WinWait("Sin título - Bloc de notas")
;$HParent=WinGetHandle("Sin título - Bloc de notas")
$Handle=DllCallBackRegister("_EnumChildWindowsProc", "int", "hwnd;lparam")
DllCall($HDllCall, "BOOL", "EnumChildWindows", "HWND", $HParent, "ptr", DllCallBackGetPtr($Handle), "LPARAM", 0)
Global $HlpCLassName
Func _EnumChildWindowsProc($hWnd, $lParam)
Local $HlpCLassName
$HControlID=DllCall($HDllCall, "int", "GetDlgCtrlID", "HWND", $hWnd)
$HClassName=DllCall($HDllCall, "int", "GetClassNameW", "hwnd", $hWnd, "wstr", "", "int", 4096)
$HWinAPIClassName=_WinAPI_GetClassName($hWnd)
MsgBox(0, "", "$hWnd="&$hWnd&@CR&"$hControlID = "&$hControlID[0]&@CR&"my $ClassName = "&$HClassName[2]&@CR&"_WinAPI_GetClassName = "&$HWinAPIClassName)
Return 1
EndFunc
DllClose($HDllCall)
Viendo que:
Código: Seleccionar todo
WinWait("Controles")
Código: Seleccionar todo
$WList=WinList("[class:tooltips_class32]")
For $I=1 To $WList[0][0] Step +1
If $WList[$I][0]=="Capturando controles" Then
$HParent=$WList[$I][1]
ExitLoop
EndIf
Next
Con el código anterior, parece funcionar todo bien, pero no se por qué, no se ejecuta _EnumChildWindowsProc() (la función callback)., por lo que no puedo obtener los controles.
¿Sabeis qué puede pasar?, si esta api no funciona con tooltips o qué? parece, que:
Código: Seleccionar todo
DllCall($HDllCall, "BOOL", "EnumChildWindows", "HWND", $HParent, "ptr", DllCallBackGetPtr($Handle), "LPARAM", 0)
¿Se os ocurre otra forma de capturar el texto de un tooltip?. La verdad, es que esta no me convence, porque esta api hace una llamada al callback para cada control y eso para una UDF no va muy bien :).
Acias,
Salu2!