找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
發表文章前請先閱讀相關版規伊莉需要你的贊助和支持儲值後自動升級用戶組
火影三上世紀帝國國中kkbox流出
えっちえ警察正妹壹柒柒p大原創hololiveblamed

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]無職轉生 第二季1

[繁]轉生貴族憑鑑定技

晴天 體驗台灣特色檳

[繁]從Lv2開始開外掛

[繁]月光下的異世界之

(4月新番)[繁]終末的
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 2294|回復: 1
打印上一主題下一主題

[問題](已解決) (附贈程式碼) 請問C有否脫離主控權後還能擷取讀取鍵盤資訊的方法[複製鏈接]

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
31679 米
跳轉到指定樓層
樓主
發表於 2016-1-24 12:07 AM|只看該作者|倒序瀏覽
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
本帖最後由 snowflying 於 2016-1-25 11:38 PM 編輯

如題所問....以往偵測鍵盤資訊我都是使用kbhit...但是如今碰到的專案情況是要程式在背景執行下...好比說啟動後最小化...此時kbhit就已失效無法得知鍵盤是否有被按下
因此想請問版上大大是否能給予資訊或是想法與方向

點評

snowflying GetAsyncKeyState 系列的 Win API?  發表於 2016-1-24 02:25 AM
分享分享0收藏收藏0支持支持0
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
31679 米
頭香
發表於 2016-1-24 12:40 PM|只看該作者
本帖最後由 baepi 於 2016-1-24 02:35 PM 編輯

感謝snowflying提供方向
以下是我編寫成果...善用程式內的bool值...其實已可以準確得知所按的按鍵是否為大小寫(雖然我的專案不需要知道如此詳細...只是單純想試試看)
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <Winuser.h>
  4. using namespace std;

  5. #include"PASS_TIME.h"        //自寫的計時涵式包...複製時請把這行砍掉

  6. bool Num_Lock_flag = false , Caps_Lock_flag = false;
  7. #define Max_Key_Num 223                //並非有222個....而是一般鍵盤的最大KEY號到222...因此內有很多空號...若是你家鍵盤天賦異稟號碼更高者...請自行調整此值
  8. bool key_flag[Max_Key_Num];
  9. m_P_T pt[Max_Key_Num];        //計時器...用來計算每個按鍵被按下多久後才放開...這是我自己寫的class...一般可以用clock()包成class代替...但是有溢位問題須自己解決...因為我不想去處理這問題所以我不是用clock()
  10. //若是沒有要得知時間者...請把程式內的計時部分砍掉即可運作
  11. void main()
  12. {
  13.         //init
  14.         for(int i = 0 ; i < Max_Key_Num ; i++)
  15.         {
  16.                 key_flag[i] = false;
  17.         }

  18.         while(true)
  19.         {
  20.                 if(GetKeyState(VK_NUMLOCK))
  21.                 {
  22.                         if(!Num_Lock_flag)
  23.                         {
  24.                                 Num_Lock_flag = true;
  25.                                 cout<<"Num Lock OPEN\n";
  26.                         }
  27.                 }
  28.                 else
  29.                 {
  30.                         if(Num_Lock_flag)
  31.                         {
  32.                                 Num_Lock_flag = false;
  33.                                 cout<<"Num Lock CLOSE\n";
  34.                         }
  35.                 }

  36.                 if(GetKeyState(VK_CAPITAL))
  37.                 {
  38.                         if(!Caps_Lock_flag)
  39.                         {
  40.                                 Caps_Lock_flag = true;
  41.                                 cout<<"Caps Lock OPEN\n";
  42.                         }
  43.                 }
  44.                 else
  45.                 {
  46.                         if(Caps_Lock_flag)
  47.                         {
  48.                                 Caps_Lock_flag = false;
  49.                                 cout<<"Caps Lock CLOSE\n";
  50.                         }
  51.                 }

  52.                 for(int i = 8 ; i < Max_Key_Num ; i++)
  53.                 {
  54.                         if(GetAsyncKeyState(i)&0x8000)
  55.                         {
  56.                                 if(!key_flag[i])
  57.                                 {
  58.                                         pt[i].pass_time();
  59.                                         pt[i].time = 0;
  60.                                         key_flag[i] = true;
  61.                                 }
  62.                         }
  63.                         else
  64.                         {
  65.                                 if(key_flag[i])
  66.                                 {
  67.                                         pt[i].time = pt[i].pass_time();
  68.                                         cout<< "Key = " << i << " Time = " << pt[i].Ans() <<endl;
  69.                                         key_flag[i] = false;
  70.                                 }
  71.                         }
  72.                 }
  73.         }
  74. }
  75. /*        下表查Winuser.h也可得知...我只是順便寫出來好方便查閱
  76. BACKSPACE        8
  77. TAB                        9
  78. Enter                13        
  79. LShift                16        160
  80. RShift                16        161
  81. LCtrl                17        162
  82. RCtrl                17        163
  83. LAlt                18        164
  84. RAlt                18        165
  85. Caps Lock        20
  86. ESC                        27

  87. Page UP                33
  88. Page Down        34
  89. End                        35
  90. Home                36

  91. Left                37
  92. UP                        38
  93. Right                39
  94. Down                40

  95. Print S S        44
  96. Insert                45
  97. Delete                46

  98. 0                        48
  99. 1                        49
  100. 2                        50
  101. 3                        51
  102. 4                        52
  103. 5                        53
  104. 6                        54
  105. 7                        55
  106. 8                        56
  107. 9                        57

  108. A                        65
  109. B                        66
  110. C                        67
  111. D                        68
  112. E                        69
  113. F                        70
  114. G                        71
  115. H                        72
  116. I                        73
  117. J                        74
  118. K                        75
  119. L                        76
  120. M                        77
  121. N                        78
  122. O                        79
  123. P                        80
  124. Q                        81
  125. R                        82
  126. S                        83
  127. T                        84
  128. U                        85
  129. V                        86
  130. W                        87
  131. X                        88
  132. Y                        89
  133. Z                        90

  134. LWin                91
  135. RWin                92
  136. APPS                93

  137. Num 0                96
  138. Num 1                97
  139. Num 2                98
  140. Num 3                99
  141. Num 4                100
  142. Num 5                101
  143. Num 6                102
  144. Num 7                103
  145. Num 8                104
  146. Num 9                105

  147. Num *                106
  148. Num +                107
  149. Num -                109
  150. Num .                110
  151. Num        /                111

  152. F1                        112
  153. F2                        113
  154. F3                        114
  155. F4                        115
  156. F5                        116
  157. F6                        117
  158. F7                        118
  159. F8                        119
  160. F9                        120
  161. F10                        121
  162. F11                        122
  163. F12                        123
  164. F13                        124
  165. F14                        125
  166. F15                        126
  167. F16                        127
  168. F17                        128
  169. F18                        129
  170. F19                        130
  171. F20                        131
  172. F21                        132
  173. F22                        133
  174. F23                        134
  175. F24                        135

  176. Num Lock        144
  177. Scroll Lock        145

  178. :;                        186
  179. +                        187
  180. <,                        188
  181. -                        189
  182. >.                        190
  183. ?/                        191
  184. ~                        192

  185. {[                        219
  186. |\                        220
  187. }]                        221
  188. "'                        222
  189. */
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部