elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  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 Respuesta Imprimir
Autor Tema: obtener ventana hija que tiene el foco de una aplicacion externa?  (Leído 6,254 veces)
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


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

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
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



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

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

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


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

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

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


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

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: 759



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

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

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


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

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: 759



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

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

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



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

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

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


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



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

cobein


Desconectado Desconectado

Mensajes: 759



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

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

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines