添加WM_KEYDOWN函數(shù)。在函數(shù)體中case WM_KEYDOWN: if (wParam==VK_LEFT)//方向鍵左 { rect1.left-=10; rect1.right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_RIGHT)//方向鍵右 { rect1.left+=10; rect1.right+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_UP)//方向鍵上 { rect1.top-=10; rect1.bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_DOWN)//方向鍵下 { rect1.top+=10; rect1.bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_PRIOR)//PG UP { rect1.top-=10; rect1.bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_NEXT)//PG DN { rect1.top+=10; rect1.bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_HOME)//HOME { rect1.left-=10; rect1.right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_END)//END { rect1.left+=10; rect1.right+=10; InvalidateRect (hWnd,NULL,TRUE); } break;
成都創(chuàng)新互聯(lián)公司電話聯(lián)系:18980820575,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十載,包括石牌坊等多個行業(yè)擁有豐富的營銷推廣經(jīng)驗,選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)保駕護(hù)航。
#includestdio.h
#includeconio.h
int?main(void)
{
char?ch;
ch=getch();
if(ch?==?'w'||?ch?==?'W')
printf("1");
}
首先最簡單的但可以后臺處理的有SendMessage()PostMessage()
發(fā)送鼠標(biāo),
鍵盤消息,
這個百度一搜n多了
然后中等級的模擬就是keyboard_eventmouse_event了這個比較用的比較多,
給個例子你
模擬鍵盤點(diǎn)擊void
Press(UINT
key)
{
keybd_event(key,MapVirtualKey(key,
0),0,0);
keybd_event(key,MapVirtualKey(key,
0),KEYEVENTF_KEYUP,0);
}
模擬
鼠標(biāo)左鍵單擊mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
這里注意調(diào)用
keyboard_event
的時候一定要用MapVirtualKey
網(wǎng)上大部分的代碼都是沒用的,
這個函數(shù)時獲取
硬件掃描碼
的先說下keybd_event();函數(shù)的參數(shù)keybd_event(要模擬按下的虛擬按鍵碼,
虛擬按鍵碼對應(yīng)的硬件掃描碼,0,0);網(wǎng)上的代碼大部分都有
虛擬按鍵碼,
當(dāng)然你運(yùn)行大部分都是沒問題的,
因為對于一般的程序而言是沒問題的但有的程序為了防止
外掛
或者
防止其他程序惡意修改什么的,會對
鼠標(biāo)鍵盤
消息進(jìn)行檢測,
如果檢測到?jīng)]有硬件掃描碼會拒絕執(zhí)行的
然后還有比較高級的就是SendInput模擬了void
OnSendCharCode(unsigned
short
unicode
=
0,unsigned
short
vcode
=
0,bool
bDown
=
false,bool
bUnicode
=
true);
void
OnSendCharCode(unsigned
short
unicode,unsigned
short
vcode,bool
bDown,bool
bUnicode)
{
unsigned
short
uNum
=
0;
//
v-code
Clicked
INPUT
事件設(shè)定
KEYBDINPUT
kDown;
KEYBDINPUT
kUp;
if(!bUnicode)
{
//
'A';
(Virtual
Code
只有大寫),
要輸入小寫
//
Enter:
13,
Backspace:
8,
Up:38
kDown.wVk
=
kUp.wVk
=
vcode;
kDown.wScan
=
kUp.wScan
=
::MapVirtualKey(kDown.wVk,0);
//kDown.dwFlags
=
KEYEVENTF_EXTENDEDKEY;
kUp.dwFlags
=
KEYEVENTF_KEYUP;
}else{
kDown.wVk
=
kUp.wVk
=
0;
kDown.wScan
=
kUp.wScan
=
unicode;
kDown.dwFlags
=
KEYEVENTF_UNICODE;
kUp.dwFlags
=
KEYEVENTF_UNICODE
|
KEYEVENTF_KEYUP;
}
//
建立
KeyDown
事件
建立
KeyUP
事件
INPUT
inputKeyDown,
inputKeyUP;
inputKeyDown.type
=
inputKeyUP.type
=
INPUT_KEYBOARD;
//
指定
input
為
keyboard
kDown.time
=
kUp.time
=
0;
//
the
system
will
provide
its
own
time
stamp.
kDown.dwExtraInfo
=
kUp.dwExtraInfo
=
(WORD)::GetMessageExtraInfo();
inputKeyDown.ki
=
kDown;//
指定
鍵盤
屬性結(jié)構(gòu)
inputKeyUP.ki
=
kUp;
//
指定
鍵盤
屬性結(jié)構(gòu)
//
v-code
Clicked
INPUT
事件設(shè)定完成
//
將
INPUT
事件送到
Root
視窗,
系統(tǒng)會根據(jù)視窗位置,送給目標(biāo)視窗
if(bDown)
{
INPUT
event[1]
=
{inputKeyDown};
uNum
=
::SendInput(1,event,
sizeof(INPUT));
}else{
INPUT
event[2]
=
{inputKeyDown,inputKeyUP};
uNum
=
::SendInput(2,event,
sizeof(INPUT));
}
}
//例子:
OnSendCharCode(0,VK_SHIFT,true,false);
OnSendCharCode(0,'A',false,false);
OnSendCharCode(0,VK_SHIFT,false,false);
OnSendCharCode(0,'A',false,false);
//KEYEVENTF_UNICODE
能區(qū)分大小寫
OnSendCharCode('A');
OnSendCharCode('a');
不過還是有很多游戲,它是用
DirectX
技術(shù)去做的,這些大部分對他們沒用所以還有最最最高級的模擬,
就是
對硬件驅(qū)動程序的模擬這個有個外國人寫的
winio.h
的頭文件,
有興趣可以去學(xué),
一般用不到的,
使用getch()獲取功能鍵和方向鍵的時候,需要調(diào)用兩次才能把按鍵讀取出來,每一次調(diào)用返回0xE0,第二次調(diào)用返回實際的鍵值。
參考自MSDN:
The _getch and_getwch functions read a single character from the console without echoing the character. None of these functions can be used to read CTRL+C. When reading a function key or an arrow key, each function must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.
網(wǎng)頁標(biāo)題:c語言鍵盤響應(yīng)函數(shù) c語言鍵盤事件
地址分享:http://jinyejixie.com/article48/ddiscep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計、網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、網(wǎng)站制作、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)