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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  obtener el hwnd de un programa sin form
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: obtener el hwnd de un programa sin form  (Leído 7,645 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
obtener el hwnd de un programa sin form
« en: 27 Agosto 2011, 06:34 am »

buenas pues esa duda tengo :P como puedo obtener el hwnd de un programa de VB sin form? estoy codeando un programa sin form ( modulo como main el principal ) y entonces llege a esa parte que necesito el hwnd :P normalmente se hace me.hwnd ( me = form ) pero ahora veo que el modulo no tiene hwnd al menos tiene esa propiedad :P como puedo hacer? gracias :)


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: obtener el hwnd de un programa sin form
« Respuesta #1 en: 27 Agosto 2011, 07:04 am »

.
Ponle entonces &H0 o 0, el hwnd es propio de ventanas y solo es asosiativos normalmente...

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: obtener el hwnd de un programa sin form
« Respuesta #2 en: 27 Agosto 2011, 07:17 am »

gracias BlackZeroX :) eso funciona con hooks? la verdad por el momento lo quiero para la api Settimer para el primer parametro que me pide :P y luego creo que lo usare para aplicarlo a hooks...

PD: una duda  :huh: para eliminarlo con killtimer? :P
ya que si aplico 0 en killtimer entonces escribo 0 ???  :huh:
« Última modificación: 27 Agosto 2011, 07:25 am por Raul100 » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: obtener el hwnd de un programa sin form
« Respuesta #3 en: 27 Agosto 2011, 07:30 am »

.
La MSDN No muerde y si no sabes ingles hay tienes el traductor de google.

http://msdn.microsoft.com/en-us/library/ms644906%28v=vs.85%29.aspx

http://msdn.microsoft.com/en-us/library/ms644903%28v=vs.85%29.aspx

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: obtener el hwnd de un programa sin form
« Respuesta #4 en: 27 Agosto 2011, 07:48 am »

 :xD si lo lei tio por eso me entro la curiosidad ya que al escribirle 0 comprendi que el argumento idevent se ignora :P y por eso tenia duda de como si no lo ignorara el parametro lo usara para darle un numero para identificarlo :P pero lo ignora :P y comprobe y la funcion killtimer me devuelve 0 eso quiere decir que la funcion falla :P y no libera el timer :P
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: obtener el hwnd de un programa sin form
« Respuesta #5 en: 27 Agosto 2011, 08:10 am »

hice este ejemplo y comprobe que no funciona :P noce en que fallo :P

modulo bas
Código
  1. Option Explicit
  2. Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  3. Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  4.  
  5. Dim A As Long
  6. Dim B As Boolean
  7.  
  8. Sub main()
  9. A = SetTimer(0, 0, 30000, AddressOf TimerProc)
  10. Debug.Print A
  11. Do While Not B
  12. DoEvents
  13. Loop
  14. End Sub
  15.  
  16. Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
  17. Debug.Print "+1"
  18. Debug.Print A
  19. Debug.Print KillTimer(A, 0)
  20. B = True
  21. End Sub


el resultado del debug.print:


Código:
26430 
+1
26430
0       <--------- no lo libera :P (valor devuelto de la llamada a funcion killtimer )

luego lo termine de comprobar porq cuando termina sub main y vuelvo a vb en diseño el timer aun sigue marcando y en el debug.print me escribe

Código:
+1
0
0
« Última modificación: 27 Agosto 2011, 08:14 am por Raul100 » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: obtener el hwnd de un programa sin form
« Respuesta #6 en: 27 Agosto 2011, 08:26 am »

 :xD :xD :xD
lo resolvi
bueno mi error era a la hora de liberarlo :xD
el identificador q me devuelve settimer es el idevent no el hwnd del timer :)

Código:
Debug.Print KillTimer(0, A)

debug.print:

Código:
 26196 
+1
 26196
 1
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: obtener el hwnd de un programa sin form
« Respuesta #7 en: 27 Agosto 2011, 22:17 pm »

.
Código
  1.  
  2. Option Explicit
  3.  
  4. Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  5. Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  6. Declare Function WaitMessage Lib "user32" () As Long
  7.  
  8. Dim iTmr            As Long
  9.  
  10. Sub main()
  11.    iTmr = SetTimer(0, 0, 300, AddressOf TimerProc)
  12.    Do While Not (iTmr = 0)
  13.        DoEvents
  14.        WaitMessage
  15.    Loop
  16. End Sub
  17.  
  18. Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
  19.    Debug.Print KillTimer(hwnd, iTmr)
  20.    iTmr = 0
  21. End Sub
  22.  
  23.  

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: obtener el hwnd de un programa sin form
« Respuesta #8 en: 27 Agosto 2011, 23:16 pm »


buenas pues esa duda tengo :P como puedo obtener el hwnd de un programa de VB sin form?


El tema ya quedó resuelto, pero si alguna vez tenés que obtener el hwnd de un Main podes usar FindWindow. (Acabo de enterarme de esto, ya que también pensaba que este tipo de hwnd era unicamente propio de ventanas).

Código:



Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
Sub Main()
  
  Dim lpClase As String
  
  If Not App.LogMode = 0 Then
    lpClase = "ThunderRT6Main" ' Exe Compilado
  Else
    lpClase = "ThunderMain" ' en el IDE
  End If
  
  MsgBox FindWindow(lpClase, App.Title)

End Sub

 






« Última modificación: 28 Agosto 2011, 00:24 am por Hasseds » En línea

Sergio Desanti
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: obtener el hwnd de un programa sin form
« Respuesta #9 en: 28 Agosto 2011, 00:26 am »

El tema ya quedó resuelto, pero si alguna vez tenés que obtener el hwnd de un Main podes usar FindWindow. (Acabo de enterarme de esto, ya que también pensaba que este tipo de hwnd era unicamente propio de ventanas).

En efecto solo son de ventanas, los procesos no tienen hwnd.
Por ello El PROCESO MAIN() al igual que los demas, NO tienen hwnd.


Todas las aplicaciones de Visual Basic tienen una ventana de nivel superior invisible que procesa los eventos y mensajes. En el modo de diseño, la ventana es ThunderMain, en el modo de ejecución, la ventana es ThunderRT6Main. El RT6 refleja el versión de Visual Basic que se utiliza. Las dos ventanas tienen el nombre del proyecto o el nombre del archivo ejecutable como el título de ventana. Esto es donde se establece el icono de aplicación.


Dulces Lunas!¡.
« Última modificación: 28 Agosto 2011, 00:31 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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