zoukankan      html  css  js  c++  java
  • 初始化 键盘设备

     1 bool initInput(HWND hWnd)
     2 {
     3     // 第一步 得到获取设备的接口 和 创建D3D设备一样
     4     // 由接口获得另一个接口。
     5     HRESULT res;
     6     res = DirectInput8Create(GetModuleHandle(NULL),
     7         DIRECTINPUT_VERSION,
     8         IID_IDirectInput8,
     9         (void **)&pInput,
    10         NULL);
    11 
    12     if (!SUCCEEDED(res))
    13     {
    14         return false;
    15     }
    16     // 第二步 创建设备,鼠标,键盘等。 
    17     res = pInput->CreateDevice(
    18         GUID_SysKeyboard, // 设备的GUID,这里使用定义好的
    19         &pKeyboard,        // 设备指针
    20         NULL);
    21     if (!SUCCEEDED(res))
    22     {
    23         return false;
    24     }
    25     // 第三步 为设备设置通信格式
    26     // 依然使用定义好的
    27     res = pKeyboard->SetDataFormat(&c_dfDIKeyboard);
    28     if (!SUCCEEDED(res))
    29     {
    30         return false;
    31     }
    32     // 第四步 设置协作模式,独占,共享,后台能否交互等。
    33     // 一般为 前台交互,非独占的模式。
    34     // 调试状态下 改为 非独占 后台可交互
    35     res = pKeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND);
    36     //res = pKeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
    37 
    38     if (!SUCCEEDED(res))
    39     {
    40         return false;
    41     }
    42 
    43     // 第五步 设置设备的缓冲区大小,默认为0(立即模式),键盘一般为立即模式,鼠标为缓冲模式
    44     //
    45     DIPROPDWORD dpw;
    46     dpw.diph.dwSize = sizeof(DIPROPDWORD); //必须初始化为外围结构的大小,如sizeof(DIPROPDWORD) 
    47     dpw.diph.dwHeaderSize = sizeof(DIPROPHEADER); //必须初始化为sizeof(DIPROPHEADER) 
    48     dpw.diph.dwHow = DIPH_DEVICE; //如果包含整个设备则为DIPH_DEVICE,否则为DIPH_BYOFFSET或DIPH_BYID,说明采用哪种系统标识设备物 
    49     dpw.diph.dwObj = 0; //属性被访问的设备物的标识,如果包含整个设备则为O(对设定缓冲区大小而言) 
    50     dpw.dwData = 0;
    51 
    52     // 外围的大小减去DIPROPHEADER即diph的大小,就可以:得到dwData
    53     res = pKeyboard->SetProperty(DIPROP_BUFFERSIZE,&dpw.diph);
    54     if (!SUCCEEDED(res))
    55     {
    56         return false;
    57     }
    58     res = pKeyboard->Acquire();
    59     if (!SUCCEEDED(res))
    60     {
    61         return false;
    62     }
    63 
    64     return true;
    65 }
     1 bool ReadState(char *buf,DWORD len)
     2 {
     3     HRESULT res;
     4 
     5     if (NULL == pKeyboard)
     6     {
     7         return false;
     8     }
     9     // 由于可能丢失设备
    10     while (true)
    11     {
    12         pKeyboard->Poll();
    13         res = pKeyboard->GetDeviceState(len,buf);
    14         if (DIERR_INPUTLOST == res)
    15         {
    16             res = pKeyboard->Acquire();
    17             
    18             if (FAILED(res))
    19             {
    20                 break;
    21             }
    22         }
    23         else
    24         {
    25             break;
    26         }
    27     }
    28 }
    1 BYTE keys[256]; // 256个按键
    2 #define KEY_DOWN(key) (keys[key] &0x80)
  • 相关阅读:
    阿里云短信服务工具类
    vue.config.js
    elementui Tree 树形控件增删改查
    vue 实时显示年月日时分秒星期上下午
    1553:【例 2】暗的连锁
    CF825G Tree Queries
    最短母串
    寻找好串
    无限链计数
    异或运算
  • 原文地址:https://www.cnblogs.com/lc-cnblong/p/3368996.html
Copyright © 2011-2022 走看看