VB ShowWindow没效果没反应

来源:百度知道 编辑:UC知道 时间:2024/09/21 14:26:32
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Const SW_SHOW = 5
‘声明API定义常量

Private Sub Timer1_Timer()

Dim hwnd As Long ’hwnd存储句柄
hwnd = FindWindow(vbNullString, "诛仙")
Label1.Caption = hwnd

End Sub

Private Sub Command1_Click()

ShowWindow hwnd, SW_SHOW ‘激活窗口

End Sub

实在找不到问题了,高手来帮帮忙啊,指条明路,要被逼疯了
运行后没反应,先谢谢了

如果你看他们的看不懂,我给你简单改一下

把 dim hwnd as long 这句放在通用申明处

谢谢,鼓掌

首先,你变量定义错误。你在Timer1_Timer()里面定义了一个hwnd,这是局部变量,在其它过程内不能用的,结果你在Command1_Click()中又用了,这里的hwnd就被解释为Me.hwnd了,结果成为了显示自己的窗口。

其次你ShowWindow参数不对,SW_SHOW只是让窗口活动化并显示,很多情况下比如最小化时并不能奏效,应该用SW_SHOWNORMAL。

还有,你让窗口显示了,它也不见得是活动窗口,可能还被其它窗口遮在后面,需要用SetForegroundWindow把它设置为活动前台,它才可以显示在其它窗口上面。

最后看看你的Timer1的Interval属性是不是设置为0了,改到50~1000比较合适。

修改后的代码:

Option Explicit

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Const SW_SHOW = 5
Private Const SW_SHOWNORMAL = 1

Dim hwnd1 As Long 'hwnd存储句柄

Priva