java吧 关注:1,243,310贴子:12,718,480
  • 18回复贴,共1

大神求解答!!!查遍网上WIN32API和JNAAPI都没看见的!!!

只看楼主收藏回复

public class Mouse {
private static User32 user32 = User32.INSTANCE;
//模拟鼠标左键单击public static void click(int hwnd, int x, int y) {
int v = x + (y << 16);
user32.PostMessageA(hwnd, 513, 1, v);
user32.PostMessageA(hwnd, 514, 0, v);}
}
Mouse.click(hwnd, a.getY() * 31 + 17,a.getX() * 35 + 187);
Mouse.click(hwnd, b.getY() * 31 + 17,b.getX() * 35 + 187);
求解答PostMessage后面3个参数的意思,然后我要模拟个鼠标按下 后 移动 再弹起,参数应该怎么写


IP属地:广东1楼2013-08-30 11:51回复
    @alwing @windsun_ul


    IP属地:广东2楼2013-08-30 11:55
    回复
      http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944(v=vs.85).aspx
      PostMessage(hwnd, WM_LBUTTONDOWN, 0, 0)
      PostMessage(hwnd, WM_LBUTTONUP, 0, 0)


      IP属地:湖北3楼2013-08-30 11:58
      收起回复
        函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。
        函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
        参数
        hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
        HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。
        NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
        Msg:指定被寄送的消息。
        wParam:指定附加的消息特定的信息。
        IParam:指定附加的消息特定的信息。
        返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
        备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage来获得应用程序间通信的独特的消息。
        如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage,SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失败。函数将再接收线程处理消息之前返回,发送者将在内存被使用之前释放。
        速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。


        IP属地:广东5楼2013-08-30 12:09
        回复
          wParam该参数告诉你各个虚拟键有没有被按下,可能包含多个下列值:
          MK_CONTROL(0x0008) CTRL键被按下
          MK_LBUTTON(0x0001) 鼠标左键被按下
          MK_MBUTTON(0x0010) 鼠标中键被按下
          MK_RBUTTON(0x0002) 鼠标右键被按下
          MK_SHIFT(0x0004) SHIFT键被按下
          MK_XBUTTON1(0x0020) 第一个 X 按钮被按下
          MK_XBUTTON2(0x0040) 第二个 X 按钮被按下
          lParam这是一个32位整数型参数。低16位表示相对于客户区左上角的 X 坐标高16位表示相对于客户区左上角的 Y 坐标


          IP属地:广东6楼2013-08-30 12:43
          收起回复
            那个513,514是什么意思啊


            7楼2014-04-21 21:16
            收起回复
              上面那段代码 我使用了 但是没有效果是什么原因呢。。user32.PostMessageA(hwnd, 513, 1, v);
              user32.PostMessageA(hwnd, 514, 0, v)返回的都是1


              IP属地:吉林8楼2018-06-21 16:28
              回复