[Solucionado] Alguna Alternativa de hWnd para del Timer (1 Modulo SIN FORM)

Iniciado por BlackZeroX, 9 Febrero 2009, 07:41 AM

0 Miembros y 1 Visitante están viendo este tema.

BlackZeroX

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 (vb) [Seleccionar]

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

sub main()
    SetTimer V.hwnd, 0, 2000, AddressOf TimerProc
end sub

Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    'Procesos
End Sub


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 (vb) [Seleccionar]

sub main()
    SetTimer V.hwnd, 0, 2000, AddressOf TimerProc
    do
        doEvents
    loop
end sub


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

Dulces Lunas.
The Dark Shadow is my passion.

Lambda

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

Karcrack

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

LeandroA

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

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


BlackZeroX

Cita de: LeandroA en  9 Febrero 2009, 18:48 PM
Hola este es con CreateWindowEx y utiliza WaitMessage  para que el bucle no se coma el procesador

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
The Dark Shadow is my passion.