C# 区分键盘和扫码枪输入

该代码示例展示了如何在C#中使用RAWINPUT结构来识别输入设备,阻止键盘输入,只允许扫码枪的数据传递。通过注册RawInput设备并监听WM_INPUT消息,程序能区分不同设备,从而实现特定设备控制界面的功能。
该文章已生成可运行项目,

最近有个项目客户有个要求有个界面只准扫码枪输入,不准用键盘输入,我研究了一下,找了找网上的代码,实现了一下,主要原理是提前知道输入信息的来源,判断哪个设备的,然后如果是键盘的,不往后面传递信息好了。

具体代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace testScanCode
{

    [StructLayout(LayoutKind.Sequential)]
    internal struct RAWINPUTDEVICE

    {

        [MarshalAs(UnmanagedType.U2)]

        public ushort usUsagePage;

        [MarshalAs(UnmanagedType.U2)]

        public ushort usUsage;

        [MarshalAs(UnmanagedType.U4)]

        public int dwFlags;

        public IntPtr hwndTarget;

    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct RAWINPUTHEADER

    {

        [MarshalAs(UnmanagedType.U4)]

        public int dwType;

        [MarshalAs(UnmanagedType.U4)]

        public int dwSize;

        public IntPtr hDevice;

        [MarshalAs(UnmanagedType.U4)]

        public int wParam;

    }

    [StructLayout(LayoutKind.Explicit)]
    internal struct RAWINPUT

    {

        [FieldOffset(0)]

        public RAWINPUTHEADER header;

        [FieldOffset(16)]

        public RAWMOUSE mouse;

        [FieldOffset(16)]

        public RAWKEYBOARD keyboard;

        [FieldOffset(16)]

        public RAWHID hid;

    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct RAWKEYBOARD

    {

        [MarshalAs(UnmanagedType.U2)]

        public ushort MakeCode;

        [MarshalAs(UnmanagedType.U2)]

        public ushort Flags;

        [MarshalAs(UnmanagedType.U2)]

        public ushort Reserved;
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值