problema al obtener los controles de un tooltip
Publicado: 10 Mar 2011, 20:13
Hola
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...):
Resulta, que este código funciona con todas las ventanas menos con las que le paso como tooltips_class32.
Viendo que:
no detecta cuando está activa la ventana del tooltip, lo hice así para capturar el handle:
(Por cierto, no se por qué con WinList() tal como lo hago, aparece el texto del tooltip que creo al principio, en el título de la ventana del tooltip)...
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:
se ejecuta bien, no parece devolver ningún error...
¿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!
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!