① 求救c語言 如果要檢測兩個鍵同時被按下和鬆手檢測的,要怎麼樣寫呢
C語言 用getch() 可以即時獲得按鍵的鍵值。
如果按下一個鍵,手不移動,根據你的鍵盤設置(按鍵時間長於多少則為新的按鍵),getch()會連續獲得鍵值。
組合鍵將輸出組合鍵的鍵值。
某些鍵,按一次會有2個鍵值,例如 F1,F2...F12, 上下左右箭頭鍵。
Windows 和MFC c++ 程序 可以或的 各種復雜的按鍵「事件」,按著,抬起,按下抬起,你可以測時間間隔,時間延時,可以寫很嚕蘇的程序。
#include<stdlib.h>
#include<stdio.h>
void main()
{
int i;
int key,key2;
// 普通鍵用 getch();取得
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
// 箭頭鍵
if (key == 0xe0) {
key = getch();
printf("\nkey value = %02x -- %d\n",key,key);
};
// F1鍵
if (key == 0) {
key2 = getch();
printf("\nkey value = %02x\n",key2);
switch (key2) {
case 0x003b: printf("F1 key");break;
case 0x003c: printf("F2 key");break;
case 0x003d: printf("F3 key");break;
case 0x003e: printf("F4 key");break;
case 0x003f: printf("F5 key");break;
case 0x0040: printf("F6 key");break;
case 0x0041: printf("F7 key");break;
default: break;
};
};
}
② C語言如何實現判斷2個鍵同時按下
如果是操作系統下,判斷按鍵,需要調用相關操作系統的相關函數。
如果是單片機矩陣鍵盤,需要自己寫循環延時判斷按鈕的電平狀態。
我以window為例子,寫了簡單的判斷W和A鍵同時按下的程序。
兩個按鍵先後按下,之間存在間隔,我定義的常量,默認10毫秒,你需要自己改。
#include<stdio.h>
#include<windows.h>
#definedelayT10//兩個按鍵先後按下的最大間隔,毫秒
intkeyDU(charkey);//判斷按鍵是否按下,是返回1,否返回0
intmain()
{
intkw=0,kwl=0,ka=0,kal=0;
while(1)
{
kw=keyDU('W');
ka=keyDU('A');
if((kw==1&&kwl!=kw)||(ka==1&&kal!=ka))
{
while(delayT)//當其中一個鍵按下,每一毫秒檢查一次兩個鍵有沒有同時按下
{
kw=keyDU('W');
ka=keyDU('A');
if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
if(kw==1&&kwl!=kw&&ka==1&&kal!=ka)
{
printf("W、A鍵同時被按下
");
kwl=kw;
kal=ka;
break;
}
Sleep(1);
}
}
if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
}
return0;
}
intkeyDU(charkey)//判斷按鍵是否按下,是返回1,否返回0
{
intdown=0;
down=GetKeyState(key);
if(down<0)
return1;
if(down>0)
return0;
return-1;
}
③ 求救c語言 如果要檢測兩個鍵同時被按下和鬆手檢測的,要怎麼樣寫呢
程序是順序執行的,不存在嚴格的「同時」檢測。所以,我們可以設置一個很「高」的檢測頻率。在同一個檢測周期里發現按鍵都按下就可當做是同時按下。
然後你需要解決如何發現按鍵按下動作這個問題。
按鍵按下同樣也不必一按下你就馬上要發現這么緊張。同樣在這么一個很「高」的檢測頻率下。發現前一次檢測是個「沒按下」狀態現在變成了「按下」那就可以當做是這次檢測周期里「按下」。
然後你需要解決如何記錄前一次檢測是什麼東西的問題。
你需要額外用個寄存器暫時放你前一次檢測的結果。並在檢測周期結束之前記錄當前的「日誌」。
於是,你可以很從容地發現現在按鍵的狀況以及上一次按鍵是個什麼情況,你掌握了歷史、當下、還要安排一下未來:檢測到按鍵的動作後你要再寫個服務程序來使用這個按鍵檢測的結果。
最後,再說明一下,這個很「高」的頻率大概10幾ms也行的。越高頻率檢測越准確。同時。這個「同時」的檢測也越嚴格。你可能會導致怎麼按都很難觸發『同時』的動作。
④ C語言鍵盤內容讀取
綜觀TC提供的鍵盤輸入函數,以bioskey函數為最合適選擇。
int bioskey(int cmd);
使用BIOS中斷0x16執行各種鍵盤操作。參數cmd確定實際得操作。
bioskey的返回值由cmd決定:
0:低8位非0,返回在隊列中等待的下一輸入鍵的ascii字元或鍵盤的下一次按鍵輸入的ascii字元。低8位為0,則高8位為擴展鍵盤碼。
1:測試是否有可讀的輸入鍵,為0,則沒有。Ctrl_break 返回0xffff(-1)。否則,返回下一個輸入鍵。鍵值還保存,供下次cmd=0時bioskey調用返回。
2:請求當前換檔鍵狀態。狀態值由下列值相或(or)得到:
位7 0x80 Insert ON
6 0x40 Caps ON
5 0x20 Numlock ON
4 0x10 Scroll Lock ON
3 0x08 ALT
2 0x04 CTRL
1 0x02 <- SHIFT
0 0x01 -> SHIFT
為了方便起見,我們首先定義一些常用功能鍵的鍵值。
#define ReturnKey 0x0d
#define ESC 0x1b
#define Back 0x08
#define LeftArrow 0x4b00
#define RightArrow 0x4d00
#define UpArrow 0x4800
#define DownArrow 0x5000
#define PageUp 0x4900
#define PageDown 0x5100
#define Home 0x4700
#define End 0x4f00
#define F1 0x3b00
#define F2 0x3c00
#define F3 0x3d00
#define F4 0x3e00
#define F5 0x3f00
#define F6 0x4000
#define F7 0x4100
#define F8 0x4200
#define F9 0x4300
#define F10 0x4400
int GetKey(void)
{
int tKey;
while(bioskey(1)==0)
;
tKey=bioskey(0);
if ((tKey & 0xff)!=0)
tKey=tKey & 0xff;
return tKey;
}
以上代碼,可基本完成常用程序鍵盤讀取操作。
但我們必須注意到,對於函數GetKey的定義中,bioskey函數的使用,我們只是對cmd=0,1的情況進行了處理,而對於cmd=2,也即換檔鍵狀態沒有進行處理,因而諸如ctrl-home等等GetKey不能進行相應的接收,如果確實需要,須繼續擴充GetKey函數。
⑤ 如何設計2個按鍵同時按的鍵盤掃描C程序
1、讀鍵程序:讀P1。
內容對應+、-、TH/TL。
計次數識別TH/TL的長按和短按。
還需要考慮一個設定結束的考慮。
或者長時間無按鍵,視為設定完成。
2、顯示程序:建議另一個定時中斷中顯示TH、TL的被設定值。
3、定時中斷程序:通過IO指示燈翻轉
⑥ c語言中怎樣輸入和讀取方向鍵
在用C語言寫出的「貪吃蛇」小游戲中,可以自編以下這個intokey( )函數,用來獲取方向鍵值以便控制蛇的拐彎。庫函數kbhit( )是檢測是否有按鍵被按下,Dir是代表方向的變數,整型變數flag用來獲取鍵值,1、2、3、4分別表示方向的上下左右。要#include<conio.h> .
void intokey( )
{ int flag;
if ( kbhit( ) ) //判斷有鍵按下時才執行下面操作
{ flag = getch( ); //用flag來獲取鍵值
if (flag==224) flag = getch( ); //值為224是方向鍵,要再次獲取才行
if (flag==72 && dir != 2) dir = 1; //方向鍵為「上」且原方向不為下時,讓dir=1.
if (flag==80 && dir != 1) dir = 2; //方向鍵為「下」且原方向不為上時,讓dir=2.
if (flag==75 && dir != 4) dir = 3; //方向鍵為「左」且原方向不為右時,讓dir=3.
if (flag==77 && dir != 3) dir = 4; //方向鍵為「右」且原方向不為左時,讓dir=4.
}
}
註:上下左右鍵按下後都會產生2個值,第一個是224,第二個才分別是72、80、75和
77.所以要用庫函數getch( )兩次獲取鍵值。如果是ASDW來控制拐彎,flag可以定義為
字元型,獲取一次鍵值即可。
⑦ 如何在C語言中讀取鍵盤輸入的快捷鍵
命令行輸入是不響應很多組合鍵的
所以要想讀取快捷鍵,那麼就要從系統層面讀取
而不是用庫函數
在Windows下可以用key hook
在linux下可以讀取input event
⑧ 摁鍵盤中,同時按下兩個鍵的c語言程序怎麼寫求一段程序
按鍵的同時檢測
如果實在游戲裡面
windows.h,stdio.h
if(GetAsyncKeyState('A')&0x8000)//'A'
c|=4;
if(GetAsyncKeyState('D')&0x8000)//'D'
c|=8;
if(c&4&&c&8)
{printf("hello");
c=0;
}
用了GetAsyncKeyStateapi的函數,這個函數的使用方法很有特點
用了get監測按鍵按下,然後c分別和4,8來或運算,然後if再用與運算監測,確實按下了那兩個按鍵之後執行什麼,當然在加&&,可以監測多個按鍵
⑨ 用C語言,同時接受多個按鍵,要怎麼寫代碼,例如我做坦克大戰,雙人游戲時要控制坦克和發射子彈。
windows下是用消息隊列來捕捉按鍵事件的,建議看下MFC,至於怎麼控制坦克,用BFS和堆棧