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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Airtest】 UI 自动化

一、环境配置 项目名称&#xff1a;Yavin 锁定python3.7.x和opencv-contrib-python3.4.2.17&#xff0c;不然各种报错 参考airtest官网https://airtest.doc.io.netease.com/ 虚拟环境配置 安装所需要的依赖包 二、框架使用方式 1.目录结构介绍 2.config文件config.yaml文…

前端开发设计模式——状态模式

目录 一、状态模式的定义和特点 二、状态模式的结构与原理 1.结构&#xff1a; 2.原理&#xff1a; 三、状态模式的实现方式 四、状态模式的使用场景 1.按钮的不同状态&#xff1a; 2.页面加载状态&#xff1a; 3.用户登录状态&#xff1a; 五、状态模式的优点 1.提…

【深度学习基础】详解Pytorch搭建CNN卷积神经网络实现手写数字识别

MNIST 数据集,其包含70000 个2828 的手写数字的数据集,其中又分为60000 个训练样本与10000 个测试样本。 安装实验用到的包 anaconda promt 安装python包, 首先在开始界面打开prompt 进入到相应的虚拟环境中,下面的python38你自己创建的虚拟环境名称。 # 激活虚拟环境,v…

Ubuntu 24.04 系统上配置 Node.js 运行环境

本文我们重点介绍两种安装 Node.js 的方法。第一种方法使用 NVM (Node VersionManager)&#xff0c;这是安装和管理多个 Node.js 版本的最好和最快的方法。第二种方法使用官方包存储库在 Ubuntu 上安装 Node.js&#xff0c;一次只允许安装一个版本。 必备条件 A running Ubun…

yarn的安装与使用以及与npm的区别(安装过程中可能会遇到的问题)

一、yarn的安装 使用npm就可以进行安装 但是需要注意的一点是yarn的使用和node版本是有关系的必须是16.0以上的版本。 输入以下代码就可以实现yarn的安装 npm install -g yarn 再通过版本号的检查来确定&#xff0c;yarn是否安装成功 yarn -v二、遇到的问题 1、问题描述…

特斯拉Optimus:展望智能生活新篇章

近日&#xff0c;特斯拉举办了 "WE ROBOT" 发布会&#xff0c;发布会上描绘的未来社会愿景&#xff0c;让无数人为之向往。在这场吸引全球无数媒体的直播中&#xff0c;特斯拉 Optimus 人形机器人一出场就吸引了所有观众的关注。从多家媒体现场拍摄的视频可以看出来&…

Ubuntu 上安装 Redmine 5.1 指南

文章目录 官网安装文档&#xff1a;命令步骤相关介绍GemRubyRailsBundler 安装 Redmine更新系统包列表和软件包&#xff1a;安装必要的依赖&#xff1a;安装 Ruby&#xff1a;安装 bundler下载 Redmine 源代码&#xff1a;安装 MySQL配置 Redmine 的数据库配置文件&#xff1a;…

Java 基于 poi 和 itextpdf 实现 excel 转 pdf

目录 问题 实现思路 pom Excel2PDFUtil Excel2PDFUtilTest 输出结果 问题 工作中遇到一个需求&#xff0c;需要实现 excel 文件的预览&#xff0c;实现的思路就是将 excel 转成 pdf 文件&#xff0c;上传到文件服务器上得到文件地址&#xff0c;预览时只需要返回 pdf 预…

Uni-App-02

条件编译 条件编译概念 不同的运行平台终归有些专有的特性&#xff0c;无法实现跨平台完全兼容&#xff0c;例如&#xff1a;微信小程序导航栏右上角的关闭图标。 uni-app提供了一种“条件编译”机制&#xff0c;可以针对特定的平台编译执行特定的代码&#xff0c;否则不执行。…

[JAVAEE] 线程安全的案例(一)-单例模式

目录 一. 单例模式 二. 单例模式的使用时机 三. 单例模式的关键代码 四. 单例模式的几种实现方式 4.1 饿汉方式(急) 4.2 懒汉模式(缓) a. 解决原子性的问题 b. 解决程序运行效率低下的问题 c. 解决指令重排序的问题(其次是为了解决内存可见性的问题) 五. 总结 一. …

【大模型实战篇】大模型分词算法BPE(Byte-Pair Encoding tokenization)及代码示例

词元化是针对自然语言处理任务的数据预处理中一个重要步骤&#xff0c;目的是将原始文本切分成模型可以识别和处理的词元序列。在大模型训练任务中&#xff0c;就是作为大模型的输入。传统的自然语言处理方法&#xff0c;如基于条件随机场的序列标注&#xff0c;主要采用基于词…

Nest.js 实战 (十五):前后端分离项目部署的最佳实践

☘️ 前言 本项目是一个采用现代前端框架 Vue3 与后端 Node.js 框架 Nest.js 实现的前后端分离架构的应用。Vue3 提供了高性能的前端组件化解决方案&#xff0c;而 Nest.js 则利用 TypeScript 带来的类型安全和模块化优势构建了一个健壮的服务端应用。通过这种技术栈组合&…

phpstorm中使用FTP功能和自动上传配置介绍

phpstorm中使用FTP功能和自动上传配置介绍 一、引言 PHPStorm 是一款强大的 PHP IDE&#xff0c;它提供了许多便捷的功能来提高开发效率。其中&#xff0c;内置的 FTP 功能允许开发者直接在 IDE 中上传文件到服务器&#xff0c;而自动上传配置则可以进一步简化这一过程。本文…

ISUP协议视频平台EasyCVR私有化视频平台视频汇聚/存储系统怎么选?

一、EasyCVR视频监控存储系统的核心优势 TSINGSEE青犀EasyCVR视频汇聚平台是一个具备高度集成化、智能化的视频监控汇聚管理平台&#xff0c;拥有远程视频监控、录像、存储、回放、语音对讲、云台控制、告警等多项核心功能。该系统采用先进的网络传输技术&#xff0c;支持高清…

Servlet(三)-------Cookie和session

一.Cookie和Session Cookie和Session都是用于在Web应用中跟踪用户状态的技术。Cookie是存储在用户浏览器中的小文本文件&#xff0c;由服务器发送给浏览器。当用户再次访问同一网站时&#xff0c;浏览器会把Cookie信息发送回服务器。例如&#xff0c;网站可以利用Cookie记住用…

轻松掌握Win10录屏技巧:四大神器推荐!

在Win10系统中&#xff0c;录屏功能的应用越来越广泛&#xff0c;无论是用于工作演示、在线教学还是游戏分享&#xff0c;一款好用的录屏软件都是必不可少的。今天&#xff0c;我们将推荐四款录屏工具&#xff01; 福昕录屏大师 直达链接&#xff1a;www.foxitsoftware.cn/RE…

字符串大小的比较

1.字符串中每一个字符都对应一个码值&#xff0c;字符串比较大小时从第一个字符开始比较出现结果时输出 如下图所示&#xff1a;

力扣之613.直线上的最近距离

文章目录 1. 613.直线上的最近距离1.1 题意1.2 准备数据1.3 题解1.4 结果截图 1. 613.直线上的最近距离 1.1 题意 表&#xff1a; Point ----------------- | Column Name | Type | ----------------- | x | int | ----------------- 在SQL中&#xff0c;x是该表的主键列。 …

《计算机视觉》—— 换脸

效果如下&#xff1a; 完整代码&#xff1a; import cv2 import dlib import numpy as npJAW_POINTS list(range(0, 17)) RIGHT_BROW_POINTS list(range(17, 22)) LEFT_BROW_POINTS list(range(22, 27)) NOSE_POINTS list(range(27, 35)) RIGHT_EYE_POINTS list(range(36…

PON架构(全光网络)

目前组网架构 世界上有一种最快的速度又是光&#xff0c;以前传统以太网络规划满足不了现在的需求。 有线网 无线网 全光网络方案 场景 全光网络分类 以太全光网络 PON&#xff08;Pas-sive-Optical Network 无源光网络&#xff09; 再典型的中大型高校网络中 推荐万兆入…