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

前言

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

详细

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

控件属性

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

cs 复制代码
// 设置属性
this.TextBoxProductCode.ImeMode = ImeMode.Disable;

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

XML 复制代码
<!--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"/>
cs 复制代码
<!--WPF的XAML.cs文件通过代码设置 -->
//禁用输入法
InputMethod.SetIsInputMethodEnabled(this.TextBoxProductCode, false);

系统 API

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

cs 复制代码
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));
        }
    }
}

界面调用

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

相关推荐
数据皮皮侠AI18 小时前
中国土地利用驱动因子数据集(9种驱动因子/裁剪到省市/Tif)
大数据·人工智能·笔记·能源·1024程序员节
数据皮皮侠AI5 天前
上市公司耐心资本数据(2010-2025)
大数据·人工智能·笔记·能源·1024程序员节
开开心心就好7 天前
解决图片无页码添加功能的实用工具
javascript·python·安全·智能手机·pdf·音视频·1024程序员节
学传打活8 天前
【边打字.边学昆仑正义文化】_25_宇宙动植物的由来(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
开开心心就好12 天前
用户推荐的文件解锁与强制操作工具
安全·智能手机·pdf·scala·音视频·symfony·1024程序员节
绵满15 天前
Vector Quantization for Recommendation 笔记
推荐系统·基础知识
liguojun202517 天前
软硬一体智慧场馆系统推荐——助力场馆数字化高效升级
java·大数据·人工智能·物联网·1024程序员节
初晴融雪-快雪时晴18 天前
基础知识:股票卖出策略详解(完整版)/ 懂得何时卖出,才是从纸上富贵到落袋为安的关键一步
基础知识
初晴融雪-快雪时晴22 天前
基础知识:金融市场完整图谱 / 一级市场 / 一级半市场 / 二级市场 / 三级市场 / 四级市场
基础知识
开开心心就好1 个月前
吾爱大佬原创的文件时间修改工具
安全·智能手机·pdf·电脑·智能音箱·智能手表·1024程序员节