導航:首頁 > 編程知識 > 控制滑鼠用什麼語言編程

控制滑鼠用什麼語言編程

發布時間:2023-02-07 16:06:42

A. 關於操縱滑鼠的簡單的編程語言

在操作滑鼠方面,Windows API提供了很多現成的函數,而且簡單易行。當然其他很多語言也能夠實現該功能,對此我不一一列舉。

我重點解釋下mouse_event函數

使用API函數mouse_event可以模擬一次滑鼠事件,比如左鍵單擊、雙擊和右鍵單擊等。這個實例利用此函數產生了十分有趣的效果,無論滑鼠處於屏幕的任何位置,每隔一秒程序會使滑鼠在那個位置單擊或雙擊一次,這會給我們造成什麼樣的混亂呢?試一試就知道了。

'【VB聲明】
' Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

'【說明】
' 模擬一次滑鼠事件

'【備注】
' 進行相對運動的時候,由SystemParametersInfo函數規定的系統滑鼠軌跡速度會應用於滑鼠運行的速度

'【參數表】
' dwFlags -------- Long,下述標志的一個組合
' MOUSEEVENTF_ABSOLUTE
' dx和dy指定滑鼠坐標系統中的一個絕對位置。在滑鼠坐標系統中,屏幕在水平和垂直方向上均勻分割成65535×65535個單元 -
' MOUSEEVENTF_MOVE 移動滑鼠
' MOUSEEVENTF_LEFTDOWN 模擬滑鼠左鍵按下
' MOUSEEVENTF_LEFTUP 模擬滑鼠左鍵抬起
' MOUSEEVENTF_RIGHTDOWN 模擬滑鼠右鍵按下
' MOUSEEVENTF_RIGHTUP 模擬滑鼠右鍵抬起
' MOUSEEVENTF_MIDDLEDOWN 模擬滑鼠中鍵按下
' MOUSEEVENTF_MIDDLEUP 模擬滑鼠中鍵抬起
' dx ------------- Long,根據是否指定了MOUSEEVENTF_ABSOLUTE標志,指定水平方向的絕對位置或相對運動'

' dy ------------- Long,根據是否指定了MOUSEEVENTF_ABSOLUTE標志,指定垂直方向的絕對位置或相對運動

' cButtons ------- Long,未使用

' dwExtraInfo ---- Long,通常未用的一個值。用GetMessageExtraInfo函數可取得這個值。可用的值取決於特定的驅動程序
Option Explicit
Private Declare Sub mouse_event Lib "user32" _
( _
ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As Long _
)

'Option_Tag標示選擇了哪一種模擬事件
Dim Option_Tag As Integer
'OnTest標示是否處於模擬狀態,以便我們停止模擬
Dim OnTest As Boolean
'對API變數的定義
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10

'控制 模擬的開始與結束
Private Sub Command1_Click()

'如果不處於模擬狀態
If OnTest = False Then
Command1.Caption = "快停下來吧"
Timer1.Enabled = True
OnTest = True
'如果處於模擬狀態
Else
Command1.Caption = "試一試"
Timer1.Enabled = False
OnTest = False
End If
End Sub

'窗體載入時一些變數需要設置
Private Sub Form_Load()
Option_Tag = 1
Timer1.Enabled = False
OnTest = False
End Sub

'選擇了模擬「滑鼠左鍵單擊事件」
Private Sub Option1_Click()
Option_Tag = 1 '左鍵單擊事件
Option2.Value = False
Option3.Value = False
End Sub

'選擇了模擬「滑鼠右鍵單擊事件」
Private Sub Option2_Click()
Option_Tag = 2 '右鍵單擊事件
Option1.Value = False
Option3.Value = False
End Sub

'選擇了模擬「滑鼠雙擊事件」
Private Sub Option3_Click()
Option_Tag = 3 '雙擊事件
Option1.Value = False
Option2.Value = False
End Sub

'每隔一秒中模擬一次滑鼠事件
Private Sub Timer1_Timer()
If Option_Tag = 1 Then
'調用了mouse_event函數,其參數的設置見前面說明
'如果同時要模擬兩個滑鼠事件,可以用 Or 將兩個參數連接
'這里是 滑鼠左鍵按下 和松開兩個事件的組合即一次單擊
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
ElseIf Option_Tag = 2 Then
'模擬滑鼠右鍵單擊事件
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
Else
'兩次連續的滑鼠左鍵單擊事件 構成一次滑鼠雙擊事件
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End If
End Sub

先在程序中加入如下的聲明後,就能引用mouse_event函數:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

其中各個參數的意義如下表所示:

參數 意義
dwFlags Long,下表中標志之一或它們的組合
dx,dy Long,根據MOUSEEVENTF_ABSOLUTE標志,指定x,y方向的絕對位置或相對位置
cButtons Long,沒有使用
dwExtraInfo Long,沒有使用
dwFlags常數 意義
MOUSEEVENTF_MOVE &H1,移動滑鼠
MOUSEEVENTF_LEFTDOWN &H2,模擬滑鼠左鍵按下
MOUSEEVENTF_LEFTUP &H4,模擬滑鼠左鍵抬起
MOUSEEVENTF_RIGHTDOWN &H8,模擬滑鼠右鍵按下
MOUSEEVENTF_RIGHTUP &H10,模擬滑鼠右鍵抬起
MOUSEEVENTF_MIDDLEDOWN &H20,模擬滑鼠中鍵按下
MOUSEEVENTF_MIDDLEUP &H40,模擬滑鼠中鍵抬起
MOUSEEVENTF_ABSOLUTE &H8000,標示是否採用絕對坐標

程序中我們這樣使用mouse_event函數:

1、這里是滑鼠左鍵按下和松開兩個事件的組合即一次單擊:
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
2、模擬滑鼠右鍵單擊事件:
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
3、兩次連續的滑鼠左鍵單擊事件 構成一次滑鼠雙擊事件:
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

如上面所示如果我們要使用兩個dwFlags常數的組合時,可以用Or將其連接起來。本例中我們把dx,dy參數都設為0,是指每次模擬事件的位置是滑鼠的當前位置,dx,dy在沒有使用MOUSEEVENTF_ABSOLUTE標志時是相對於滑鼠當前位置的坐標,如果設置為使用絕對坐標,則dx,dy是相對於屏幕的坐標。

然後把這些語句放在Timer控制項的Timer事件中,就能實現每一定間隔模擬一次滑鼠事件了。

B. C語言是怎樣實現滑鼠事件控制的可不可以用純C做

可以,需要調用windowsAPI函數。
文件windows.h。
簡單思路:
通過GetStdHandle獲取標准輸入句柄。
再通過ReadConsokeInput將輸入信息存儲到結構體類型INPUT_RECODE變數中。
再通過判斷,截取到滑鼠電擊的事件。
具體API函數、參數、功能還有很多。需要網上找資料可以學。
我這里就簡單寫一個,滑鼠點擊控制台任意位置,並在該位置列印字元串。

#include<stdio.h>
#include<windows.h>
intmain()
{
HANDLEhInput=GetStdHandle(STD_INPUT_HANDLE);//獲取標准輸入設備句柄
INPUT_RECORDinRec;
DWORDres;
COORDp0;
while(1)
{
ReadConsoleInput(hInput,&inRec,1,&res);
if(inRec.EventType==MOUSE_EVENT&&inRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)//滑鼠左鍵
{
p0.X=inRec.Event.MouseEvent.dwMousePosition.X;
p0.Y=inRec.Event.MouseEvent.dwMousePosition.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);
printf("你在這里點擊的左鍵 ");
}
}

return0;
}

C. C語言滑鼠操作

我之前給別人寫過一個打地鼠的小游戲,就是用滑鼠操作的。發給你參考下。代碼很簡單。

主要函數我在下方說明了,但更多信息你必須自己網路看,一言兩語說不完。

SetConsoleCursorPosition函數可以定位游標位置,也就是文字內容顯示的起點。

ReadConsoleInput(HANDLE hConsoleInput,*INPUT_RECORD lpBuffer,DWORD nLength,
DWORD lpNumberOfEventsRead)函數可以獲取滑鼠的操作信息。

調用過上面函數後,lpBuffer由於是傳址,所以其地址里的值就包含了滑鼠信息。

lpBuffer.EventType == MOUSE_EVENT //判斷是滑鼠事件

lpBuffer.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED//判斷是滑鼠左鍵點擊

兩個判斷一起就是滑鼠左鍵點擊的判斷,其他事件參數你可以自己網上找。

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<malloc.h>
#definegSizek30//區域大小寬度
#definegSizeg20//區域大小高度
#definegBegin3//活動區域起始行
intmain()
{
intt=0,s0,s1,i,j,count=0,fen=0,row=0,clo=0;
chargameA[gSizeg][gSizek+1],fSave[10]={0};
SetConsoleTitle("打地鼠");
HANDLEhInput=GetStdHandle(STD_INPUT_HANDLE);//獲取標准輸入設備句柄
INPUT_RECORDinRec;
DWORDres;
COORDp0;
p0.X=0;
p0.Y=0;

srand(time(0));
s0=time(NULL);
strcpy(gameA[0],"GAME");
strcpy(gameA[1],"未命中次數:0,計分:000000");
for(i=gBegin-1;i<gSizeg;i++)
{
for(j=0;j<gSizek+1;j++)
{
if(i>gBegin-1&&i<gSizeg-1&&j>0&&j<gSizek-1)
gameA[i][j]='';
else
gameA[i][j]=4;
if(j==gSizek)
gameA[i][j]=0;
}
}
for(i=0;i<gSizeg;i++)
printf("%s ",gameA[i]);

while(1)
{

if(t>=3)
{
if(row>0&&clo>0)
gameA[row][clo]='';
row=rand()%(gSizeg-1);
clo=rand()%(gSizek-1);
s0=time(NULL);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);

if(row<3)
row=4;
if(clo<1)
clo=1;
gameA[row][clo]=2;
for(i=0;i<gSizeg;i++)
{
//gameA[i][gSizeg+1]=0;
printf("%s ",gameA[i]);
}

}
if(count==3)
{
p0.X=10;
p0.Y=8;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);
printf("GAMEOVER!");
break;
}
s1=time(NULL);
t=s1-s0;
ReadConsoleInput(hInput,&inRec,1,&res);
if(inRec.EventType==MOUSE_EVENT&&inRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)//滑鼠左鍵
{
if(inRec.Event.MouseEvent.dwMousePosition.X==clo&&inRec.Event.MouseEvent.dwMousePosition.Y==row)
{

if(fen==0)
fen=1;
if(fen>999999)
fen=999999;
else
fen=fen*2;

sprintf(fSave,"%06d",fen);
gameA[1][18]=0;
strcat(gameA[1],fSave);
}
else
{
count++;
fen=0;
gameA[1][11]=count+'0';
}
t=4;
}
}
while(1);
return0;
}

D. 請問在C語言編程下怎麼控制windows系統指針(就是滑鼠控制移動那個)的移動

用SendInput函數。第二個參數是一個INPUT結構體的數組,第一個參數代表這個數組有幾個元素,最後一個參數代表這個數組中每一個元素是幾個位元組。
#include <windows.h>
#pragma comment(lib, "user32.lib")
int main() {
INPUT mouseInput;
ZeroMemory(&mouseInput, sizeof mouseInput);
mouseInput.type = INPUT_MOUSE;
mouseInput.mi.dx = 10;
mouseInput.mi.dy = 10;
mouseInput.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &mouseInput, sizeof(mouseInput));
return 0;
}
以上代碼把滑鼠往右移動10往下移動10。使用MOUSEEVENTF_ABSOLUTE這個flag可以指定絕對位置,它把屏幕右下角定義為65535, 65535把左上角定義為0, 0所以
#include <windows.h>
int main() {
INPUT mouseInput;
ZeroMemory(&mouseInput, sizeof mouseInput);
mouseInput.type = INPUT_MOUSE;
mouseInput.mi.dx = 32767;
mouseInput.mi.dy = 32767;
mouseInput.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
SendInput(1, &mouseInput, sizeof(mouseInput));
return 0;
}
是移動到屏幕正中央。

至於滑鼠點擊:
#include <windows.h>
int main() {
INPUT mouseInput;
ZeroMemory(&mouseInput, sizeof mouseInput);
mouseInput.type = INPUT_MOUSE;
mouseInput.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &mouseInput, sizeof(mouseInput));
mouseInput.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &mouseInput, sizeof(mouseInput));
return 0;
}
就是「按下」再「彈起來」。雙擊就是來兩次,右擊就是LEFT改成RIGHT。

E. 用C語言寫一個控制滑鼠鍵盤自動點的程序復雜嗎

很簡單,大概說一下思路
1、獲得指定進程名字的窗口句柄
2、獲得制定窗口的位置
3、計算滑鼠應該在德位置(相對窗口的位置)
4、發送鍵盤滑鼠消息

F. 什麼編程語言可以控制鍵盤和滑鼠

什麼叫控制?難道是在裡面可以讓你滑鼠在外面動?
要說模擬輸入的話。。。
基本是個語言都有這個效果

閱讀全文

與控制滑鼠用什麼語言編程相關的資料

熱點內容
命令行編譯驅動程序 瀏覽:426
cad標注文件包 瀏覽:368
b2c大數據 瀏覽:232
主角修煉出體內世界的小說 瀏覽:883
許大地網路營銷課程 瀏覽:110
win7電腦c盤哪些文件可以刪除 瀏覽:63
無字幕的網站 瀏覽:914
一部電影日本跟學校有關 瀏覽:595
查詢寧鄉公交用什麼app 瀏覽:371
cms網站模板 瀏覽:456
有什麼電影露奶子 瀏覽:907
S7edge支持微信指紋么 瀏覽:83
win10跨平台 瀏覽:343
qq暴走gif動態圖片製作 瀏覽:340
iphone5連不上網路數據 瀏覽:229
佛教電影大全佛片 瀏覽:191
如何還原回收站的文件 瀏覽:850
洛陽大數據產業園區 瀏覽:900
伺服器資料庫在哪裡 瀏覽:769
割奶電影免推薦 瀏覽:376

友情鏈接