Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Obtener handle de botón externo

Estas en el tema de Obtener handle de botón externo en el foro de C/C++ en Foros del Web. Hola Estoy intentando crear un programa que permita pausar todas las descargas de un programa P2P torrent (BitLord 1.1) cuando determinado proceso se ejecute (como ...
  #1 (permalink)  
Antiguo 03/03/2008, 04:01
Avatar de Hardrive  
Fecha de Ingreso: julio-2006
Ubicación: La Plata - Bs. As.
Mensajes: 65
Antigüedad: 17 años, 10 meses
Puntos: 0
Obtener handle de botón externo

Hola

Estoy intentando crear un programa que permita pausar todas las descargas de un programa P2P torrent (BitLord 1.1) cuando determinado proceso se ejecute (como por ejemplo, un juego online). Se me había ocurrido de utilizar FindWindow y FindWindowEx para encontrar el handle del botón "Pausar todos" (que está en el systray) para después mandarle una señal con SendMessage. Pero el problema, es que por más que lo intente, no logro dar con el handle de ningún botón del programa, solo con el de la ventana, del cual obtengo el título y el nombre de la clase. Lo he itentado con FindWindowEx sobre el handle que me da FindWindow y haciendo un bucle para ver si obtengo al menos el de un botón, pero no me ha servido.

Por favor, si alguien me podría ayudar o dar una idea, estaría agradecido.


Salu2
  #2 (permalink)  
Antiguo 14/03/2008, 18:28
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Obtener handle de botón externo

/*
Esto es lo que creo que estás necesitando, espero que este código te sea util
Lo he testeado y funciona (Lo testee con la calculadora de Windows)
*/
#include <tchar.h>
#include <windows.h>

HWND MyFindWindow(HWND hWnd, PTSTR szClassName, PTSTR szWindowName)
{
HWND hWndFound;
static TCHAR szTempBuffer[40];

if(hWnd == NULL)
return NULL;
if(hWnd != NULL)
{
for( ; hWnd != NULL; hWnd = GetWindow(hWnd, GW_HWNDNEXT))
{
if(NULL != (hWndFound = (MyFindWindow(GetWindow(hWnd, GW_CHILD), szClassName, szWindowName))))
{
return hWndFound;
}
GetClassName(hWnd, szTempBuffer, 40);
if(0 == lstrcmp(szTempBuffer, szClassName)) // Es sensitivo a mayúsculas y minúsculas
{
GetWindowText(hWnd, szTempBuffer, 40);
if(0 == lstrcmp(szTempBuffer, szWindowName)) // Aca también es sensitivo a mayúsculas y minúsculas
{
return hWnd;
}
}
}
}
return NULL;
}
HWND MyFindWindowEx(PTSTR szAppClassName, PTSTR szClassName, PTSTR szWindowName)
{
HWND hWnd;
TCHAR szTempBuffer[40];
for(hWnd = GetWindow(GetDesktopWindow(), GW_CHILD); hWnd != NULL; hWnd = GetWindow(hWnd, GW_HWNDNEXT))
{
if(GetClassName(hWnd, szTempBuffer, 40))
{
if(0 == lstrcmpi(szTempBuffer, szAppClassName)) // Si se encontro la aplicación principal,
// entonces buscar el control específico
{
return MyFindWindow(GetWindow(hWnd, GW_CHILD), szClassName, szWindowName);
}
}
}
return NULL;
}
void main(void)
{
HWND hWndButton = MyFindWindowEx("SciCalc", "Button", "7");
if(hWndButton == NULL)
{
MessageBox(0, "Ventana no encontrada", "", MB_OK);
}
else
{
// Trabajar con el handle
EnableWindow(hWndButton, FALSE);
}
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:44.