向系統傳送模擬按鍵訊息

2021-04-19 21:43:53 字數 2479 閱讀 8171

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))   )  

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));  

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

使用labview向命令列傳送按鍵訊息

在製作乙個專案中遇到此問題,特此記錄下來,以免忘記,這個專案是需要用pickit4程式設計器對picmcu進行程式設計,使用命令列操作,速度很慢,好再命令中有乙個批量模式,這個模式是開啟後,後續只需要按下回車按鍵就能快速啟動燒錄,省去程式設計器連線過程,我使用labview程式設計,使用window...

在C 程式中模擬傳送鍵盤按鍵訊息

using system.runtime.interopservices 引入鍵盤事件函式 dllimport user32.dll public static extern void keybd event byte bvk,byte bscan,int dwflags,int dwextrain...

在C 程式中模擬傳送鍵盤按鍵訊息

using system.runtime.interopservices 引入鍵盤事件函式 dllimport user32.dll public static extern void keybd event byte bvk,byte bscan,int dwflags,int dwextrain...