如何自动移动Mouse

2016-02-19 14:22 175 1 收藏

下面,图老师小编带您去了解一下如何自动移动Mouse,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

事实上是使用SetCursorPos()便可以了,而它的参数是对应於萤的座标,而不是对应某一个Window的Logic座标。这个例子中的MoveCursor()所传入的POINTAPI也是相对於萤屏的座标,指的是从点FromP移动到ToP。最後面我也付了Showje的文章,使用的方式全部不同,不管是他的或我的,都有一个地方要解决才能做为Mouse自动导引的程式,那就是Mouse在自动Move时,如何让使用者不能移动Mouse,而这个问题就要使用JournalPlayBackHook,底下的程式中,使用EnableHook,FreeHook,这两个函数是Copy自如何使键盘、Mouse失效。

'以下程式在.bas
  TypeRECT
  LeftAsLong
  ToPAsLong
  RightAsLong
  BottomAsLong
  EndType
  TypePOINTAPI
  XAsLong
  YAsLong
  EndType

DeclareFunctionSetCursorPosLib"user32"(ByValXAsLong,ByValYAsLong)AsLong
  DeclareFunctionGetWindowRectLib"user32"(ByValhwndAsLong,lpRectAsRECT)AsLong
  DeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)

PublicSubMoveCursor(FromPAsPOINTAPI,ToPAsPOINTAPI)
  DimstepxAsLong,stepyAsLong,kAsLong
  DimiAsLong,jAsLong,sDelayAsLong
  stepx=1
  stepy=1
  i=(ToP.X-FromP.X)
  Ifi0Thenstepx=-1
  i=(ToP.Y-FromP.Y)
  Ifi0Thenstepy=-1
  'CallEnableHook'如果有Includehtmapi53.htm的.bas时,会DisableMouse
  Fori=FromP.XToToP.XStepstepx
  CallSetCursorPos(i,FromP.Y)
  Sleep(1)'让Mouse的移动慢一点,这样效果较好
  Nexti
  Fori=FromP.YToToP.YStepstepy
  CallSetCursorPos(ToP.X,i)
  Sleep(1)
  Nexti
  'CallFreeHook'EnableMouse
  EndSub
  '以下程式在Form中,需3个Command按键
  PrivateSubCommand3_Click()
  Dimrect5AsRECT
  Dimp1AsPOINTAPI,p2AsPOINTAPI
  CallGetWindowRect(Command1.hwnd,rect5)'取得Command1相对於Screen的座标
  p1.X=(rect5.Left rect5.Right)2
  p1.Y=(rect5.ToP rect5.Bottom)2
  CallGetWindowRect(Command2.hwnd,rect5)
  p2.X=(rect5.Left rect5.Right)2
  p2.Y=(rect5.ToP rect5.Bottom)2

CallMoveCursor(p1,p2)'Mouse由Command1-Command2
  EndSub

另外从Showje的站有Copy以下的程式码,也是做相同的果,只是使用的API全部不同

'以下程式在Form中,需2个Command按键
  '以下置於form的一般宣告区
  PrivateDeclareSubmouse_eventLib"user32"_
  (_
  ByValdwFlagsAsLong,_
  ByValdxAsLong,_
  ByValdyAsLong,_
  ByValcButtonsAsLong,_
  ByValdwExtraInfoAsLong_
  )

PrivateDeclareFunctionClientToScreenLib"user32"_
  (_
  ByValhwndAsLong,_
  lpPointAsPOINTAPI_
  )AsLong

PrivateDeclareFunctionGetSystemMetricsLib"user32"_
  (_
  ByValnIndexAsLong_
  )AsLong
  PrivateDeclareFunctionGetCursorPosLib"user32"_
  (_
  lpPointAsPOINTAPI_
  )AsLong
  

PrivateTypePOINTAPI
  xAsLong
  yAsLong
  EndType

PrivateTypeOSVERSIONINFO
  dwOSVersionInfoSizeAsLong
  dwMajorVersionAsLong
  dwMinorVersionAsLong
  dwBuildNumberAsLong
  dwPlatformIdAsLong
  szCSDVersionAsString*128
  EndType
  

PrivateConstMOUSEEVENTF_MOVE=&H1'mousemove
  PrivateConstMOUSEEVENTF_LEFTDOWN=&H2'leftbuttondown
  PrivateConstMOUSEEVENTF_LEFTUP=&H4'leftbuttonup
  PrivateConstMOUSEEVENTF_ABSOLUTE=&H8000'absolutemove
  

PrivateSubCommand1_Click()

DimptAsPOINTAPI
  Dimdl&
  Dimdestx&,desty&,curx&,cury&
  Dimdistx&,disty&
  Dimscreenx&,screeny&
  Dimfinished
  Dimptsperx&,ptspery&

pt.x=10
  pt.y=10
  dl&=ClientToScreen(Command2.hwnd,pt)

screenx&=GetSystemMetrics(0)'0表x轴

screeny&=GetSystemMetrics(1)'1表y轴

destx&=pt.x*&HFFFF&/screenx&
  desty&=pt.y*&HFFFF&/screeny&
  

ptsperx&=&HFFFF&/screenx&
  ptspery&=&HFFFF&/screeny&

'Nowmoveit
  Do
  dl&=GetCursorPos(pt)
  curx&=pt.x*&HFFFF&/screenx&
  cury&=pt.y*&HFFFF&/screeny&
  distx&=destx&-curx&
  disty&=desty&-cury&
  If(Abs(distx&)2*ptsperx&AndAbs(disty&)2*ptspery)Then
  'Closeenough,gotherestoftheway
  curx&=destx&
  cury&=desty&
  finished=True
  Else
  'Movecloser
  curx&=curx& Sgn(distx&)*ptsperx*2
  cury&=cury& Sgn(disty&)*ptspery*2
  EndIf
  mouse_eventMOUSEEVENTF_ABSOLUTE_
  OrMOUSEEVENTF_MOVE,curx,cury,0,0
  LoopWhileNotfinished

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

'到家了,按上右键吧!注:是左键,Showje的笔误
  '以下是在(curx,cury)的座标下,模拟Mouse左键的downandup
  mouse_eventMOUSEEVENTF_ABSOLUTEOr_
  MOUSEEVENTF_LEFTDOWN,curx,cury,0,0

mouse_eventMOUSEEVENTF_ABSOLUTEOr_
  MOUSEEVENTF_LEFTUP,curx,cury,0,0

EndSub

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

PrivateSubCommand2_Click()
  MsgBox"看你往哪儿逃!哈!!"
  EndSub

->

来源:https://www.tulaoshi.com/n/20160219/1606841.html

延伸阅读
Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd TypeDeclare Function ClipCursor Lib "user32" (lpRect As Any) As LongDeclare Function ShowCursor Lib "user32" (ByVal bShow As Long) As LongDeclare Function SetCursorPos Lib "user32" (ByVal x As L...
移动电源安全吗  移动电源从理论上来讲技术是比较成熟的,不同品牌的产品只是在细节上略微表现不一致。但这只是对电池产品的正规厂商而言。要把技术理论上的成熟完全应用及体现到产品中,即高品质产品的生产要取决于技术人员、制造设备、制作工艺、工序控制、产品测试制度等诸多因素,由原料入厂到完成成品,逐一细致完成,越是注重到每...
标签: 电脑入门
╱╳╲ ╲╳╱ -移动磁盘(C) -移动磁盘(D) -移动磁盘(E) -移动磁盘(G) -移动磁盘(I) ╭-━━╮ ┃﹃ ﹃┃ ╰┳ロ┳╯ --------------------------------------------------------------------------------    ∩∩ 〔﹁﹁〕    ぃ ぃ ˉ就我这2尺宽的   /.小肩膀 能承受得了多少゛ ----...
标签: windows 操作系统
每次把移动硬盘查到USB口就会自动播放,尤其是移动硬盘分了N个区的时候,要手动一个一个的关掉,真是十分的麻烦!怎么样能解决这个问题呢?下面西部e网这里了几种关闭移动硬盘或者U盘自动播放的方法供大家参考: 1、SHIFT按键法 这个方法早在Windows98就用过了吧?好像是哦,反正我最早在关闭自动播放CD的时候就使用的这种方...
酷盘PC版如何自动备份移动设备中的照片到酷盘   酷盘PC版自动备份移动设备中的照片到酷盘的方法如下: 1.安装支持照片导入功能的最新版酷盘PC客户端:https://www.kanbox.com/related/download#windows 2.运行酷盘之后,将手机或U盘等设备连接到PC,会弹出引导页面。 点击导入酷盘按钮开始导入,会在屏幕右下角出现...

经验教程

247

收藏

99
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部