日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何用应用程序模拟键盘和鼠标按键

發布時間:2024/5/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用应用程序模拟键盘和鼠标按键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Windows大行其道的今天,windows界面程序受到廣大用戶的歡迎。對這些程序的操作不外乎兩種,鍵盤輸入控制和鼠標輸入控制。有時,對于繁雜的,或重復性的輸入操作,我們能否通過編制程序來代替手工輸入,而用程序來模擬鍵盤及鼠標的輸入呢?答案是肯定的。這里主要是通過兩個Windows API函數來實現的。下面以 vc++為例來介紹一下如何實現這兩個功能。

本文示例代碼

模擬鍵盤我們用Keybd_event這個api函數,模擬鼠標按鍵用mouse_event函數。在vc里調用api函數是既簡單又方便不過的事了。
  首先介紹一下Keybd_event函數。Keybd_event能觸發一個按鍵事件,也就是說回產生一個WM_KEYDOWN或WM_KEYUP消息。當然也可以用產生這兩個消息來模擬按鍵,但是沒有直接用這個函數方便。Keybd_event共有四個參數,第一個為按鍵的虛擬鍵值,如回車鍵為vk_return, tab鍵為vk_tab。第二個參數為掃描碼,一般不用設置,用0代替就行第三個參數為選項標志,如果為keydown則置0即可,如果為keyup則設成“KEYEVENTF_KEYUP”,第四個參數一般也是置0即可。用如下代碼即可實現模擬按下鍵,其中的XX表示XX鍵的虛擬鍵值,在這里也就是各鍵對應的鍵碼,如''A''=65
keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0); ...
  mouse_event最好配合SetCursorPos(x,y)函數一起使用,與Keybd_event類似,mouse_event有五個參數,第一個為選項標志,為MOUSEEVENTF_LEFTDOWN時表示左鍵按下為MOUSEEVENTF_LEFTUP表示左鍵松開,向系統發送相應消息。第二三個參數分別表示x,y
相對位置,一般可設為0,0,第四五個參數并不重要,一般也可設為0,0。若要得到Keybd_event和mouse_event函數的更詳細的用法,可以查閱msdn或delphi幫助。

下面是關于mouse_event的示例代碼:

POINT lpPoint;
GetCursorPos(&lpPoint);
SetCursorPos(lpPoint.x, lpPoint.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

  上面的代碼表示鼠標的雙擊,若要表示單擊,用兩個mouse_event即可(一次放下,一次松開)。  
  注意,不管是模擬鍵盤還是鼠標事件,都要注意還原,即按完鍵要松開,一個keydown對應一個keyup;鼠標單擊完也要松開, 不然可能影響程序的功能。  
  好了,希望本文能讓你對模擬鍵盤和鼠標按鍵有個初步的了解,如果想更深入的了解可以查閱msdn在線幫助,并多多動手實踐,也許會對你有很大的幫助。


玩轉keybd_event
????? DELPHI 2005-8-24 15:51
模擬鍵盤平時不是很常用, 但是當調用某些快捷鍵執行某項功能時, 它真的是那么的方便呀. 你不信? 看看下面的實現, 你就會大呼: 為什么不早點告訴我? 呵呵, 原來沒有blog呀, 都靠這些掙分呢.

1) 顯示桌面:

很多軟件有顯示桌面的功能, 并且大家的方法都是遍歷窗口, 然后讓它們最小化, 其實 win系統給咱們了一個非常方便的WIN鍵(就是鍵盤上在CTRL鍵和ALT鍵之間的那個帶win標志的按鍵), 利用它, 可以輕松的完成顯示桌面的功能.

keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event('M', 0, 0 ,0);
keybd_event('M', 0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

其他的操作也類似, 比如直接顯示開始的運行,就把上面的'M'換成'R'即可。

直接 keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);

直接顯示“開始”對話框了。

2) 實現快速的全選

很多的時候,比如listctrl實現全選,你可以用listctrl循環設置每一項的狀態為選中,多羅索的事情呀。用快捷鍵試一試CTRL+A,其他的快捷鍵一樣的用法,呵呵,你知道怎么辦了吧?

keybd_event(VK_CONTROL, (BYTE)0, 0 ,0);
keybd_event('A',(BYTE)0, 0 ,0); //此處可以用 'A', (BYTE)65, 用'a'不起作用.
keybd_event('A', (BYTE)0, KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL, (BYTE)0, KEYEVENTF_KEYUP,0);

3) 執行某些特殊的鍵,比如數字鍵,大小寫,下面是數字鍵的例子

bool bState=true; //true為按下NumLock,false反之
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);
if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
(!bState && (keyState[VK_NUMLOCK] & 1)) )
{
// Simulate a key press
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );

// Simulate a key release
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}

4) 你想CTRL+ALT+DELETE三鍵一起按下,

keybd_event(VK_CONTROL, 0, 0 ,0);
keybd_event(VK_MENU,0, 0 ,0);
keybd_event(VK_DELETE,0, 0 ,0);

keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_MENU,0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_DELETE,0, KEYEVENTF_KEYUP ,0);
呵呵,這樣不會成功呀,因為這幾個鍵直接是操作系統來截獲執行的,而模擬鍵盤只能發向應用程序,所以這種方法不行的(想顯示鎖定對話框,用 LockWorkStation();)

5) Window2000/NT/XP已經不提倡用這個函數了,上面的方法只是為了讓大家開闊一下思路,怎么替代呢,呵呵,看下面,所以上面的所有代碼都可以用這個來完成

//2000下用這個代替 ,包含 "winable.h"
INPUT input[4];
memset(input, 0, sizeof(input));

input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;

input[0].ki.wVk = input[3].ki.wVk = VK_LWIN;
input[1].ki.wVk = input[2].ki.wVk = 'R';


//接下來釋放它,這一點很重要。
input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
input[0].ki.time = input[1].ki.time = input[2].ki.time = input[3].ki.time = GetTickCount();

SendInput(4, input, sizeof(INPUT));

感覺比那個有點羅索,呵呵。

====================

附WIN鍵的部分快捷鍵:

WIN鍵+D=快速的切到桌面,再次點擊返回

WIN鍵+E=快速打開資源管理器

WIN鍵+R=“運行”。

WIN鍵+M=全部視窗最小化。

WIN鍵+Shift+M=取消全部視窗最小化。

WIN鍵+F1=Help。

WIN鍵+F=“尋找”。

WIN鍵+Ctrl+F=顯示“查找電腦”。

WIN鍵+Tab=切換工作列的程式。

WIN鍵+Break=顯示系統內容。

?

?

鍵盤鍵與虛擬鍵碼對照表

字母和數字鍵     數字小鍵盤的鍵       功能鍵         其它鍵
鍵   鍵碼     鍵   鍵碼       鍵   鍵碼     鍵      鍵碼
A   65       0   96        F1   112     Backspace    8
B   66       1   97        F2   113     Tab       9
C   67       2   98        F3   114     Clear      12
D   68       3   99        F4   115     Enter      13
E   69       4   100       F5   116     Shift      16
F   70       5   101       F6   117     Control     17
G   71       6   102       F7   118      Alt       18
H   72       7   103       F8   119     Caps Lock    20
I   73       8   104       F9   120     Esc       27
J   74       9   105       F10  121     Spacebar    32
K   75       *   106       F11  122     Page Up     33
L   76       +   107       F12  123     Page Down    34
M   77       Enter 108       --   --     End       35
N   78       -   109       --   --      Home      36
O   79       .   110       --   --      Left Arrow   37
P   80       /   111       --   --      Up Arrow    38
Q   81       --   --       --   --      Right Arrow   39
R   82       --   --       --   --      Down Arrow    40
S   83       --   --       --   --      Insert      45
T   84       --   --       --   --      Delete      46
U   85       --   --       --   --      Help       47
V   86       --   --       --   --      Num Lock     144
W   87          
X   88      
Y   89      
Z   90      
0   48      
1   49      
2   50       
3   51       
4   52       
5   53       
6   54       
7   55       
8   56       
9   57  

總結

以上是生活随笔為你收集整理的如何用应用程序模拟键盘和鼠标按键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。