大侠们好,我想实现这个模拟功能,不知道该如何做呢?一个程序a.exe,隐藏运行的,我想模拟鼠标点击它的指定位置。对我来说,此问题的难点是,它是隐藏的,却要点击它界面上的指定坐标。
这样能行吗?
1.获取它的句柄;
2.将要点击的指定屏幕坐标转化为它的窗口坐标
3.发送点击消息
小弟拙见,大侠莫见笑,请指教哈~

解决方案 »

  1.   

    试一下先使用EnumWindows遍历窗口,再使用GetWindowText和GetClassName判断窗口类或名称是否库你需要你窗口,如果是,则可使用SendMessage发送消息即可。
      

  2.   

    把屏幕坐标转换为窗口坐标的时候,坐标Y值为负值,转换为16进制过后就是8位了,怎么办呢?
    z.y=FFFFFFF4
    发送到的坐标高字节表示Y值,低字节表示X值,可这是负值,应该怎么转换呢?
      

  3.   

    PostMessage a, WM_LBUTTONDOWN, 0&, &HFFF401F7
    PostMessage a, WM_LBUTTONUP, 0&, &HFFF401F7
    发送了个点击消息给这窗口关闭的那个叉叉按钮,却没反应不能通过这样模拟关闭吗?
    我不想通过mouse_event这样的模拟点击,想通过postmessage来实现模拟,可以吗?
      

  4.   


    哪位能给段能运行成功的代码,我再加一百分给他
    大侠,快来啊。给我段用postmessage发送鼠标消息到指定坐标点的坐标的代码谢啦前提条件是,知道此点的屏幕坐标
      

  5.   

    我说下我的思路吧,实在找不到除了啥问题了,真恼人
    首先我打开一个空白记事本,用抓坐标工具找到它右上角的叉叉按钮的坐标,为1210,165
    然后
    Private Type POINTAPI ' 声明数据类型
    x As Long
    y As Long
    End Typesub main()
    Dim z As POINTAPI ' 变量
    Dim a As Long
    Dim pp As Long
    a = FindWindow(vbNullString, "无标题 - 记事本")
    ScreenToClient a, z
    pp = z.y * 65536 + z.x
    PostMessage a, WM_LBUTTONDOWN, 0&, pp
    PostMessage a, WM_LBUTTONUP, 0&, pp
    end sub就是这样了,请问下,到底是哪儿不对呢?
      

  6.   

    一、不要使用PostMessage,而是SendMessage。
    二、不要使用WM_LBUTTONDOWN,而是WM_COMMAND,wParam参数表示鼠标位置。
      

  7.   

    SendMessage a, WM_COMMAND, pp, ByVal 0& 
    这样吗?
    试了下,不行
    天。。
    脑袋晕了
      

  8.   

    自己做的一个窗体,对自己最大化都不行哎呀真的烦躁了
    SendMessage Me.hwnd, WS_MAXIMIZE, 0&, ByVal 0&
      

  9.   

    难道postmessage和sendmessage发送的很多消息,连记事本都不能处理吗?
    甚至是程序自己都不能?
    为什么上面那个对自己最大化都不行哎,消息这东西真麻烦
      

  10.   

    专门给你试了一下,可行。
    需要先明确的是,在Windows里面没有你所谓的“点击”消息,只有鼠标按下、鼠标松开、双击三种基本的鼠标消息。
    所以你要模拟点击,可以连续发送一个鼠标按下和一个鼠标松开消息。
    发送消息用SendMessage()函数
    参数:
    [Msg]
    WM_LBUTTONDOWN  鼠标左键按下
    WM_LBUTTONUP         鼠标左键松开
    [wParam]
    0即可
    [lParam]
    坐标,高16位y,低16位x
      

  11.   

    还有,sendmessage中wparam要用ByVal 0哦