C#应用程序实现限制输入法

前言

我们的操作系统,安装几个输入法很正常,在使用应用程序,输入数据时总会来回切换输入法。虽然系统操作提供了切换键,但也对输入的效率也有不少的影响。当使用外接设备来输了数据时,对输入的影响更大了。如在下面场景,使用条码扫描枪扫描商品条码、订单条码、快递单号条码时,出现扫描与输出结果不一致。那么应用程序如何限制或自动切换输入法,防止出现异常和提高效率。C#是通过什么方式来实现的,下面介绍二种方式禁用或打开输入法。

详细

C# 可以通过设置控件的属性或者调用系统的API 来禁用或打开输入法,对于.NET 4.8.1以下的还提供了InputLanguage类来切换输入法

控件属性

WinForm的TextBox 控件ImeMode,通过设置为ImeMode.Disable 即可将输入法禁用。

// 设置属性
this.TextBoxProductCode.ImeMode = ImeMode.Disable;

WPF的TextBox 控件也有相关的属性,只是属性名称不同。通过设置InputMethod.IsInputMethodEnabled 的值为False 即可禁用。

<!--WPF的 XAML文件中设置-->
<TextBox HorizontalAlignment="Left" Margin="400,162,0,0" Name="TextBoxProductCode" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" InputMethod.IsInputMethodEnabled="False" Grid.ColumnSpan="2"/>
<!--WPF的XAML.cs文件通过代码设置 -->
//禁用输入法
InputMethod.SetIsInputMethodEnabled(this.TextBoxProductCode, false);

系统 API

可以通过调用Windows API来控制输入法的启用和禁用。(通常使用控件属性,而不使用调用API)下面示例使用的是WPF

using System.Runtime.InteropServices;namespace Fountain.WPF.IMEDemo
{public class ImeModeController{/// <summary>/// 将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里/// </summary>/// <param name="hhwnd"></param>/// <param name="msg"></param>/// <param name="wparam"></param>/// <param name="lparam"></param>/// <returns></returns>[DllImport("user32.dll")]private static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);/// <summary>/// 该函数给系统中装入一种新的键盘布局/// </summary>/// <param name="pwszKLID"></param>/// <param name="Flags"></param>/// <returns></returns>[DllImport("user32.dll")]private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);/// <summary>/// /// </summary>private static uint msg = 0x0050;/// <summary>/// 进程间窗口广播消息/// </summary>private static int hhwnd = 0xffff;/// <summary>/// /// </summary>private static uint Flags = 1;// 中文private static string pwszcn = "00000804";// 英文private static string pwszen = "00000409";/// <summary>/// 禁用/// </summary>public static void InputMethodDisabled(){PostMessage(hhwnd, msg, IntPtr.Zero, LoadKeyboardLayout(pwszen, Flags));}/// <summary>/// 开启/// </summary>public static void InputMethodEnabeled(){PostMessage(hhwnd, msg, IntPtr.Zero, LoadKeyboardLayout(pwszcn, Flags));}}
}

界面调用

using System.Windows;namespace Fountain.WPF.IMEDemo
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{/// <summary>/// /// </summary>public MainWindow(){InitializeComponent();}/// <summary>/// 开启输入法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ButtonEnable_Click(object sender, RoutedEventArgs e){// 开启ImeModeController.InputMethodEnabeled();}/// <summary>/// 禁用输入法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ButtonDisabled_Click(object sender, RoutedEventArgs e){// 禁用ImeModeController.InputMethodDisabled();}}
}

小结

以上是C#限制输入法二种实现方式,使用控件自带的属性设置,基本能满足需求。希望对各位有所帮助,如有不足之处希望各位包容与谅解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在xml 中 不等式 做转义处理的问题

对于这种要做转义处理&#xff0c;<![CDATA[ < ]]>

LeetCode_509. 斐波那契数_java

1、题目 509. 斐波那契数https://leetcode.cn/problems/fibonacci-number/ 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#…

Discuz 论坛开发一套传奇发布站与传奇开服表

Discuz 论坛开发一套传奇发布站与传奇开服表 随着互联网技术的飞速发展&#xff0c;网络游戏已成为人们休闲娱乐的重要方式之一。在众多网络游戏中&#xff0c;传奇系列以其独特的魅力吸引了大量忠实玩家。为了满足这些玩家的需求&#xff0c;并促进游戏信息的交流与分享&…

密码学原理

1.1 加密算法 Tags: 1、加密算法分类 2、对称算法 <原理、特征、算法> 3、非对称算法 <原理、特征、算法> 4、对称算法vs非对称算法 <结合体> 1、加密算法概述&#xff1a; 用于对用户数据进行加密&#xff0c;常用算法有DES、3DES、AES、RSA、DH算法。根据密…

合约门合同全生命周期管理系统:企业合同管理的数字化转型之道

合约门合同全生命周期管理系统&#xff1a;企业合同管理的数字化转型之道 1. 引言 在现代企业中&#xff0c;合同管理已经不再是简单的文件存储和审批流程&#xff0c;而是企业合规性、风险管理和业务流程的关键环节之一。随着企业规模的扩大和合同数量的增加&#xff0c;传统…

Linux下MySQL8.x的编译安装与使用

Linux下MySQL的安装与配置 1. 安装环境初始化 1.1 查看是否安装过MySQL 如果使用rpm安装, 检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写 # 或者 yum list installed | grep mysql如果存在mysql-libs的旧版本包&#xff0c;显示如下 #存在 [rootlocalhost ~]…

NavMesh只制作可移动的导航网,清除多余不可走区域

只制作可移动的导航网。它使存储文件大小减小并提高性能。它消除了迁移到随机区域的问题。添加链接描述 1.如何使用 2.创建一个包含“NavMeshCleaner”组件的对象。Andadd指向可定制区域。 按住控制键并单击添加点。如果要移动它&#xff0c;请按 输入上的control键并单击。您…

信息安全工程师(55)网络安全漏洞概述

一、定义 网络安全漏洞&#xff0c;又称为脆弱性&#xff0c;是网络安全信息系统中与安全策略相冲突的缺陷&#xff0c;这种缺陷也称为安全隐患。漏洞可能导致机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控性下降、真实性不保等问题。 二、分类 网络安全漏洞可以根据…

桥接模式,外界与主机通,与虚拟机不通

一 二 在此选择Windows与外界连接的网卡&#xff0c;通过有线连就选有线网卡&#xff0c;通过无线连就选无线网卡。 三 如果需要设置固定IP&#xff0c;则选择"Manual"进行设置。我这边根据实际需要&#xff0c;走无线的时候用DHCP&#xff0c;走有线的时候设固定IP…

C#中的委托、匿名方法、Lambda、Action和Func

委托 委托概述 委托是存有对某个方法的引用的一种引用类型变量。定义方法的类型&#xff0c;可以把一个方法当作另一方法的参数。所有的委托&#xff08;Delegate&#xff09;都派生自 System.Delegate 类。委托声明决定了可由该委托引用的方法。 # 声明委托类型 委托类型声…

Golang | Leetcode Golang题解之第507题完美数

题目&#xff1a; 题解&#xff1a; func checkPerfectNumber(num int) bool {if num 1 {return false}sum : 1for d : 2; d*d < num; d {if num%d 0 {sum dif d*d < num {sum num / d}}}return sum num }

一文掌握Kubernates核心组件,构建智能容器管理集群

1.Kubernates简要概述 Kubernates&#xff08;常称为K8s&#xff0c;因省略了“ubernate”中的8个字符&#xff09;是Google开源的容器编排平台&#xff0c;专为简化和自动化应用服务的部署、扩展和管理而设计。它将应用与底层的服务器抽象开来&#xff0c;提供了自动化的机制…

怎么提取pdf的某一页?批量提取pdf的某一页的简单方法

怎么提取pdf的某一页&#xff1f;在日常工作与学习中&#xff0c;我们经常会遇到各式各样的PDF文件&#xff0c;它们以其良好的兼容性和稳定性&#xff0c;成为了信息传输和存储的首选格式。然而&#xff0c;在浩瀚的文档海洋中&#xff0c;有时某个PDF文件中的某一页内容尤为重…

Docker存储

前提条件 拥有docker环境&#xff0c;可参考&#xff1a;Docker的安装掌握容器的使用&#xff0c;可参考&#xff1a;Docker容器的使用掌握镜像的使用&#xff0c;可参考&#xff1a;Docker镜像的使用 Docker存储的问题 容器是隔离环境&#xff0c;容器内程序的文件、配置、运…

自动发现-实现运维管理自动化

nVisual-Discovery是一款自动化工具软件&#xff0c;通过多种自动发现技术&#xff0c;协助运维管理人员快速建立可视化的网络文档&#xff0c;提升网络管理的效率与准确性。 01 IP扫描发现 当我们新接手一个网络运维项目&#xff0c;通常缺乏精准的网络文档数据&#xff0c;…

vue3+ts实时播放视频,视频分屏

使用vue3以及播放视频组件Jessibuca Jessibuca地址 使用循环个数来实现分屏 效果图&#xff0c;四屏 九屏 dom代码 <div class"icon"><div class"icon-box"><span class"text">分屏&#xff1a;</span><el-icon …

RHCSA笔记三

第二章 linux中执行命令 命令格式 命令分为两类 内置命令&#xff1a;由 shell 程序自带的命令 外部命令&#xff1a;有独立的可执行程序文件&#xff0c;文件名即命令名 格式 主命令 参数 操作对象 # 注意&#xff1a; 下面是对于命令的语法的一些符号的说明&#xff1…

爬虫结合项目实战

由于本人是大数据专业&#xff0c;所以准备的是使用pycharm工具进行爬虫爬取数据&#xff0c;然后实现一个可视化大屏 参考项目&#xff1a; 1.医院大数据可视化最后展示 2. 大数据分析可视化系统展示 代码包&#xff1a;

【js逆向专题】12.RPC技术

目录 一. websocket1. 什么是websocket2. websocket的原理3. websocket实现方式1. 客户端2.服务端3. 实际案例1. 案例目标2. 解析思路 二. RPC1. RPC 简介2.Sekiro-RPC1. 使用方法1. 执行方式2.客户端环境3.使用参数说明 2. 测试使用1. 前端代码2. SK API3.python调用代码 三.项…

LabVIEW伺服压机是如何实现压力位移的精度?

LabVIEW伺服压机通过精确的压力和位移控制&#xff0c;实现了高精度的压装操作。为了达到这种精度&#xff0c;系统通常依赖于多个硬件和软件模块的协同工作&#xff0c;包括伺服电机、压力传感器、位移传感器以及LabVIEW的实时控制和数据处理功能。以下是LabVIEW伺服压机如何实…