软件注册站
热情软件屋

 
在VB.NET中如何使用 FindWindow
编号: QA004883    
建立日期: 2004年9月3日 最后修改日期: 2004年9月3日
所属类别: Visual Basic - Windows API
   
    操作系统: 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://china.zealsoft.com/articles/vbnet/)一书第21节有关于API调用的专门内容,详细讨论了各种调用的情况,还介绍了DllImport方式声明DLL和如何编写DLL,建议你参考一下。

    

此问题由李海回答。

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

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio