玩轉keybd_event

來源:互聯網
上載者:User
文章轉自: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=顯示系統內容。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.