玩转keybd_event
模擬鍵盤平時(shí)不是很常用, 但是當(dāng)調(diào)用某些快捷鍵執(zhí)行某項(xiàng)功能時(shí), 它真的是那么的方便呀.? 你不信?? 看看下面的實(shí)現(xiàn), 你就會(huì)大呼: 為什么不早點(diǎn)告訴我?? 呵呵,? 原來(lái)沒(méi)有blog呀,? 都靠這些掙分呢.
1) 顯示桌面:
很多軟件有顯示桌面的功能, 并且大家的方法都是遍歷窗口,? 然后讓它們最小化, 其實(shí) win系統(tǒng)給咱們了一個(gè)非常方便的WIN鍵(就是鍵盤上在CTRL鍵和ALT鍵之間的那個(gè)帶win標(biāo)志的按鍵), 利用它, 可以輕松的完成顯示桌面的功能.
??? 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);
其他的操作也類似, 比如直接顯示開(kāi)始的運(yùn)行,就把上面的'M'換成'R'即可。
直接
??? keybd_event(VK_LWIN, 0, 0 ,0);
??? keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
直接顯示“開(kāi)始”對(duì)話框了。
2) 實(shí)現(xiàn)快速的全選
很多的時(shí)候,比如listctrl實(shí)現(xiàn)全選,你可以用listctrl循環(huán)設(shè)置每一項(xiàng)的狀態(tài)為選中,多羅索的事情呀。用快捷鍵試一試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) 執(zhí)行某些特殊的鍵,比如數(shù)字鍵,大小寫,下面是數(shù)字鍵的例子
??? 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);
呵呵,這樣不會(huì)成功呀,因?yàn)檫@幾個(gè)鍵直接是操作系統(tǒng)來(lái)截獲執(zhí)行的,而模擬鍵盤只能發(fā)向應(yīng)用程序,所以這種方法不行的(想顯示鎖定對(duì)話框,用??? LockWorkStation();)
5) Window2000/NT/XP已經(jīng)不提倡用這個(gè)函數(shù)了,上面的方法只是為了讓大家開(kāi)闊一下思路,怎么替代呢,呵呵,看下面,所以上面的所有代碼都可以用這個(gè)來(lái)完成
?? //2000下用這個(gè)代替 ,包含 "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';
???
??? //接下來(lái)釋放它,這一點(diǎn)很重要。
??? 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));
感覺(jué)比那個(gè)有點(diǎn)羅索,呵呵。
====================
附WIN鍵的部分快捷鍵:
WIN鍵+D=快速的切到桌面,再次點(diǎn)擊返回
WIN鍵+E=快速打開(kāi)資源管理器
WIN鍵+R=“運(yùn)行”。
WIN鍵+M=全部視窗最小化。
WIN鍵+Shift+M=取消全部視窗最小化。
WIN鍵+F1=Help。
WIN鍵+F=“尋找”。
WIN鍵+Ctrl+F=顯示“查找電腦”。
WIN鍵+Tab=切換工作列的程式。
WIN鍵+Break=顯示系統(tǒng)內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的玩转keybd_event的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人类一败涂地电脑版_【游戏资讯】这是PC
- 下一篇: 描述最常用的5种http方法的用途_对不