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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Solucionado] Alguna Alternativa de hWnd para del Timer (1 Modulo SIN FORM)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Alguna Alternativa de hWnd para del Timer (1 Modulo SIN FORM)  (Leído 3,789 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
[Solucionado] Alguna Alternativa de hWnd para del Timer (1 Modulo SIN FORM)
« en: 9 Febrero 2009, 07:41 am »

Bueno la pregunta es como generar un timer pero en un modulo o modulo de clase ojo en base a apis pero SIN el hwnd de un formulario es decir solo tengo el modulo y nada mas nada extra solo un modulo con funciones y un timer hecho en API pero no funciona de hecho intente tomar el hwnd de otro lado como el escritorio y nada xP

en si el codigo del Timer API es este :

Código
  1. Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  3.  
  4. sub main()
  5.    SetTimer V.hwnd, 0, 2000, AddressOf TimerProc
  6. end sub
  7.  
  8. Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
  9.    'Procesos
  10. End Sub
  11.  

Bueno en si como le hago para generar un hwnd pero sin tomarlo de un formulario esa es mi gran dudo creo que si se puede pero como  ¬¬"

a y como cancelar el termino de mi proceso es decir que siga corriendo o en espera pero con el timer activo xP son solo dos dudas que traigo ensima en mi segunda duda puse un

Código
  1. sub main()
  2.    SetTimer V.hwnd, 0, 2000, AddressOf TimerProc
  3.    do
  4.        doEvents
  5.    loop
  6. end sub
  7.  

Pero gasta el procesador como demonio ¬¬" bueno alguien tiene algunas pistas o soluciones por hay xD gracias de antemano

Dulces Lunas.


« Última modificación: 10 Febrero 2009, 04:28 am por ░▒▓BlackZeroҖ▓▒░ » En línea

The Dark Shadow is my passion.
Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: Alguna Alternativa para Timer (por api) para el hWnd
« Respuesta #1 en: 9 Febrero 2009, 12:19 pm »

necesitas tener un HWND y en el caso de que no lo especifiques tomara el de la ventana del thread actual, mas que nada lo necesitas por que esa ventana necesita procesar el mensaje WM_TIMER


En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Alguna Alternativa para Timer (por api) para el hWnd
« Respuesta #2 en: 9 Febrero 2009, 14:39 pm »

No es necesario pasarle un Handle, puedes simplemente pasarle como handle el 0, pero si lo prefieres puedes crear una ventana con el CreateWindowEx

Saludos ;D
En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: Alguna Alternativa para Timer (por api) para el hWnd
« Respuesta #3 en: 9 Febrero 2009, 18:48 pm »

Hola este es con CreateWindowEx y utiliza WaitMessage  para que el bucle no se coma el procesador

Código:
Option Explicit

Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long

Dim bEndLopp As Boolean
Dim Counter As Long
Sub main()
    Dim mWnd As Long
    mWnd = CreateWindowEx(0, "STATIC", "", 0, 0, 0, 0, 0, 0, 0, App.hInstance, 0&)
    SetTimer mWnd, 0, 1000, AddressOf TimerProc
    Do While bEndLopp = False
        DoEvents
        WaitMessage
    Loop
    KillTimer mWnd, 0
    DestroyWindow mWnd
End Sub
 
Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)

    Counter = Counter + 1
    Debug.Print Counter
    If Counter = 10 Then
        bEndLopp = True
    End If
   
End Sub

En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Alguna Alternativa para Timer (por api) para el hWnd
« Respuesta #4 en: 10 Febrero 2009, 04:25 am »

Hola este es con CreateWindowEx y utiliza WaitMessage  para que el bucle no se coma el procesador

Código:
Option Explicit

Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long

Dim bEndLopp As Boolean
Dim Counter As Long
Sub main()
    Dim mWnd As Long
    mWnd = CreateWindowEx(0, "STATIC", "", 0, 0, 0, 0, 0, 0, 0, App.hInstance, 0&)
    SetTimer mWnd, 0, 1000, AddressOf TimerProc
    Do While bEndLopp = False
        DoEvents
        WaitMessage
    Loop
    KillTimer mWnd, 0
    DestroyWindow mWnd
End Sub
 
Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)

    Counter = Counter + 1
    Debug.Print Counter
    If Counter = 10 Then
        bEndLopp = True
    End If
   
End Sub


o este ultimo esta genial gracias, aun que si te digo que me hubieras hecho pensar pero igual gracias.

Dulces Lunas
En línea

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

Ir a:  

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