因特殊需要,不想用getpos和setpos使鼠标移到某处进行点击后再将其返回,想用其它方法,哪们能帮助?谢谢

解决方案 »

  1.   

    如果是要对一个按钮进行单击操作,可以用如下语句:var hbutton:HWND;
        sendmessage(hbutton,BM_CLICK,0,0);
    你想单击哪个控件,只要知道它的句柄,向它发送单击消息就行了.
      

  2.   

    API:Mouse_Event就可以了
    不过参数是相对值,要用EnumDisplaySettings的结果计算的例如点击RX,RY
    EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
           P.X := Trunc(RX/DeviceMode.dmPelsWidth*65535);
           P.Y := Trunc(RY/DeviceMode.dmPelsHeight*65535);
           Sleep(100);
           GetCursorPos(R);
           R.X := Trunc(R.X/DeviceMode.dmPelsWidth*65535);
           R.Y := Trunc(R.Y/DeviceMode.dmPelsHeight*65535);
           Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE or MOUSEEVENTF_LEFTDOWN, P.X, P.Y, 0, 0);
           Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
           // restore
           Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, R.X, R.Y, 0, 0);
      

  3.   

    这个效果和getpos , setpos效果是一样的,我不想在模拟的时候把鼠标移过去.而是保持鼠标不变(而不是看起来不变),从而达到效果.
      

  4.   

    1、首先我们要知道现在鼠标的位置(为了好还原现在鼠标的位置)所以我们就要用到API函数GetCursorPos,它的使用方法如下:
    BOOL GetCursorPos(    LPPOINT lpPoint  // address of structure for cursor position  
       );
    2、我们把鼠标的位置移到要到人物走到的地方,我们就要用到SetCursorPos函数来移动鼠标位置,它的使用方法如下:
    BOOL SetCursorPos(    int X, // horizontal position  
        int Y  // vertical position
       );
    3、模拟鼠标发出按下和放开的动作,我们要用到mouse_event函数来实现,具休使用方法用下:
    VOID mouse_event(    DWORD dwFlags, // flags specifying various motion/click variants
        DWORD dx, // horizontal mouse position or position change
        DWORD dy, // vertical mouse position or position change
        DWORD dwData, // amount of wheel movement
        DWORD dwExtraInfo  // 32 bits of application-defined information
       );
    在它的dwFlags处,可用的事件很多如移动MOUSEEVENTF_MOVE,左键按下MOUSEEVENTF_LEFTDOWN,左键放开MOUSEEVENTF_LEFTUP,具体的东东还是查一下MSDN吧~~~~~
    好了,有了以前的知识,我们就可以来看看人物移走是怎么实现的了:  getcursorpos(point);
      setcursorpos(ranpoint(80,windowX),ranpoint(80,windowY));//ranpoint是个自制的随机坐标函数
      mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
      mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
      setcursorpos(point.x,point.y);
      

  5.   

    在移动点击时ShowCursor(false)将鼠标隐藏,完成后再显示出来。
      

  6.   

    这个话题比较有趣,我只知道一些控件可以sendmessage来模拟,但有的不行,不知道楼主为什么要这么苛刻的条件阿。
      

  7.   

    to saien(有问必答):请看你上面我说的那段话.to goldvale(全局变量):它是一个游戏鼠标,所以不可能隐藏.to sundayboysII(空):我在设计一个游戏外挂,实现的是自动拾取的功能.
      

  8.   

    朋友,这样可以达到你的要求:
    若hwindow为窗口化的游戏窗口的句柄,当你把鼠标移出游戏窗口后,你会看到游戏窗口中的鼠标在移动,在点击,但对前台的鼠标是没有影响的!
    让鼠标到游戏窗口中的(618,300)点处进行左键单击操作
     Postmessage(hwindow,WM_MOUSEMOVE,0,MakeLong(618,300));
     sleep(200);
     PostMessage(hwindow,WM_LBUTTONDOWN,0,0);
     sleep(200);
     PostMessage(hwindow,WM_LBUTTONUP,0,0);