博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初始化 键盘设备
阅读量:6985 次
发布时间:2019-06-27

本文共 2483 字,大约阅读时间需要 8 分钟。

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的大小,就可以:得到dwData53     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         else24         {25             break;26         }27     }28 }
1 BYTE keys[256]; // 256个按键2 #define KEY_DOWN(key) (keys[key] &0x80)

 

转载于:https://www.cnblogs.com/lc-cnblong/p/3368996.html

你可能感兴趣的文章
C#MysqlHelper
查看>>
Codeforces 606-C:Sorting Railway Cars(LIS)
查看>>
Visual Studio 2015上安装Entity Framework Power Tools
查看>>
shell惊鸿
查看>>
linux percpu机制解析【转】
查看>>
C#多线程编程
查看>>
maven下的jar项目打包的方法
查看>>
为确保固定资产的财务帐与实物帐一致,应采取的措施
查看>>
带你从零学ReactNative开发跨平台App开发-[react native 仿boss直聘](十三)
查看>>
c#的托管代码和非托管代码的理解
查看>>
Laravel学习笔记之Session源码解析(上)
查看>>
Java NIO vs. IO
查看>>
Add Two Numbers
查看>>
用Thymeleaf在前台下拉列表取值
查看>>
Java strictfp
查看>>
新建jsp项目
查看>>
numpy.loadtxt()
查看>>
Chrome 调用vue.js 记录
查看>>
将float转换为数据类型numeric时出现算术溢出错误
查看>>
java基础-回调函数(callback)
查看>>