當前位置:首頁 » 編程語言 » c語言判斷按鍵按下
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言判斷按鍵按下

發布時間: 2023-08-17 04:21:05

A. c語言如何檢測點擊的按鈕

通常很多情況下,會有這樣的事情,就是:

我們在運行某些程序的時候,發現按鈕置灰了,比如購買版權或者輸入序列號才能夠獲得訪問許可權。某個按鈕才允許點擊。

其實所有的這些東西都是 別的人或者公司利用一些編程語言調用windows的函數,實現的。所以如果我們也能調用windows的函數,那麼我們就能夠執行一些按鈕或者某些東西背後的函數。

自己的mfc還暫時 用不了,不過 可以 試試這個。

調出這個界面,看到有一個置灰的設置按鈕。我們可以試著調用這個後面的函數。

/*如何調出來?【在win7環境下】

打開控制面板

點擊滑鼠。*/

然後利用vs的工具中的spy++ x64。

進入查找窗口。

拖住這個到剛剛滑鼠的那個置灰的按鈕上面。就可以得到一個句柄。

句柄【在我理解,就是一個話把子,怎麼解釋,核隱敬就是,別人說一件事兒,你得順著往下說才能把話接下來,然後完成你想說的東西。在程序裡面,執行到這里,有這樣一個句柄,允許我們說話了,我們就從這一點開始,順著往攜蔽下說,往往就能得到我們想要的結果】

所以得到了句柄之後。我們可以新建一個工程。

#include <windows.h>

int main(){

SendMessage(0x001607E6,WM_LBUTTONDOWN,0,0);
SendMessage(0x001607E6,WM_LBUTTONUP,0,0);

return 0;
}

//在HWND的第一個參數裡面輸入剛剛的句柄。

//猜測 第二個參數 是 WindowManager_LeftButtonDown,就是窗口管理改慎器左鍵按鈕點下。

//然後左鍵按鈕彈起。

就強制的往剛剛不能執行的函數裡面發送了一個信息。前面的引文介紹說,這就是調用了windows底層的一些函數,如果按鈕可以點擊,則滑鼠點擊,按鈕按下,當需要注冊的時候,或者需要序列號的時候我們並沒有,就不能點擊。但是當我們給他發送一條消息以後,是不是問題就解決了。

B. c語言怎樣判斷鍵盤按鍵的按下、釋放


C語言判斷鍵盤按下和釋放,是通過檢測該鍵的狀態來實現的。如果是單一的一個按鍵,那麼直接檢測該鍵是「1」還是「0」,就可以確定是按下還是釋放。如果是矩陣鍵盤,那麼需要發送掃描碼,再檢測輸入值,來判斷鍵盤中鍵的狀態。以下舉例說明:

bitkeychk()//單一按鍵檢測

{

if(P1.0==0)//如果鍵按下

{

delay();//延時去抖

if(P1.0==0)return(1);//返回鍵狀態


}

return(0);

}

unsignedcharkbscan(void)//矩陣掃描按鍵檢測

{

unsignedcharsccode,recode;

P1=0x0f;//發0掃描,列線輸入

if((P2&0x0f)!=0x0f)//有鍵按下

{

delay(20);//延時去抖動

if((P1&0x0f)!=0x0f)

{

sccode=0xef;//逐行掃描初值

while((sccode&0x01)!=0)

{

P1=sccode;

if((P1&0x0f)!=0x0f)

{

recode=(P1&0x0f)|0xf0;

while((P1&0x0f)!=0x0f);//等待鍵抬起

return((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return0;//無鍵按下,返回0

}

C. 求救c語言 如果要檢測兩個鍵同時被按下和鬆手檢測的,要怎麼樣寫呢

程序是順序執行的,不存在嚴格的「同時」檢測。所以,我們可以設置一個很「高」的檢測頻率。在同一個檢測周期里發現按鍵都按下就可當做是同時按下。
然後你需要解決如何發現按鍵按下動作這個問題。
按鍵按下同樣也不必一按下你就馬上要發現這么緊張。同樣在這么一個很「高」的檢測頻率下。發現前一次檢測是個「沒按下」狀態現在變成了「按下」那就可以當做是這次檢測周期里「按下」。
然後你需要解決如何記錄前一次檢測是什麼東西的問題。
你需要額外用個寄存器暫時放你前一次檢測的結果。並在檢測周期結束之前記錄當前的「日誌」。
於是,你可以很從容地發現現在按鍵的狀況以及上一次按鍵是個什麼情況,你掌握了歷史、當下、還要安排一下未來:檢測到按鍵的動作後你要再寫個服務程序來使用這個按鍵檢測的結果。
最後,再說明一下,這個很「高」的頻率大概10幾ms也行的。越高頻率檢測越准確。同時。這個「同時」的檢測也越嚴格。你可能會導致怎麼按都很難觸發『同時』的動作。

D. C語言 如何在一段時間內檢測鍵盤是否按下

#include <bios.h>
#include <stdio.h>
main()
{
int key;
for(;;)
{
if (bioskey(1)) /*有鍵按下,讀取鍵值*/
key=bioskey(0);
else /*無鍵按下,返回0*/
key=0;
switch(key)
{case 0: ...../*無按鍵,執行該操作*/
case 0xXXXXH:..../*不同鍵值,做不同處理*/
。。。。。
}
}
}

該程序段功能:
判斷是否有鍵按下,若有進行不同操作,若無進行其他操作。

相關原理:
函數名: bioskey
功 能: 直接使用BIOS服務的鍵盤介面
函數原型:int bioskey (int cmd)
說明:bioskey()的函數原型在bios.h中
bioskey()完成直接鍵盤操作,cmd的值決定執行什麼操作。

cmd = 1:
當cmd是1,bioskey()查詢是否按下一個鍵,若按下一個鍵則返回非零值,否則返回0。

鍵盤有按鍵時,會把鍵值(掃描碼)存入緩沖區,當需要判斷是否有鍵按下時,掃描緩沖區,為空則無鍵按下,不為空則有鍵按下。注意:該功能並不清空緩沖區。

cmd = 0:
當cmd是0,bioskey()返回鍵盤鍵入的值。它返回一個16位的二進制數,包括兩個不同的值。當按下一個普通鍵時,它的低8位數存放該字元的ASCII碼,高8位存放該鍵的掃描碼;對於特殊鍵(如方向鍵、F1~F12等等),低8位為0,高8位位元組存放該鍵的掃描碼。

其操作步驟為:
1.檢測緩沖區是否有數據;
2.沒有則繼續第一步;
3.讀取緩沖區第一個單元中的鍵盤輸入
4.讀取的掃描碼
5.將已讀取的鍵盤輸入從緩沖區刪除

E. c語言怎麼判斷是否點擊了滑鼠,簡單一點的方法,dev c++可以用的,謝謝各位大神。

#include<cstdio>
#include<windows.h>
#define棗鄭KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)行爛?1:0)

intmain()
{
while(1)
{
printf("滑鼠左鍵是否按下:");
if(KEY_DOWN(VK_LBUTTON))printf("是");
elseprintf("否");
printf(" ");

printf("滑鼠右鍵是否按下:");
if(KEY_DOWN(VK_RBUTTON))printf("是");
else檔岩漏printf("否");
printf(" ");

Sleep(2000);
}
return0;
}

F. 求救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;
};
};

}