FindWindow如何使用 从vb6到VB.NET
问题:vb.net 中使用 FindWindow 抓取窗口名称判断程序是否运行时候总是返回 “程序已运行”
在vb中使用FindWindow其实很容易的,只要网上找个例子来看一下代码编写方式就能弄明白了,而且基本上就可以掌握这一知识点。
FindWindow从vb6到VB.NET,有些微小的变化,就是在窗口句柄的类型上面。原先vb6里面的数值型都是32位的,而在vb.net里面Long型是64位的,Integer还是32位的,说到这里,相信大家都已经明白怎么解决上面的问题了。
以前是这样定义的:Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
我们在实际代码编写中,窗口句柄仍然是32位,但是在VB.NET使用FindWindow中,Integer表示32位,Long表示64位。这是调用API函数时需要注意。下面是正确的函数声明和例子:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim hwnd As Integer
hwnd = FindWindow(vbNullString, "商务通连接.txt - Notepad2") '抓取窗口名称(标题栏内完整的名称).
MsgBox(hwnd)
If (hwnd) Then
MsgBox("打开了")
Else
MsgBox("没有打开")
End If
End Sub
FindWindow函数是比较容易调用的,因为两个参数都是只读的,不会被API修改,所以在VB6和VB.NET中的差别只在于数据类型的不同。