vb.net委托中的GetWindowText

问题描述

类模块:PublicClassMyEnumWindowsPrivateStructureWindowsinfoPublicTitlesAsStringPublicHwndsAsLongPublicPIDAsLongEndStructurePrivateDelegateFunctionCallBackPor(ByValhwndAsLong,ByVallParamAsLong)AsBooleanPrivateDeclareFunctionEnumWindowsLib"user32"(ByVallpEnumFuncAsCallBackPor,ByVallParamAsLong)AsLongPrivateDeclareFunctionGetWindowTextLib"user32"Alias"GetWindowTextA"(ByValhwndAsLong,ByVallpStringAsString,ByValcchAsLong)AsLongPrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsLong,ByVallpdwProcessIdAsLong)AsLongPrivateDeclareFunctionGetWindowTextLengthLib"user32"Alias"GetWindowTextLengthA"(ByValhwndAsIntPtr)AsIntegerPrivateWindows()AsWindowsinfoPrivateWindowsNumAsLongPrivateFunctionMyEnumWindowLoad(ByValhwndAsLong,ByVallParamAsLong)AsBooleanDimstrTitleAsString=Space(GetWindowTextLength(hwnd)+1)ReDimPreserveWindows(WindowsNum)Windows(WindowsNum).Hwnds=hwndGetWindowText(hwnd,strTitle,strTitle.Length)Windows(WindowsNum).Titles=strTitleGetWindowThreadProcessId(hwnd,Windows(WindowsNum).PID)WindowsNum=WindowsNum+1MyEnumWindowLoad=TrueEndFunctionPublicSubNew()CallEnumWindows(AddressOfMyEnumWindowLoad,0)EndSub

运行到18行时提示:对PInvoke函数“WindowsApplication1!WindowsApplication1.MyEnumWindows::GetWindowText”的调用导致堆栈不对称。原因可能是托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke签名的调用约定和参数与非托管的目标签名是否匹配。

解决方案

解决方案二:
string的长度(strTitle.Length)是整型的,不是长整型的。而你定义GetWindowText函数中的第三个参数需要的是长整型的,所以出错。
解决方案三:
你这完全是VB6的代码,除了class和new。hwnd是个指针,是IntPtr类型;lpdwProcessId是指向进程ID的指针,应该声明为ByReflpdwProcessIdAsUInteger;cch指明缓冲区大小,是Integer类型。详细的定义请参考pinvoke.net
解决方案四:
本人刚从6.0转向.net。。所以代码中有许多6.0的痕迹。。大家见谅啊。。欢迎大家指出来

时间: 2024-07-31 22:40:42

vb.net委托中的GetWindowText的相关文章

请问VB 6.0中怎么才能实现程序图标的拖动

问题描述 请问VB 6.0中怎么才能实现程序图标的拖动 请问VB 6.0中怎么才能实现程序图标的拖动,添加程序到程序收纳盒的功能,并且可以执行这个程序? 解决方案 可以在你的窗体的oledrogover事件里接收你收到的文件.

查询算法-vb将list中所有内容作为字段名查询

问题描述 vb将list中所有内容作为字段名查询 如题,如何将vb的list控件中所有内容作为字段名查询???????????

串口通信-VB在components中添加MSComm控件

问题描述 VB在components中添加MSComm控件 VB中在components添加mscomm控件时为什么会显示"--could not be loaded"??求解...谢谢 解决方案 VB.NET直接用SerialPort控件. 解决方案二: MFC添加两个MSComm控件后提示'CMSComm' : 'class' type redefinition

vb 在access中取文本精度数据,

问题描述 vb 在access中取文本精度数据, 在access数据库中表a内有精度这一列内容 ,是文本格式保存的 如下: Format #,##0.000 #,##0.00 ##0.0 ##0 在使用vb取出数据是精度不能准确的取出来,(上面的第一,二,三行取出来后都变成了 #,##0.0) 解决方案 取出来再调用format.你调用format的方式不对.检查代码

VB 6.0中ListView的图标和文字的字体怎么单独设置?

问题描述 VB 6.0中ListView的图标和文字的字体怎么单独设置? VB 6.0中ListView的图标和文字的字体怎么单独设置?我想让打开过的图标放在开头加粗,怎么做? 解决方案 字体用font属性设置,图标用listitem.smallicon/largeicon设置

怎样在vb.net+sql中查询数据表里某一列

问题描述 怎样在vb.net+sql中查询数据表里某一列 解决方案 解决方案二:??不明白你想问的是什么.从字面理解你是想查询某个表的一个列所有内容.SQL:select某字段from表如果是有条件查询,就在表后面加上where字句就可以了解决方案三:觉得和vb没关系,纯sql问题解决方案四:同感

vb net-vb.net 中IAccessible怎样声明

问题描述 vb.net 中IAccessible怎样声明 vb.net 中IAccessible怎样声明 Private Declare Function AccessibleChildren Lib "oleacc" (ByVal paccContainer As IAccessible, ByVal iChildStart As Long, ByVal cChildren As Long, rgvarChildren As Object, pcObtained As Long) A

在VB.NET应用中使用MySQL的方法_Mysql

 绪言 在Visual Studio中使用向导连接到MySQL数据库是一件相当棘手的事情.因为MySQL并不在VS2012默认支持的数据库中(比如SQL Server).在本文中我将介绍如何使用VB.NET连接到MySQL数据库并且执行SQL语句(SELECT,UPDATE,DELETE),同时我会展示如何将MySQL连接器导入(connectors)到Visual Studio 2012中. 使用代码     你须要从http://dev.mysql.com/downloads/connect

vb.net-在VB.NET中怎样调用第三方的 .DLL

问题描述 在VB.NET中怎样调用第三方的 .DLL 小弟初学VB.NET,现在遇到一个问题: VB2010怎样调用一个第三方的DLL? 例如:Prodave6.DLL (西门子开发的一个库,里面有和PLC通讯的函数...), 我尝试在项目中添加引用,但是提示 "未能添加对.........Prodave6.dll 的引用.请确保此文件可访问并且是一个有效的程序集或COM组件." 请问这是什么原因? 解决方案 vb.net调用外部DLLVB.net中调用CC++ 的DLLvb.net