input 扫码枪输入在中文输入法状态下冲突的解决方案

先说解决方案:

1.1.利用ime-mode属性(注意只有Firefox 和 IE浏览器支持,其他浏览器不支持)
2.当input 类型为 密码框时(type=password),只能输入英文,利用这一特性,创建一个同等大小的div覆盖在密码输入框上。该方法来至 https://juejin.cn/post/7236689719077011514?from=search-suggesticon-default.png?t=O83Ahttps://juejin.cn/post/7236689719077011514?from=search-suggest

以下桌面应用解决的方案

3. Electron vue桌面应用,可以使用如上第2种方案,也可使用ffi-napi,调用 user32.dll 动态链接库,进行切换输入法

4.如果觉得ffi-napi麻烦,可以使用C# 封装动态链接库进行调用

5.也可使用golang调用user32.dll 生成exe工具,然后使用子进程调用exe,

以下为golang demo

package main

import (
	"fmt"
	"syscall"
)

var (
	//调用user32.dll
	user32 = syscall.NewLazyDLL("user32.dll")
	// SendMessage 使用 user32  SendMessage 函数
	SendMessage = user32.NewProc("SendMessageW")

	//获取一个台窗口的句柄
	getForegroundWindowProc = user32.NewProc("GetForegroundWindow")
	// WM_INPUTLANGCHANGEREQUEST 激活新的输入区域设置指令
	WM_INPUTLANGCHANGEREQUEST = 0x0050
	// EN 美式键盘
	EN = 0x0409
)

func main() {
	ret, _, _ := getForegroundWindowProc.Call()
	hwnd := syscall.Handle(ret)
	result, _, _ := SendMessage.Call(uintptr(hwnd), uintptr(WM_INPUTLANGCHANGEREQUEST), 0, uintptr(EN))
	fmt.Println(result)
}

编译好的文件地址: 百度网盘 请输入提取码

说明:调用user32.dll 因为是直接指定美式键盘 0x0409 所以需要在windows 添加语言如下图所示

总结 以上方法第2种是最佳可行方案 ,桌面应用可以使用第2,4,5种 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值