VB调用 SetTimer 失败,附源码,等高手解答

窗体代码:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Dim lngTimerID As Long
Dim hwnds As Long
Private Sub Command1_Click()
hwnds = FindWindow(vbNullString, "Program manager")
lngTimerID = SetTimer(hwnds, 0, 2000, AddressOf TimerProc)
If lngTimerID > 0 Then
MsgBox "启用定时器成功"
Else
MsgBox "启用定时器失败"
End If
End Sub
Private Sub Command2_Click()
KillTimer hwnds, lngTimerID
End Sub

模块代码:
Function TimerProc()
MsgBox Now
End Function

错误了

第1个回答  2013-04-14
问题是这一行
hwnds = FindWindow(vbNullString, "Program manager")
你把当前窗体的CAPTION 改成这个了吗 Program manager追问

你的意思是说,SetTimer 只能是本窗体吗? 那里面的句柄不能设置其他进程吗

追答

可以是其它程序,创你的程序启动时,指定的那个程序应该已开启,否则就是启用失败

追问

hwnds = FindWindow(vbNullString, "Program manager")

就个就是系统进程,是已经开启的。那为何现在设置出错?

追答

"Program manager"不是进程的名字,而是这个程序的标题栏的名字

第2个回答  2017-01-25
timerproc的回调签名竟然没有参数。。。。
第3个回答  2013-04-23
hwnds好像不能是其它进程的窗口吧!虽然并不限定是本窗口,但至少应该是本进程下的窗口。
当然如果是0也可以。
相似回答