• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我住包子山

            this->blog.MoveTo("blog.baozishan.in")

            Win32命令行應(yīng)用,ReadConsoleInput()得到鍵盤VK_CODE

            image

                ReadConsoleInput是一個(gè)Win32 API,  聲明如下:

            BOOL ReadConsoleInput(
              HANDLE hConsoleInput, //輸入句柄
              PINPUT_RECORD lpBuffer, //指向INPUT_RECORD結(jié)構(gòu)體(數(shù)組)的指針
              DWORD nLength, //上面那個(gè)結(jié)構(gòu)體的大小
              LPDWORD lpNumberOfEventsRead //實(shí)際讀入輸入內(nèi)容的個(gè)數(shù)
            );

                我把讀入的功能寫在這個(gè)助手類中,ReadConsoleInput的得到VK_CODE的方法可以看ReadKeyDown和ReadKeyPush兩個(gè)函數(shù),它們的效果略有點(diǎn)不同。右圖是效果截圖,按ESC跳出循環(huán)。助手類以后還可以添加顏色控制位置控制等功能,只要你想,目的就是為了簡(jiǎn)化API調(diào)用。

            #pragma once
            #include <Windows.h>
            class GohanConsoleHelper
            {
                HANDLE _hIn;
                HANDLE _hOut;
                INPUT_RECORD _InRec;
                DWORD _NumRead;
            public:
                WORD VKey;
                GohanConsoleHelper(void){
                    _hIn = GetStdHandle(STD_INPUT_HANDLE);
                    _hOut = GetStdHandle(STD_OUTPUT_HANDLE);
                    VKey=0;
                }
                bool ReadOneInput()
                {
                    return 0!=ReadConsoleInput(_hIn,&_InRec,1,&_NumRead);
                }
                bool ReadOneInput(INPUT_RECORD& InRec)
                {
                    return 0!=ReadConsoleInput(_hIn,&InRec,1,&_NumRead);
                }
                DWORD ReadKeyDown()
                {
                    if(!ReadConsoleInput(_hIn,&_InRec,1,&_NumRead))
                        return 0;
                    if(_InRec.EventType!=KEY_EVENT)
                        return 0;
                    if(_InRec.Event.KeyEvent.bKeyDown > 0)
                        return 0;
                    VKey = _InRec.Event.KeyEvent.wVirtualKeyCode;
                    return VKey;
                }
                DWORD ReadKeyPush()
                {
                    if(!ReadConsoleInput(_hIn,&_InRec,1,&_NumRead))
                        return 0;
                    if(_InRec.EventType!=KEY_EVENT)
                        return 0;
                    if(_InRec.Event.KeyEvent.bKeyDown == 0)
                        return 0;
                    VKey = _InRec.Event.KeyEvent.wVirtualKeyCode;
                    return VKey;
                }
            public:
                ~GohanConsoleHelper(void){}
            };
             
             

             

            main所在文件內(nèi)容

            #include <windows.h>
            #include <iostream>
            #include "GohanConsoleHelper.h"
            using namespace std;
            int main()
            {
                GohanConsoleHelper gch;
                while (true)
                {
                    if(gch.ReadKeyPush()!=0) //使用ReadKeyDown()捕獲按鍵彈起的VK_CODE
                    {
                        if(gch.VKey != VK_ESCAPE)
                            cout<<"VK_CODE == "<<gch.VKey<<endl;
                        else {
                            cout<<"Bye~~"<<endl;
                            break;
                        }
                    }
                }
                return 0;
            }

             

                在命令行得到VK_CODE可以干許多事情了,可以寫個(gè)在Win32命令行下的小游戲,俄羅斯方塊啊什么的,呵呵,不過(guò)畫面稍微好點(diǎn)的就搞不了了,因?yàn)楫吘箇in32命令行分辨率太低了。

               忘了放出參考的資料:

            http://adrianxw.dk/ 比較全面的Win32命令行教程

            posted on 2008-05-23 00:08 Gohan 閱讀(6187) 評(píng)論(5)  編輯 收藏 引用 所屬分類: C++Practise

            Feedback

            # re: Win32命令行應(yīng)用,ReadConsoleInput()得到鍵盤VK_CODE 2008-05-23 09:46 Leewings

            開(kāi)學(xué)的時(shí)候想過(guò)去學(xué)API,不過(guò)....一直都沒(méi)有去學(xué)誒.  回復(fù)  更多評(píng)論   

            # re: Win32命令行應(yīng)用,ReadConsoleInput()得到鍵盤VK_CODE 2008-05-23 15:24 Gohan

            @Leewings
            我也沒(méi)有怎么學(xué)過(guò),想用的時(shí)候查查,用過(guò)的就留點(diǎn)印象吧,呵呵  回復(fù)  更多評(píng)論   

            # re: Win32命令行應(yīng)用,ReadConsoleInput()得到鍵盤VK_CODE 2008-05-25 22:04 wangyucao

            看不懂啊……  回復(fù)  更多評(píng)論   

            # re: Win32命令行應(yīng)用,ReadConsoleInput()得到鍵盤VK_CODE 2008-05-26 10:21 Kevin Lynx

            貌似console下也可以調(diào)用GetAsyncKeyState   回復(fù)  更多評(píng)論   

            # re: Win32命令行應(yīng)用,ReadConsoleInput()得到鍵盤VK_CODE 2008-05-26 12:50 Gohan

            @Kevin Lynx
            謝謝你的指點(diǎn),我沒(méi)用過(guò)這個(gè)API,我想應(yīng)該可以用,http://msdn.microsoft.com/en-us/library/ms646293,這個(gè)GetAsyncKeyState是異步判斷是否按了某一個(gè)鍵,更加簡(jiǎn)單,而ReadConsoleInput可以直接獲得按的什么鍵以及其它的命令行輸入事件,而且是阻塞的,用起來(lái)麻煩,呵呵  回復(fù)  更多評(píng)論   

            精品久久久久久无码中文字幕 | 久久国产成人午夜aⅴ影院| 91精品国产91久久久久久青草| 伊人久久国产免费观看视频| 99久久久国产精品免费无卡顿 | 久久99精品久久久久久齐齐 | 久久精品三级视频| 亚洲人成精品久久久久| 久久丫忘忧草产品| 欧美性猛交xxxx免费看久久久| 久久精品aⅴ无码中文字字幕不卡| 中文字幕精品无码久久久久久3D日动漫| 青草影院天堂男人久久| 久久精品国产半推半就| 久久久久亚洲爆乳少妇无| 久久综合伊人77777| 色综合久久无码中文字幕| 色婷婷综合久久久久中文一区二区| 大香伊人久久精品一区二区| 狠狠综合久久AV一区二区三区| 久久九九兔免费精品6| 久久电影网一区| 亚洲欧美一区二区三区久久| 免费久久人人爽人人爽av| 99久久国产综合精品麻豆| 久久久精品国产亚洲成人满18免费网站| 久久久久亚洲爆乳少妇无 | 久久这里的只有是精品23| 97精品伊人久久久大香线蕉| 秋霞久久国产精品电影院| 久久久久久毛片免费看| 国产精品免费看久久久| 热RE99久久精品国产66热| 香港aa三级久久三级| 伊人久久大香线蕉亚洲五月天| 亚洲伊人久久大香线蕉苏妲己| 久久久久亚洲AV无码麻豆| 免费精品久久久久久中文字幕| 国产成人精品综合久久久久| 四虎亚洲国产成人久久精品| 久久国产乱子伦精品免费午夜|