w ndows10输入法设置,unity3d屏蔽Windows10输入法

当Unity3d应用遇到Windows10的输入法问题,导致键盘事件无法正常触发时,可通过程序方式解决。本文介绍了一种利用Win API在非输入状态下屏蔽输入法的方法,通过设置输入法状态的API实现,从而避免用户在全屏模式下因输入法导致的键盘事件丢失问题。
摘要由CSDN通过智能技术生成

在win10上,如果安装了某些输入法(比如QQ输入法),会造成unity的键盘事件被输入法捕获而不能触发的情况。只有将输入法切换到英文状态下才能响应键盘事件。

解决办法有,

1:用户主动切换输入法,甚至卸载输入法

2:程序在非输入状态下,屏蔽输入法

由于方法1在全屏状态下,用户完全不知道是否在输入法劫持中,常常导致以为是程序的bug,所以这里采用方法2

在unity中,官方并没有提供一个很好的解决方案(Input.imeCompositionMode无效)。所以只能借助win api。

其中最为重要的API是设置输入法状态:

[DllImport("imm32.dll")]

private static extern bool ImmSetOpenStatus(IntPtr himc, bool b);

其中himc为当前正在输入的窗口的输入法句柄,b为true表示开启,false表示关闭

himc可以通过另外一个api函数获取

[DllImport("imm32.dll")]

private static extern IntPtr ImmGetContext(IntPtr hwnd);

其中,hwnd为程序窗口的句柄

整个代码如下:

using System;

using System.Diagnostics;

using System.Runtime.InteropServices;

public class Win32Help

{

private delegate bo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值