elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 18:38  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación VB (Moderadores: ||MadAntrax||, E0N)
| | |-+  obtener ventana hija que tiene el foco de una aplicacion externa?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: obtener ventana hija que tiene el foco de una aplicacion externa?  (Leído 331 veces)
LeandroA

Desconectado Desconectado

Mensajes: 312


Ver Perfil
obtener ventana hija que tiene el foco de una aplicacion externa?
« en: 09 Junio 2008, 21:38 »

Buenas alguien sabe con que api puedo obtener la ventana (ventana hija, control) que tiene el foco, pero no me refiero a una ventana padre sino a el control que tiene el foco

ya probe con:

GetFocus, pero este solo me devuelve el hwnd dentro de mi aplicacion, yo lo que quiero es saber dentro de todo windows cual es el hwnd que tiene el foco.

GetForegroundWindow me devuelve el hwnd de la ventana padre activa, por lo tanto no me sirve.

GetActiveWindow ni a palos

WindowFromPoint tampoco porque yo podria activar una ventana con el teclado

alguien conoce alguna forma?

Saludos
En línea

seba123neo

Desconectado Desconectado

Mensajes: 783



Ver Perfil WWW
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #1 en: 09 Junio 2008, 22:36 »

Hola,Leandro,mira busca esto en el google GetFocusEx,ojala existiera jaja,pero mira lo que te aparece,te aparece una pregunta igual que la tuya en ingles y dan la respuesta,y le da un codigo en C,te la pego aca para que veas:

Pregunta:

GetFocus is a very useful API function used to find window which has keyboard focus. However, this function has a limitation - focused window must be created by the calling thread or GetFocus will return NULL. On desktop Windows it was possible to walkaround this problem using AttachThreadInput function. However, on CE-based devices this function is not available. So, how can I use GetFocus to find focused window created by another process?

Respuesta:

To make GetFocus work, you need to call it from a thread which created focused window. Usually (though not quite always) this is the same thread which created top-level foreground window (obtained with GetForegroundWindow). The trick is to subclass this window and the send it a special message which will be processed by your window proc. Since your window proc will be called by a thread in another process, you can just call GetFocus and return HWND as LRESULT to your own process. Note that on desktop this trick will not work since each process has its own address space and subclassing between process boundaries is not possible. But on CE it does work.

Codigo Fuente:[/b

I've written a small function, GetFocusEx, which uses the trick described above. You can use it in your projects the same way you use GetFocus. GetFocusWindowProc is a window proc assigned to foreground window. If it gets special message (registered with RegisterWindowMessage function) it calls GetFocus and returns obtained HWND as LRESULT. Otherwise it just forwards messages to original window proc using CallWindowProc function.

Código:
static WNDPROC g_pOldWndProc = NULL;
static UINT g_uGetFocusMessage = RegisterWindowMessage(_T("SpecialGetFocusMessage"));
static LRESULT WINAPI GetFocusWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == g_uGetFocusMessage)
{
return (LRESULT)GetFocus();
}
else
{
return CallWindowProc(g_pOldWndProc, hWnd, uMsg, wParam, lParam);
}
}

HWND GetFocusEx()
{
HWND hWnd = GetForegroundWindow();
if(!IsWindow(hWnd))
return NULL;

g_pOldWndProc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC);
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)GetFocusWindowProc);

HWND hResult = (HWND)SendMessage(hWnd, g_uGetFocusMessage, 0, 0);

SetWindowLong(hWnd, GWL_WNDPROC, (LONG)g_pOldWndProc);
g_pOldWndProc = NULL;

return hResult;
}

se que escribir codigo en C en el foro de visual basic no es lo que se ahce,pero en este caso lo necesitaba la respuesta...

fijate si de ahi podes sacar algo util...

saludos.


En línea

Todos somos ignorantes;lo que pasa es que no todos ignoramos las mismas cosas - Albert Einstein
E0N
Lab &
Moderador
*****
Desconectado Desconectado

Mensajes: 2.686


http://e0n-productions.blogspot.com/


Ver Perfil WWW
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #2 en: 10 Junio 2008, 03:22 »

Y si no logras traducirlo pregunta Leandro, que te hecho una manita :P
En línea

Inaugurado y en construcción:
http://e0n-productions.blogspot.com/
LeandroA

Desconectado Desconectado

Mensajes: 312


Ver Perfil
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #3 en: 10 Junio 2008, 03:57 »

Y si no logras traducirlo pregunta Leandro, que te hecho una manita :P

Hola Te lo agradeceria Eon, porque me queda la duda si hace un subclass, si es asi creo que en visual no voy a tener mucha suerte.

Saludos
En línea

cobein

Desconectado Desconectado

Mensajes: 467



Ver Perfil WWW
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #4 en: 10 Junio 2008, 04:07 »

Hola Leandro, sabes que me parece que no es lo que buscas... pero bueno traducilo no es mucho, cualquier cosa despues lo resolvemos
En línea

LeandroA

Desconectado Desconectado

Mensajes: 312


Ver Perfil
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #5 en: 10 Junio 2008, 04:28 »

bueno algo traduje pero no me funciono ya que con visual no se puede hacer el subclass a app externas, bueno por lo menos a mi no me funciono :huh:. igual voy a mirar un poco mas el google.

Saludos

En línea

cobein

Desconectado Desconectado

Mensajes: 467



Ver Perfil WWW
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #6 en: 10 Junio 2008, 05:46 »

Aca ta!!! :D costo encontrarlo

Source: http://www.vbforums.com/showthread.php?p=1640021#post1640021

Código:
Option Explicit
 
Private Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, _
                                                         ByVal idAttachTo As Long, _
                                                         ByVal fAttach As Long) _
                                                         As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetFocus Lib "user32" () As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, _
                                                                lpdwProcessId As Long) _
                                                                As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
 
 
Private Sub Timer1_Timer()
Dim hFore As Long, hFocus As Long
 
    hFocus = GetFocus
   
    If hFocus = 0 Then
        hFore = GetForegroundWindow()
        Call AttachThreadInput(GetWindowThreadProcessId(hFore, 0&), GetCurrentThreadId, True)
        hFocus = GetFocus
        Call AttachThreadInput(GetWindowThreadProcessId(hFore, 0&), GetCurrentThreadId, False)
    End If
   
    Me.Caption = hFocus
   
End Sub
En línea

seba123neo

Desconectado Desconectado

Mensajes: 783



Ver Perfil WWW
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #7 en: 10 Junio 2008, 06:02 »

muy bueno  ::) ,funciona bien,pero no me esta andando en algunas aplicaciones que si tiene contoles con Hwnd... pero para aplicaciones comunes va muy bien...

saludos.
En línea

Todos somos ignorantes;lo que pasa es que no todos ignoramos las mismas cosas - Albert Einstein
LeandroA

Desconectado Desconectado

Mensajes: 312


Ver Perfil
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #8 en: 10 Junio 2008, 06:14 »



Buenisimo, estuve dos hora buscando y probando cosas, esta al pelo, muchas gracias.
En línea

cobein

Desconectado Desconectado

Mensajes: 467



Ver Perfil WWW
Re: obtener ventana hija que tiene el foco de una aplicacion externa?
« Respuesta #9 en: 10 Junio 2008, 18:51 »

Una aclaracion

AttachThreadInput Function


Parameters
idAttach [in]

The identifier of the thread to be attached to another thread. The thread to be attached cannot be a system thread.
idAttachTo [in]

The identifier of the thread to which idAttach will be attached. This thread cannot be a system thread.

A thread cannot attach to itself. Therefore, idAttachTo cannot equal idAttach.
fAttach [in]

If this parameter is TRUE, the two threads are attached. If the parameter is FALSE, the threads are detached.

Como ven no se puede attachar a todos los threads, asi que posiblemente en algunos casos no ande.
En línea

Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats