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