在VB.NET中如何使用 FindWindow

Posted on 2005-07-11 19:02  flourish  阅读(4282)  评论(0)    收藏  举报
 操作系统: windows xp sp2
    编程工具: vb.net
    问题: 请问在vb.net中如何使用
    findwindowa
    findwindowexa
    sendmessagea
    这些api函数好像和在vb6中不太一样。VB.NET中的句柄是多少位的?
    如下定义
     Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    

    定义成long后返回 8C000100050150h
    如定义成int32 得到的值 50150h和vb6中一样。
    findwindowa的两个参数在vb.net中如何使用?
    设定一个参数另一个为空无法得到句柄。
    水平: 刚入门(王佳)
   
    窗口句柄仍然是32位,但是在VB.NET中,Integer表示32位,Long表示64位。这是调用API函数时需要注意。下面是正确的函数声明和设定一个参数为空的例子:
     Private Declare Auto Function FindWindow Lib "user32" ( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Integer
    
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     Dim hWnd As Integer
     hWnd = FindWindow(vbNullString, "收件箱 - Outlook Express")
     If hWnd Then
     MsgBox("找到Outlook Express窗口!")
     Else
     MsgBox("未找到Outlook Express窗口!")
     End If
     End Sub
    

    FindWindow函数是比较容易调用的,因为两个参数都是只读的,不会被API修改,所以在VB6和VB.NET中的差别只在于数据类型的不同。而对于GetSystemDirectory这样的函数就不同了,因为参数是可修改的,而在VB.NET中String是不可以修改的,所以必须借助于StringBuilder类才能调用。在我的书《深入研究 Visual Basic.NET》(http://zealsoft.nease.net/articles/vbnet/)一书第21节有关于API调用的专门内容,详细讨论了各种调用的情况,还介绍了DllImport方式声明DLL和如何编写DLL,建议你参考一下。

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, Windows API, win32, api, windows api, gdi32, kernel

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3