文章轉自:http://blog.5d.cn/user7/luhui/200508/146260.html 類比鍵盤平時不是很常用, 但是當調用某些快速鍵執行某項功能時, 它真的是那麼的方便呀. 你不信? 看看下面的實現,
你就會大呼: 為什麼不早點告訴我? 呵呵, 原來沒有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=顯示系統內容。