网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月05日漏签0天
vb吧 关注:156,133贴子:1,166,132
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 32回复贴,共1页
<<返回vb吧
>0< 加载中...

sendemessage/postmessage指定坐标点击Vb无效?汇编居然可以?

  • 只看楼主
  • 收藏

  • 回复
  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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, lParam As Any)
Private Declare Function PostMessage& Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'API引用说明
Private Sub Command1_Click()
x = 221
y = 280
'221,280 为登录按钮在该窗体中的坐标
Dim lParam As Long
lParam = x + y * &H10000 '组合xy坐标
hw = FindWindow("MSPaintApp", "未命名 - 画图")'获取画图工具句柄
hw = FindWindowEx(hw, 0, "Afx:1000000:8", vbNullString)'这个是画图工具画画的那个区域的句柄....
Call SetActiveWindow(hw)
Call SetForegroundWindow(hw)
'Call PostMessage(hw, WM_LBUTTONDOWN, 0&, (x * 65536) + y)
'Call PostMessage(hw, WM_LBUTTONUP, 0&, (x * 65536) + y)
Call SendMessage(hw, WM_LBUTTONDOWN, 0, lParam)
Call SendMessage(hw, WM_LBUTTONUP, 0, lParam)
'Call SendMessage(hw, WM_LBUTTONDOWN, 0, &H11800DD)
'Call SendMessage(hw, WM_LBUTTONUP, 0, &H11800DD)
End Sub
以前语句检查了N次,没错的。就连鼠标按下和释放我都用&H201和&H202都代替试过,他就是没有预期的效果,本身他应该就在画板上面画画的...当时我是选了喷枪的功能,这样的话,左键如果点击就会在画板产生一个大黑点,实际上却没。用汇编坐标使用011800DDh,亲测可用!亲们,不用讲mouse_event这之类的,早就会了....我只是想使用sendemessage达到这个效果,请不要扯其他函数。谢谢,跪求有能力者讲解原因。。。。


  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一开始我是针对QQ的登录窗口进行操作的,所以坐标那个位置的注视是那样写的,但是一直没有达到点击登陆按钮的效果,我用汇编达到了。之后我又试了操作记事本,还是不行,这又才试了画板......发现还是不行


2025-06-05 07:21:31
广告
  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在线等!!!....昨天这东西折磨了我一整天,到凌晨2点才睡。今天继续,不搞定他,我心里要有多难受....


  • Chino
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用lParam传值的话要Byval好不好,不然搞个地址传过去当然错了


  • larva007
  • 暴力枚举
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
错的离谱啊


  • 《顾名思义》
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我终于知道什么叫汇编了。。。


  • 《顾名思义》
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你这样写Lparam试试
Dim LPARAM(1) As Integer
LPARAM(0)=X
LPARAM(1)=Y


  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我在百度找了很多资料,有的没用ByVal,一样是ikeyi的,只是我很不理解的是,是不是我电脑坏了,我怎么写他就是不执行


2025-06-05 07:15:31
广告
  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
MouseClick 过程
'作用:向某个窗口的某个位置发送鼠标单击事件
'输入:lHwnd 窗口句柄,nX X坐标, nY Y坐标(坐标单位为像素)
'输出:无
Public Sub MouseClick(ByVal lHwnd As Long, ByVal nX As Integer, ByVal nY As Integer)
Dim lParam As Long
lParam = nX + nY * &H10000 '组合xy坐标
Call PostMessage(lHwnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam) '鼠标按下
Call PostMessage(lHwnd, WM_LBUTTONUP, 0, lParam) '鼠标抬起
End Sub
-------------------------------------------------------------------------------
以上是别人例子中一个,表示,我用了,无效果。


  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我找到了10年有个朋友在本吧发过一个类似求助的帖子,但是好像最后也没解决,他说他用Vc亲测可用,但是Vb执行不了,别人给出的方法我也用了,不行的.....


  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
设置了sendmessage的第4个参数,即SendMessage hwnd, WM_LBUTTONDOWN, 0, x+y*65536 (x,y为坐标) 成功点击,但是,点击的坐标和输入的坐标有偏差,并且还是要激活当前窗口才行。
------------------------------------------------------------
找的别人的资料.....他们居然可以?我居然不行?我新建一个工程重新写个试试....


  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Private Sub Command1_Click()
Dim h As Long, h1 As Long, xy As Long
h = FindWindow(vbNullString, "窗口标题") '父窗口句柄
h1 = FindWindowEx(h, 0, "按钮类名", "按钮标题") '按钮句柄
xy = Y坐标 * &H10000 + X坐标 'X、Y坐标,记得不能放反了,如果不知道可以用SPY++查出,如果不知道我可以发我做的找坐标的给你
PostMessage h1, WM_LBUTTONDOWN, 0, ByVal xy '按下按钮
PostMessage h1, WM_LBUTTONUP, 0, ByVal xy
End Sub
-----------------------------------------
还是别人的例子。。。。


  • 《顾名思义》
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
原来如此。。。事件并不是没有出现而是坐标不对。。。


  • 《顾名思义》
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

X,Y的值,不知道偏到哪去了。。


2025-06-05 07:09:31
广告
  • 本爷叫你呐
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢吧友热情帮我解决问题,虽然到现在我还不知道我哪里错了,但是我新建一个工程重新写了一遍.....居然可以了 = =。。。。给大家讲下经验,我使用的坐标是高低位十六进制
PostMessage hw, WM_LBUTTONDOWN, 0, &H11800DD '按下
PostMessage hw, WM_LBUTTONUP, 0, &H11800DD '释放
&H11800DD就是高低位十六进制坐标,真实坐标为(221,280),将221转成十六进制是DD,将280转成十六进制是118.因为要凑够八位数,Y在前(前四位,不够用0补),X在后(后四位,不够用0补),所以就是011800DD,以十六进制显示前面就要加&H,至于代码里面我为什么写的是&H11800DD,因为118前面的0程序默认忽略了,虽然我也不知道为什么这样,但是具体坐标我使用的这种方法,参照的汇编的.....希望遇到这种情况的朋友看了我的帖子也能解决问题了。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 32回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示