按键精灵模拟后台鼠标通过BKgnd.dll里的leftclick来模拟后台点击鼠标左键,通过询问按键工程师,得知是用POSTMESSAGE来实现的。
为什么我用VB的POSTMESSAGE就实现不了,首先,目标窗口的句柄是完全没问题的,应该是POSTMESSAGE后面几个参数的问题,用按键可以实现连续点击,但是我用VB实现就是游戏人物朝一个方向走,这到底是为什么,哪位大侠给我解释一下,或者告诉我,怎么在VB中用BKgnd.dll的leftclick函数

解决方案 »

  1.   

    怎么在VB中用BKgnd.dll的leftclick函数
    不大可能
    人家吃饭的家伙
    让你随便调用他这么赚钱
    而且按键精灵模拟是很底层的鼠标和键盘钩子甚至可以说是跟驱动模拟媲美了跟vb实现不一样
    至于目标窗口的句柄事实上应该很可能不是对主窗口发送按键的可能是给某个具体的子窗体发送的
      

  2.   

    谢谢楼上的回答,关于句柄,我自己用的句柄和按键用的是一样的。
    就是POSTMESSAGE后面3个参数的问题,哪位大侠给我解释一下啊,100分呐
      

  3.   

    PostMessage  函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用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),消息参数不能包含指针。否则,操作将会失败。函数将再接收线程处理消息之前返回,发送者将在内存被使用之前释放。
      

  4.   

    模拟鼠标的
        a   =   PostMessage(mHwnd,   WM_LBUTTONDOWN,   0,   (X   And   &HFFFF)   +   (Y   And   &HFFFF)   *   &H10000)   
        a   =   PostMessage(mHwnd,   WM_LBUTTONUP,   0,   (X   And   &HFFFF)   +   (Y   And   &HFFFF)   *   &H10000)   
      '   a   =   PostMessage(mHwnd,   WM_LBUTTONDOWN,   0,   (X   And   &HFFFF)   +   (Y   And   &HFFFF)   *   &H10000)   
      '   a   =   PostMessage(mHwnd,   WM_LBUTTONUP,   0,   (X   And   &HFFFF)   +   (Y   And   &HFFFF)   *   &H10000)   
      

  5.   

    模拟键盘的
     POSTMESSAGE HWND1,WM_KEYDOWN,65,0 
      POSTMESSAGE HWND1,WM_KEYUP,65,0 
    这里WM_KEYUP表示键盘弹起,WM_KEYDOWN表示按下
    65表示按键的扫描码,65好像是大写的A
    最后那个是IParam:指定附加的消息特定的信息。
    这个比较复杂,对应鼠标来说,这个就是坐标
    对应按键来说,这个可以为0
      

  6.   

    你没有设置鼠标位置
    Public Function HMouseClickL(hwnd, X, Y) '后台发送鼠标左键命令
    Dim lParam As Long
    lParam = (Y * &H10000) + X
    PostMessage hwnd, &H200, 0&, ByVal lParam  '鼠标移动
    HDelay (35)
    PostMessage hwnd, &H201, 0&, ByVal lParam  '按下左键
    HDelay (35)
    PostMessage hwnd, &H202, 0&, ByVal lParam   '释放左键
    End Function
    至于为什么中间加延迟,经过测试,比如传世,梦幻,不加延迟,游戏消息还没接收到就弹起了,就无效了
    &H200是 WM_MOUSEMOVE常量,其他常量可以百度