sendmessage发送WM_SETTEXT消息的问题

singlion 2008-07-09 05:06:28
我想使用sendmessage往另一个程序中的编辑框中输入内容
模块中
Public Const WM_SETTEXT = 12
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)

窗体中
Dim i As Long
Dim s As String
s = "Hello"
i = SendMessage(asktao_hwnd, WM_SETTEXT, 0, ByVal s)
'asktao_hwnd是在之前获得的游戏窗口的句柄,已经证明有效(使用FlashWindow时能看到效果)
但是执行这些代码时出现错误:

实时错误49
DLL调用约定错误
...全文
1621 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
singlion 2008-07-10
  • 打赏
  • 举报
回复
昨晚用MiniSpy查看问道游戏窗口的句柄,发现问道根本没有什么控件,很可能是用的类似Flash的技术做的,在我们看来,整个窗体就是一个整体了,也就是说,无论我怎样努力,得到的只能是窗口的句柄,而没有编辑框的句柄。这是比较让人绝望的。

假如一个Flash中有一个可以用来输入的地方,显然我们无法得到那个“地方”的句柄,那么,还有没有办法往那里发送内容?我快疯了
singlion 2008-07-10
  • 打赏
  • 举报
回复
回复10楼
复制上来的时候没复制完整,不是那里的问题。真正的问题还是4楼解决的,和微软的这个帖子一样的问题http://support.microsoft.com/kb/187918/zh-cn
singlion 2008-07-10
  • 打赏
  • 举报
回复
汗,到现在还没吃完饭
Sandrer 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 singlion 的回复:]
回复10楼
复制上来的时候没复制完整,不是那里的问题。真正的问题还是4楼解决的,和微软的这个帖子一样的问题http://support.microsoft.com/kb/187918/zh-cn
[/Quote]

问题是我每次都是和1楼一样的定义,然后像你一样的调用~也没出现过问题!



现在的游戏,只有一个主窗体,窗体内(游戏画面)都是用DX函数或者OpenGL画上去的。
singlion 2008-07-10
  • 打赏
  • 举报
回复
找内存地址需要什么工具?
hanyue112 2008-07-10
  • 打赏
  • 举报
回复
FindWindowEx 也许能救你,但是如果你用SPY++之类的工具看不去那个TEXTBOX是什么,那你最好还是找到内存地址,直接写入吧。(有点挑战),不过做外挂的话,这个就不算挑战了。本身也要这么干
Sandrer 2008-07-09
  • 打赏
  • 举报
回复
不知道楼主注意到你的SendMessage声明和1楼的有什么区别没有??

你的SendMessage函数声明其它地方都没有错,就是没有返回类型
fvflove 2008-07-09
  • 打赏
  • 举报
回复
晕,给编辑框.当然要取得编辑框的句柄,取得编辑框的句柄后.请问道的窗口那个句柄改为编辑框的句柄就行了,
怎么取得编辑框的句柄.等我吃完饭后和你研究.
但是你要把你的代码给的.
邮箱 fvfrto@163.com
singlion 2008-07-09
  • 打赏
  • 举报
回复
汗,我的问题还没完,解决的只是一小部分
fvflove 2008-07-09
  • 打赏
  • 举报
回复
如果可以了,那就结贴吧.
singlion 2008-07-09
  • 打赏
  • 举报
回复
我本来是想把一些字符串发送到某游戏窗口的拥有输入焦点的编辑框中,但是使用这个办法的结果是游戏窗口的标题被改掉了!

如何做才能达到我的真正目的(把字符串发送到编辑框中)?
singlion 2008-07-09
  • 打赏
  • 举报
回复
singlion 2008年07月09日 17点54分10秒 说:
嗯,把最后一个参数改为ByVal lParam As Any就可以了
嗷嗷叫的老马 2008-07-09
  • 打赏
  • 举报
回复
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _ 
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

i = SendMessage(asktao_hwnd, WM_SETTEXT, 0, VarPtr(s) )

fvflove 2008-07-09
  • 打赏
  • 举报
回复
fvflove 2008年07月09日 17点37分40秒 说:
那把我那个复制过去.除去Private 也一样.
fvflove 2008年07月09日 17点38分30秒 说:
因为我是放在窗口中调试的,不用放在模块中,所以就用了Private.
当然在模块中是用Public.
singlion 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 singlion 的帖子:]
模块中
Public Const WM_SETTEXT = 12
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
[/Quote]

是在模块中声明的,不用加Private吧
fvflove 2008-07-09
  • 打赏
  • 举报
回复
你将Sendmessage的声明改成这样:
[Code=VB]


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

[/Code]

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧