冰 点 网 络 菜 园 种 自 己 的 菜,给 自 己 吃

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中的差别只在于数据类型的不同。        

留言列表
发表留言
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。