VB SendMessage出错

代码如下:PrivateSubCommand1_Click()a=FindWindow("Notepad","无标题-记事本")Text1.Text=aDimTempSt... 代码如下:
Private Sub Command1_Click()
a = FindWindow("Notepad", "无标题 - 记事本")
Text1.Text = a
Dim TempStr As String
TempStr = Space(255)
StrLong = Len(TempStr)
Rtn = SendMessage(a, WM_GETTEXT, StrLong, TempStr)
TempStr = Trim(TempStr)
MsgBox TempStr
End Sub
帮我解决下列问题:1.为什么会出错,正确的类型是什么?2.当我把
SendMessage(a, WM_GETTEXT, StrLong, TempStr)

中的a换成具体"2622008"(用FINDWINDOW找出的),只会弹个空的MSGBOX,没内容...3.请给个正确的通过句柄获取标题内容的例子(SendMessage中的WM_GETTEXT),好的还可以加分~
展开
 我来答
sailingzyf
2012-07-16 · TA获得超过1329个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1054万
展开全部
1、你的SendMessage应该用的是默认的写法,第四个参数是 as any,传递string变量时会出错,这和VB中字符串的存储方式有关。直接用的话就是byref,传递给api的是string变量本身的地址而不是字符串的起始地址,api函数往string变量的地方写入字符,内存访问违规。将第四个参数的声明改成 byval xxx as string。另外变量记得声明,尤其是往外传递参数的时候,这个例子中虽然没错,但难保别处不错。

2、改过之后能获得窗体标题,我验证过了。
3、如果你是为了练习sendmessage的话无所谓,如果是为了取标题用GetWindowText和GetWindowTextLength更好理解些。
追问
请给下代码,我是菜鸟,谢谢。因为byval  xxx as string会出错...
追答
兄弟,我复制的你的代码,改成byval后没错啊……
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_GETTEXT = &HD
Private Sub Form_Load()
Dim a As Long, StrLong As Long, Rtn As Long
a = FindWindow("Notepad", "无标题 - 记事本")
Dim TempStr As String
TempStr = Space(255)
StrLong = Len(TempStr)
Rtn = SendMessage(a, WM_GETTEXT, StrLong, TempStr)
TempStr = Trim(TempStr)
MsgBox TempStr
End
End Sub
上面这几行,我确定没错,如果你还是出错的话……电脑的问题了……
网易云信
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同... 点击进入详情页
本回答由网易云信提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式