win32 – RegisterRawInputDevices 和 GetRawInputData

win32 – RegisterRawInputDevices 和 GetRawInputData RegisterRawInputDevices 可以注册鼠标或者键盘等输入的信息,然后GetRawInputData可以获取传来的WM_INPUT消息中的输入信息。代码参考:#inclu

大家好,又见面了,我是你们的朋友全栈君。

RegisterRawInputDevices 可以注册鼠标或者键盘等输入的信息,然后GetRawInputData可以获取传来的WM_INPUT消息中的输入信息。

代码参考:

#include <windows.h>
#include <iostream>
using namespace std;
LRESULT CALLBACK WindProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    if (Msg == WM_INPUT)
    {
        HRAWINPUT hRawInput = (HRAWINPUT)lParam;
        RAWINPUT input = { 0 };
        UINT size = sizeof(input);
        GetRawInputData(hRawInput, RID_INPUT, &input, &size, sizeof(RAWINPUTHEADER));

        printf("vkey: %x, flag: %d\n", input.data.keyboard.VKey, input.data.keyboard.Flags);
    }
    return DefWindowProc(hWnd, Msg, wParam, lParam);
}

int main()
{
    WNDCLASSEX wcx = { 0 };
    wcx.cbSize = sizeof(WNDCLASSEX);
    wcx.lpfnWndProc = WindProc;
    wcx.hInstance = GetModuleHandle(NULL);
    wcx.lpszClassName = TEXT("RawInputClass");
    RegisterClassEx(&wcx);
    HWND hWnd = CreateWindowEx(0, TEXT("RawInputClass"), NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, GetModuleHandle(NULL), NULL);

    RAWINPUTDEVICE rid = { 0 };
    rid.usUsagePage = 0x01;
    rid.usUsage = 0x06; //keyboard
    rid.dwFlags = RIDEV_INPUTSINK;
    rid.hwndTarget = hWnd;

    RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154919.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python count()函数

    python count()函数Python元组count()方法用于统计某个元素在元祖,列表,字符串中出现的次数。可选参数为在字符串搜索的开始与结束位置。参数sub–搜索的子字符串start–字符串开始搜索

    2022年7月5日
    20
  • Python第七章-面向对象高级

    Python第七章-面向对象高级面向对象高级一、特性特性是指的property.property这个词的翻译一直都有问题,很多人把它翻译为属性,其实是不恰当和不准确的.在这里翻译成特性是为了和属性区别开来.属性是指的

    2022年7月6日
    19
  • PHPer面试指南-php 篇(二)「建议收藏」

    PHPer面试指南-php 篇(二)

    2022年2月11日
    52
  • 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】

    基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】资源下载:https://download.csdn.net/download/weixin_44893902/33163160一、语言和环境1.实现语言:JAVA语言。2.环境要求:MyEclipse/Eclipse+Tomcat+MySql。3.使用技术:SpringMVC+Spring+Mybatis。二、实现功能随着校内图书馆的发展,现需要制作图书信息管理系统,主要功能如下:1.首页默认显示所有图书信息2.鼠标悬停某行数据时,以线性过渡动画显示光棒效果3.用.

    2022年6月3日
    40
  • Android经典应用程序开发

    Android经典应用程序开发Android 经典应用程序开发韩超 nbsp 编著 ISBN978 7 121 15586 42012 年 2 月出版定价 59 00 元 16 开 428 页宣传语 具有清晰的主线 知识点全面 内容简洁实用理论 文档和代码三者结合 以通用理念指引 Android 开发 nbsp nbsp nbsp nbsp nbsp 内容简介本书内容理论联系实际 系统化组织 全书由 8 章组成 涵盖了 Android 经典应用程序开发的各个方面

    2025年10月27日
    4
  • java 怎样卸载一个类_Java 动态卸载类[通俗易懂]

    java 怎样卸载一个类_Java 动态卸载类[通俗易懂]通过反射,我们可以动态的将类加载到方法区中,但是卸载这个类,却有着比较严苛的条件1.该类所有的实例都已经被GC,也就是JVM中不存在该Class的任何实例。2.加载该类的ClassLoader已经被GC。3.该类的java.lang.Class对象没有在任何地方被引用,如不能在任何地方通过反射访问该类的方法.publicstaticvoidmain(String[]args)th…

    2022年5月18日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号