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

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人發表文章前請先閱讀相關版規尊貴會員無限看帖不用回覆
無碼蘿莉人妖overlordgd高中流出
基隆 鐡ヘルター無能紅魔[たろバ点点滴滴快打旋風可恩的一

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

[繁中]霹靂英雄戰紀之

✡ 斗破蒼穹 年番/鬥

[繁]狼與辛香料 MERCH

(4月新番)[繁]無職轉

(4月新番)[繁]怪異與

[繁]轉生貴族憑鑑定技
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 4160|回復: 6
打印上一主題下一主題

查 ASCII Code _ source code[複製鏈接]

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

帖子
2979
積分
12825 點
潛水值
41478 米
跳轉到指定樓層
樓主
發表於 2008-11-15 02:44 AM|只看該作者|倒序瀏覽
以下程式很短 不過我卻常用

在 keyboard 上按下你要的鍵值,

就會顯示 ASCII Code

我想一般人而言應該是夠用了

但仍想請教高手...

Winkey, Ctrl, Shit , Caps Lock

Print Scrn, Scroll Lock, Pause Bread,

是否非呼叫 API 才能攔下來?


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. void main()
  5. {
  6. char ch;
  7. while(true){
  8.   ch=getch();
  9.   printf("%c: %02X %03d\n", ch, ch, ch);
  10. }
  11. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
如果我說,灌了二頁的水是因為lag / 系統不穩,
我想應該也不會有人相信吧..

使用道具檢舉

帖子
0
積分
0 點
潛水值
0 米
頭香
發表於 2008-11-16 01:44 PM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
key:

scan code(keyboard )

下載: 訪客無法瀏覽下載點,請先 註冊登入會員


下載: 訪客無法瀏覽下載點,請先 註冊登入會員


希望對你有幫助   (注意keyboard上  是  scan code  不是 ascii code  )...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
1061
積分
1327 點
潛水值
4415 米
3
發表於 2008-11-16 09:10 PM|只看該作者
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

回復 #2 wupojung 的帖子

> key: scan code(keyboard )

一些按鍵碼資料..
下載: 訪客無法瀏覽下載點,請先 註冊登入會員


藍影他是想以 C/C++ 的 標準 or 非標準 函式庫,
而非明確呼叫 Windows API 來取得 scan code 與 key code...
雖然那些函式庫底層實作,其實還是用了 Windows API :-)
...
瀏覽完整內容,請先 註冊登入會員
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

帖子
2979
積分
12825 點
潛水值
41478 米
4
發表於 2008-11-16 11:09 PM|只看該作者
謝謝 wupojung  及  daviddr 大大的細心回覆與指教

你們所提供的網頁是我所沒觸及的部分

(果真是才疏學淺…自嘆不如…)

再次感謝二位的細心指教!

謝謝
如果我說,灌了二頁的水是因為lag / 系統不穩,
我想應該也不會有人相信吧..

使用道具檢舉

帖子
0
積分
0 點
潛水值
0 米
5
發表於 2008-11-17 12:21 PM|只看該作者
原帖由 daviddr 於 2008-11-16 09:10 PM 發表
> key: scan code(keyboard )

一些按鍵碼資料..
下載: 訪客無法瀏覽下載點,請先 註冊登入會員


藍影他是想以 C/C++ 的 標準 or 非標準 函式庫,
而非明確呼叫 Windows API 來取得 scan code ...
...
瀏覽完整內容,請先 註冊登入會員





如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
1061
積分
1327 點
潛水值
4415 米
6
發表於 2008-11-17 01:04 PM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
在 Visual Studio 9\VC\crt\src 裡有 getch.c

x86 定義下:

  1. _Check_return_ _CRT_NONSTDC_DEPRECATE(_getch) _CRTIMP int __cdecl getch(void);

  2. int __cdecl _getch (void)
  3. {
  4.         int ch;
  5.         _mlock(_CONIO_LOCK);            /* secure the console lock */
  6.         __TRY
  7.             ch = _getch_nolock();       /* input the character */
  8.         __FINALLY
  9.             _munlock(_CONIO_LOCK);      /* release the console lock */
  10.         __END_TRY_FINALLY
  11.         return ch;
  12. }
複製代碼


其中 _mlock 與 _munlock 進行臨界區鎖定與解除,實作為:

  1. void __cdecl _lock (int locknum)
  2. {
  3.         if ( _locktable[locknum].lock == NULL ) {   // Create/open the lock,if necessary
  4.             if ( !_mtinitlocknum(locknum) )
  5.                 _amsg_exit( _RT_LOCK );
  6.         }
  7.         EnterCriticalSection( _locktable[locknum].lock );   //Enter the critical section
  8. }

  9. void __cdecl _unlock ( int locknum )
  10. {
  11.         LeaveCriticalSection( _locktable[locknum].lock );   //leave the critical section
  12. }
複製代碼



再看 _getch_nolock :

  1. int __cdecl _getch_nolock (void)
  2. {
  3.         INPUT_RECORD ConInpRec;
  4.         DWORD NumRead;
  5.         const CharPair *pCP;
  6.         int ch = 0;                     /* single character buffer */
  7.         DWORD oldstate;

  8.         // check pushback buffer (chbuf) a for character         
  9.         if ( chbuf != EOF ) {
  10.             // something there, clear buffer and return the character.
  11.             ch = (unsigned char)(chbuf & 0xFF);
  12.             chbuf = EOF;
  13.             return ch;
  14.         }
  15.         // _coninpfh, the handle to the console input, is created the first
  16.         // time that either _getch() or _cgets() or _kbhit() is called.
  17.         
  18.         if (_coninpfh == -2 ) __initconin();
  19.         if (_coninpfh == -1)  return EOF;

  20.         // Switch to raw mode (no line input, no echo input)
  21.          
  22.         GetConsoleMode( (HANDLE)_coninpfh, &oldstate );
  23.         SetConsoleMode( (HANDLE)_coninpfh, 0L );

  24.         for (;;) {
  25.             // Get a console input event.            
  26.             if ( !ReadConsoleInput( (HANDLE)_coninpfh, &ConInpRec,
  27.                                     1L, &NumRead )
  28.                  || (NumRead == 0L) )
  29.             {
  30.                 ch = EOF;
  31.                 break;
  32.             }

  33.             // Look for, and decipher, key events.
  34.             
  35.             if ( (ConInpRec.EventType == KEY_EVENT) &&
  36.                  ConInpRec.Event.KeyEvent.bKeyDown ) {               
  37.                 if ( ch = (unsigned char)ConInpRec.Event.KeyEvent.uChar.AsciiChar )
  38.                     break;

  39.                 // either an extended code or an event which should
  40.                 // not be recognized. let _getextendedkeycode() do the work...
  41.                  
  42.                 if ( pCP = _getextendedkeycode( &(ConInpRec.Event.KeyEvent) ) ) {
  43.                     ch = pCP->LeadChar;
  44.                     chbuf = pCP->SecondChar;
  45.                     break;
  46.                 }
  47.             }
  48.         }
  49.         SetConsoleMode( (HANDLE)_coninpfh, oldstate );   //Restore previous console mode
  50.         return ch;
  51. }
複製代碼


亦即,先將 console handle 保存於 _coninpfh,
再透過 ReadConsoleInput 取得 ASCII Code 與 Extended Code (if need)。

所以....
在 VC9 CRT 的實作裡,getch 只是 API 的一份包裝。...
瀏覽完整內容,請先 註冊登入會員
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
1061
積分
1327 點
潛水值
4415 米
7
發表於 2008-11-18 01:42 PM|只看該作者
其他實作 getch 的方式,大概就是 DirectInput,
例如 Facundo Matias Carreiro 做的 Scalable Console System:
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

不過 DInput 其實也只是 GetAsyncKeyState, keybd_event,
MapVirtualKey.. 的包裝罷了。

使用道具檢舉

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

Powered by Discuz!

© Comsenz Inc.

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