| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5592 人关注过本帖
标题:关于PostMessage函数发鼠标消息的位置像素的设置问题!
取消只看楼主 加入收藏
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
结帖率:37.14%
收藏
 问题点数:0 回复次数:5 
关于PostMessage函数发鼠标消息的位置像素的设置问题!
Declare Function PostMessage& Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)

请问下面代码中第三个和第四个参数有没有设置错误,因为我搞来搞去也无法在指定的(700,30)编辑框位置发出鼠标点击消息!
PostMessage 0, WM_LBUTTONDOWN, 700, 30
PostMessage 0, WM_LBUTTONUP, 700, 30

如有错误请帮忙纠正,请高手指教指教!
2016-06-01 01:07
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
以下是引用wmf2014在2016-6-1 10:23:29的发言:

显然楼主对PostMessage使用方法理解不透,PostMessage是对制定窗口句柄发消息,比如通过按command2模拟command1按钮按动,代码如下:
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Sub Command1_Click()
  MsgBox "ok"
End Sub

Private Sub Command2_Click()
  PostMessage Command1.hwnd, &H201, 0, 0  'WM_LBUTTONDOWN=&H201
  PostMessage Command1.hwnd, &H202, 0, 0  'WM_LBUTTONUP=&H202
End Sub

你的代码只能对VB的窗体应用程序起作用,但对于其它设有钩子的应用程序(如:QQ的登录界面)就一点效果都没有,本人只是想将鼠标模似移动到相对像素位置后再模似点击,从而实现绕过那个钩子程式,请你帮帮忙“鼠标模似移动”+“鼠标模似点击”!

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-02 00:43
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
回复 3楼 hjxlj
本人只是想对其它设有钩子的应用程序按扭(如:QQ的登录界面内的按扭)实施鼠标点击效果,将鼠标模似移动到相对像素位置后再模似点击,从而实现绕过那个钩子程式的目的,你能够帮帮忙吗——“鼠标模似移动”+“鼠标模似点击”!

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-02 00:49
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
以下是引用wmf2014在2016-6-2 06:38:31的发言:

模拟鼠标操作指定位置也很简单,使用其他api,下面代码运行后,在显示桌面的情况下,点击按钮,会双击打开“我的文档”(我的是xp系统),如果不能执行双击,则需要关闭360等各种保护。
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Sub Command1_Click()
  SetCursorPos 30, 30   '将鼠标移到桌面30,30处,我的xp系统桌面是“我的文档”
  mouse_event &H2 Or &H4, 0, 0, 0, 0
  mouse_event &H2 Or &H4, 0, 0, 0, 0  '连续两次单击就是双击,打开“我的文档”
End Sub

这个mouse_event函数,只要点击的窗体移动了,就没有效果了,请问有没有方法获取指定窗体的位置,然后在该窗体的起始座标进行模拟鼠标的相对移动(即无论窗体移动到哪个位置或是最小化,也能够在指定的窗体内进行模拟鼠标的移动及点击指定按扭!)
请高手再指点指点吧!

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-03 16:40
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
以下是引用hjxlj在2016-6-3 17:27:42的发言:

本来想给你指点,叫你先把之前已解决的帖子先结帖,楼主为何置若罔闻?
你不就是想后台模拟鼠标点击吗?且不说你这个帖子问题点数为0,连之前已解决的问题也不结帖,你这是什么态度?限你两天内把之前的帖子结了,否则删帖处理。

你的要求,我已经做了,请问能再多给指点吗?

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-04 00:13
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
以下是引用不说也罢在2016-6-4 14:57:08的发言:



不及时结贴,的确令人不爽。请楼主以后及时结贴。
今天闲来无事,也来凑凑热闹


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type


Private Sub Command1_Click()
    '根据楼主需求,模拟点击计算器按键9
    Dim hwnd As Long
    Dim BtHeight As Long
    BtHeight = GetSystemMetrics(4)
    hwnd = FindWindow(vbNullString, "计算器")
    If hwnd = 0 Then
        MsgBox "计算器没有运行!"
        Exit Sub
    End If
    Dim p1 As RECT
    GetWindowRect hwnd, p1'用了这个API,计算器窗口怎么移动,都可以实现点击它
    SetCursorPos p1.Left + 110, p1.Top + BtHeight + 180 '鼠标移动到计算器9的按键上
    mouse_event &H2 Or &H4, 0, 0, 0, 0'模拟按下了9
End Sub

请问能不能用以下代码取替?
***************************************
Public Const WM_MOUSEMOVE = &H200
Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Type POINTAPI
    x As Long
    y As Long
End Type

Type WINDOWPLACEMENT
    Length As Long
    flags As Long
    showCmd As Long
    ptMinPosition As POINTAPI
    ptMaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type
*********************************************(上述为GetWindowPlacement这个API函数要用到模块)
(以下代码实现模拟鼠标在指定窗体移动到中央,请问以下语句错误在哪里?)
……
GetWindowPlacement WinID, Wt
PostMessage WinID, WM_MOUSEMOVE, 0, Wt.rcNormalPosition.Right / 2 + Wt.rcNormalPosition.Bottom / 2
……

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-05 16:37
快速回复:关于PostMessage函数发鼠标消息的位置像素的设置问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017515 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved