用自己的意識去“遙控”鼠標

發表于:2007-07-14來源:作者:點擊數: 標簽:
遙遠 所謂用意識去遙控鼠標就是在特定的環境下,通過某種命令,讓無論在哪里的鼠標指針都會乖乖的回到你指定的區域里,并執行相應的動作。當然,這一切雖然都是按你的意識去做但絕不會是你自己用手來控制鼠標完成的。說了這些大家可能迷糊了,其實這只是一種
遙遠  

所謂"用意識去遙控鼠標"就是在特定的環境下,通過某種命令,讓無論在哪里的鼠標指針都會乖乖的回到你指定的區域里,并執行相應的動作。當然,這一切雖然都是按你的意識去做但絕不會是你自己用手來控制鼠標完成的。說了這些大家可能迷糊了,其實這只是一種遙控鼠標的技術,在很多流行的電腦教學軟件中常會應用到此技術,比如在軟件中進行某種講解時,里面的鼠標指針不通過鼠標器指令也會伴隨著講解來執行一步一步的動作。這下大家明白了吧,其實在Windows系統中,利用
API就可以輕松的實現上面的遙控鼠標過程!
下面我們就開始對上述過程通過一段程序進行講解,我們這段程序的目的就是:通過按下鍵盤的一個組合鍵,鼠標指針緩慢的移動到指定的按鈕上并自動按下相應的按鈕來激發某種事件。
就是這么一段過程,明白了吧,下面我們就開始做準備工作吧。首先,我們應該認識在以下程序中要用到的幾個API函數,這幾個函數,也就是程序的關鍵所在了:
1 GetCursorPos 獲取鼠標指針在屏幕位置的函數。
2 SetCursorPos 移動鼠標指針函數,其參數X,Y指定了鼠標指針在屏幕上的坐標,GetCursorPos函數把鼠標指針當前位置存到了變量lpPoint中。
Private Type POINTAPI
X As Long
Y As Long
End Type
3 ClientToScreen 坐標平移變換函數,引入該函數就是為了取得我們目標按鈕控件中心相對于屏幕坐標系的坐標位置。
4 SendMessage 向目標按鈕發送執行鼠標左鍵按下和放開命令的函數,其中設置wMsg參數的取值分別為:WM_LBUTTONDOWN 和 WM_LBUTTONUP。
5 GetTickCount 延時函數,獲?。譱ndows啟動至被調用時所經過的毫秒數。
然后在窗體中放置兩個按鈕控件與一個文本控件,再利用VB中的菜單編輯器完成一個熱鍵為Alt-A的菜單。完成后就可以編寫代碼了:
先利用API查看器寫下如下API聲明:
Private Type POINTAPI
x As Long
y As Long
End Type

Dim Buttonpos As POINTAPI

Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long

在程序運行時,我們首先要知道目標按鈕控件相對于屏幕的坐標,所以在窗體運行時就應該執行如下的代碼:
Private Sub Form_Load()
Text1.Text = "按Alt-A組合鍵開始演示"
Dim tmp As Long
With Command1
Buttonpos.x = (.Left + .Width / 2) / Screen.TwipsPerPixelX
Buttonpos.y = (.Top + .Height / 2) / Screen.TwipsPerPixelY
End With
tmp = ClientToScreen(Me.hwnd, Buttonpos)
End Sub

在本程序運行時,我們要遙控我們的鼠標,所以,我們通過鍵盤的快截鍵Alt-A激活菜單Clickbutton的Click事件進行鼠標指針的移動及單擊左鍵運動:
Private Sub numyanshi_Click()
Dim Cursorpos As POINTAPI
Dim DistX As Double, DistY As Double
Dim tmp As Long
Dim i As Long
Dim PosX As Integer, PosY As Integer
Dim TickCount As Long
tmp = GetCursorPos(Cursorpos)
DistX = Buttonpos.x - Cursorpos.x
DistY = Buttonpos.y - Cursorpos.y
For i = 1 To 40000'解釋:數值越大,鼠標運動越慢,相應的執行時間也就越長?!?
PosX = Cursorpos.x + DistX * i / 40000
PosY = Cursorpos.y + DistY * i / 40000
tmp = SetCursorPos(PosX, PosY)
Next i
tmp = SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0, 0)
TickCount = GetTickCount()
While GetTickCount() - TickCount < 200
tmp = DoEvents()
Wend
tmp = SendMessage(Command1.hwnd, WM_LBUTTONUP, 0, 0)
End Sub
當按下組合鍵后,我們會見到鼠標指針慢慢的移動到Command1按鈕即目標按鈕上,并按下按鈕:
Private sub command1_Click()
Beep
text1.text="鼠標左鍵已經按下,演示完畢!"
End sub
單擊Command2按鈕退出程序:
Private sub command2_Click()
Unload Me
End sub
好了,以上程序完全完成了我們所期待的一段過程。在W98,VB6.0下調試通過,如果有任何問題歡迎與我聯系。(email:mrdayuan@163.net

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97