专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VB Dotnet

如何不对

发布时间:2011-06-23 15:55:30 文章来源:www.iduyao.cn 采编人员:星星草
怎么不对啊
Public   Class   Form1
        Public   Declare   Function   FindWindow   Lib   "user32 "   Alias   "FindWindowA "   (ByVal   hwnd   As   String,   ByVal   lpText   As   String)   As   Long

        Private   Sub   Button1_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button1.Click
                Dim   jb   As   Long
                jb   =   FindWindow( "SciCalc ",   vbNullString)
                TextBox1.Text   =   jb.ToString

        End   Sub
End   Class

不管我开没开计算器,总是返回串数字

------解决方案--------------------
我认为这段代码在VB.NET下不能正常运行,因为VB中的Long在.NET中相当于Int32,所以您的数据类型可能写错了.我试了试,好像只有这样写才得到了计算器的句柄:

Public Class Form1

Public Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal hwnd As String, ByVal lpText As String) As Int32

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim jb As Int32
jb = FindWindow( "SciCalc ", Nothing)
TextBox1.Text = jb.ToString
End Sub
End Class

VB中的vbNullString在.NET中是Nothing.
------解决方案--------------------
Alias,FindWindow 是 FindWindowA 的别名,FindWindowA 是 Unicode API 中的实名

以下是MS官方文档的说明:

Win32 API中,为了在支持Unicode的同时保持对ANSI的支持,许多API都定义了两个原型,分别以W结尾和A结尾。
如LoadLibraryW和LoadLibraryA。
事实上,在定义LoadLibrary的头文件Winbase.h中,有如下定义
#ifdef UNICODE
#define LoadLibrary LoadLibraryW
#else
#define LoadLibrary LoadLibraryA
#endif // !UNICODE
因此,当您的程序中定义了UNICODE宏时,您的LoadLibrary就相当于LoadLibraryW;相反,如果没有定义UNICODE宏,则程序中的LoadLibrary就相当于LoadLibraryA。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: