如何自动移动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)
  Ifi<0Thenstepx=-1
  i=(ToP.Y-FromP.Y)
  Ifi<0Thenstepy=-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
'到家了,按上右键吧!注:是左键,Showje的笔误
  '以下是在(curx,cury)的座标下,模拟Mouse左键的downandup
  mouse_eventMOUSEEVENTF_ABSOLUTEOr_
  MOUSEEVENTF_LEFTDOWN,curx,cury,0,0
mouse_eventMOUSEEVENTF_ABSOLUTEOr_
  MOUSEEVENTF_LEFTUP,curx,cury,0,0
EndSub
PrivateSubCommand2_Click()
  MsgBox"看你往哪儿逃!哈!!"
  EndSub
- 上一篇:VisualBasic6.0实用编程技巧3例
 - 下一篇:VB编程实用精典小技巧3例
 




