VB和输入法

用VB读取和控制Windows的中文输入法  在Windows中我们可以用“Ctrl+Shift”键来调入或切换中文输入法,但是这样做每次都是使位于输入法列表顶端的那个输入法首先被调用。通常我们都要连续按好几次“Ctrl+Shift”才能将习惯的输入法调出。我编制了一段小程序,通过它可以把任意一个输入法放在输入法列表的顶端。  它的原理是:使用LoadKeyboardLayout函数可以改变输入法的顺序,只要在第一个参数中传递目标输入法的K 阅读详情

用VB加API可以轻松的调整输入法的顺序和设置当前输入法,每种输入法都对应有个键盘布局,所以就可以用GetKey- boardLayout函数得到,用ActivateKeyboardLayout就可以设置了。用LoadKeyboardLayout就可以改变输入法的顺序了,将该函数的第二个参数设置为KLF_REORDER,就可以把该输入法设置为第一位。下面贴出调试过的代码
'API声明
Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
Private Declare Function ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Const KLF_REORDER = &H8
Private NoOfKBDLayout As Long, i As Long, j As Long
Private hKB(24) As Long, BuffLen As Long
Private Buff As String
Private RetStr As String
Private RetCount As Long
Private kln As String
Private hCurKBDLayout

Private Sub Form_Load()
Buff = String(255, 0)
hCurKBDLayout = GetKeyboardLayout(0) '取得目前的输入法
NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法
For i = 1 To NoOfKBDLayout
If ImmIsIME(hKB(i - 1)) = 1 Then '中文输入法
BuffLen = 255
RetCount = ImmGetDescription(hKB(i - 1), Buff, BuffLen)
RetStr = Left(Buff, RetCount)
Combo1.AddItem RetStr
Else
RetStr = "English (American)" '英文输入法
Combo1.AddItem RetStr
End If
Next
ActivateKeyboardLayout hCurKBDLayout, 0 '恢复原来的输入法
End Sub

Private Sub Command1_Click()
If Combo1.ListIndex = -1 Then '如果用户尚未选择输入法,显示出错信息
MsgBox "请先选择一个输入法"
Exit Sub
End If
'改变输入法顺序
kln = String(8, 0)
ActivateKeyboardLayout hKB(Combo1.ListIndex), 0 '设置当前输入法
'下面的代码是调整输入法的顺序。屏蔽掉下面的代码就可以实现输入法的切换
res = GetKeyboardLayoutName(kln) '得到当前输入法的键盘布局
res = LoadKeyboardLayout(kln, KLF_REORDER) '将输入法顺序调整
ActivateKeyboardLayout hCurKBDLayout, 0 '还原输入法
End Sub
'以上代码参考了优快云上的帖子,自己加了注释以便说明和理解
用VB实现快速输入法切换功能 Windows操作系统为用户提供了多种输入法选择,使得来自不同语言背景的用户都能在计算机上高效地输入文字。Windows通过输入法管理器(Input Method Manager, IMM)来统一管理和切换这些输入法。输入法切换机制是基于输入法编辑器(Input Method Editor, IME)进行工作的,它能够根据用户的设定,在各种输入法之间快速切换。Visual Basic(VB)是微软推出的一款简单易学的编程语言,它基于BASIC语言发展而来,非常适合快速开发Windows应用程序。 阅读详情

相关推荐

VB.NET中输入法切换技术实现

在 VB.NET 中,DllImport是一个非常重要的特性(Attribute),它允许开发者在 .NET 应用程序中调用位于非托管的动态链接库(DLL)中的函数。这种技术通常用于调用 Windows API 函数,这是因为许多底层和系统级的功能仍然只能通过 Windows API 来实现。通过使用DllImport特性,VB.NET 程序可以无缝地与系统 API 交互,执行诸如操作文件系统、管理窗口以及更深层次的系统配置等任务。

weixin_31688273的博客 1012

获取当前的输入法状态

1.调用 GetKeyboardLayout 获取输入法的 HKL后, 在注册表中查找输入法名称(以记事本为例)hWnd = WinGetHandle("classname=Notepad")<br />KeyStr=GetKeyboardLayout($hWnd)<br />KeyName=RegRead("HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Keyboard Layouts/" & $KeyStr, "Layout Text")<br

波波的专栏 1万+

VB控制输入法

VB控制输入法,简单方便,可以通过代码来实现切换及设置

键盘输入

键盘输入<br />这节讲述windows如何产生键盘输入和程序如何接受和处理输入; <br />所有Microsoft windows的应用程序应该能够从键盘和鼠标接收用户的输入,windows应用程序是以处理投递到窗口的消息的形式接收键盘输入的。 键盘输入模式<br />windows系统通过安装与当前键盘相应的键盘设备驱动程序为应用程序提供设备独立键盘支持,windows系统还通过使用由当前用户或应用程序选中的语言特有的键盘配置.提供语言独立键盘支持。键盘设备驱动器从键盘接收的扫描码,被发送到键盘配置

林学森的技术专栏 1996

别再为STM32F407的USB高速通信发愁了!手把手教你用USB3320(ULPI接口)搞定硬件设计

本文详细介绍了STM32F407通过USB3320(ULPI接口)实现高速USB通信的硬件设计实战。从USB3320的选型优势到原理图设计避坑,再到PCB布局和固件配置,提供了一套完整的解决方案。特别针对USB PHY芯片的常见问题,如供电处理、信号完整性和初始化代码,给出了专业建议和调试技巧,帮助工程师高效完成高速USB通信设计。

weixin_42527401的博客 385

游戏经济数值模型的搭建过程——以标准卡牌游戏为例

一、总体规划 1.玩家分类 首先我们按照下表对玩家进行分类 付费能力即为充值额度;充值行为比如购买月卡/购买钻石;消费行为比如用钻石抽卡 在这里我们假设玩家是理性的,即玩家会以追求更高的性价比为目标进行充值与消费(即小R会优先买首冲+月卡,而不是买一个无用的无属性皮肤) 不同类型玩家之间的差异,实际上就主要由这些行为的差异而决定。 注:早期游戏制作的时候,活跃程度也是区分玩家类型的一个重要依据。不过目前现在游戏中有各种手段抹平了不同活跃玩家的差异(体力限制,活跃时间长的收益递减)..

dudu3332的博客 4228

C# 输入法切换类

using System; using System.Runtime.InteropServices; using System.Collections; using Microsoft.Win32; namespace Screen { /// /// Ime 的摘要说明。 /// 实现本地化输入法 /// 参考Delphi中的实现 /// public class Ime { [D

C#的专栏 4728

保姆级教程:用CellOracle 0.10.13从单细胞数据构建基因调控网络(附完整代码)

本文提供了一份详细的CellOracle 0.10.13使用指南,帮助用户从单细胞数据构建基因调控网络。通过Python接口,即使是生物信息学新手也能快速掌握数据准备、KNN插补、GRN计算及可视化等关键步骤。文章包含完整代码和实用技巧,助力单细胞转录组数据分析。

weixin_42563415的博客 720

设置输入法

TCHAR _szKBName[MAX_PATH]; GetKeyboardLayoutName( _szKBName);//获取当前输入法KLID,该名称是由语言标识符(低位字)的十六进制值和设备标识符(高位字)组成的字符串 printf("GetKeyboardLayoutName:%s\n",_szKBName); HKL hkl= LoadKeyboardLayout...

Greless的后花园 877

CentOS校园网Web Portal认证自动化实战

Web Portal认证是一种基于HTTP重定向与表单提交的强制网络准入机制,其原理是网关劫持未认证流量并跳转至登录页,验证通过后通过Cookie维持会话授权。该技术广泛应用于高校、机场、酒店等场景,核心价值在于细粒度访问控制与用户身份绑定。典型应用包括Linux命令行环境下的校园网接入、无GUI设备的自动联网、以及实验室集群的集中认证管理。本文聚焦CentOS系统,深入解析curl、cookie持久化、动态表单参数提取等关键技术环节,提供可调试、可复现、可工程化的完整认证流水线。

weixin_30522983的博客 264

Matlab PolySpace 静态分析实战:从零搭建嵌入式代码安全防线

本文详细介绍了如何使用Matlab PolySpace进行嵌入式代码静态分析,从环境搭建到实战配置,帮助开发者提前发现内存溢出、未初始化变量等潜在缺陷。通过案例分享和进阶技巧,展示如何提升代码安全性和可靠性,特别适合汽车ECU、医疗设备等安全关键系统开发。

weixin_33701617的博客 600

VB用API控制输入法状态

 在VB中,某些控件具有输入焦点,却没有IMEMode属性,比如RichTextBox,为了方便在这些控件中控制输入法状态,俺编写了这个函数,代码如下: 代码如下: Option Explicit'* ************************************************************** *'*    程序名称:modIME.bas'* ...

miaozk2006的专栏 1411

某讯天御滑块验证码逆向实战:从参数解析到环境对抗

本文详细解析了某讯天御滑块验证码的逆向工程实战技巧,从关键参数解析到浏览器环境模拟对抗。重点介绍了collect、eks等参数的逆向思路,以及如何通过puppeteer等工具补全环境检测,帮助开发者有效突破验证码防护。文章还提供了常见错误解决方案和性能优化建议,是验证码逆向领域的实用指南。

weixin_29325007的博客 437

用VB在程序中添加切换中文输入法的功能

 思路:        先用GetKeyboardLayoutList 函数来取得所有输入法,然后逐个用ImmIsIME判断是否是中文输入法,如果是的话在用ImmGetDescription得到输入法的名称,最后选定你需要的输入法用ActivateKeyboardLayout激活它.   源码:          Public Declare Function ActivateKeyboardLa

dongle2001的专栏 4888

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试)

在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。

m0_73659489的博客 344

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

vb中将当前的输入法变为英文输入法

Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, _        lpList As Long) As LongPrivate Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal

悠悠我心 5242

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB读取和控制Windows的中文输入法

  在Windows中我们可以用“Ctrl+Shift”键来调入或切换中文输入法,但是这样做每次都是使位于输入法列表顶端的那个输入法首先被调用。通常我们都要连续按好几次“Ctrl+Shift”才能将习惯的输入法调出。以下是一个改变输入法的例子:       它的原理是:使用LoadKeyboardLayout函数可以改变输入法的顺序,只要在第一个参数中传递目标输入法的Keyboardlay

679

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB实现对输入法的控制

可以调用系统方法 PrivateDeclareFunctionGetKeyboardLayoutList()FunctionGetKeyboardLayoutListLib"user32"(ByValnBuffAsLong,lpListAsLong)AsLongPrivateDeclareFunctionImmGetDescription()FunctionImmGetDescript...

编程资料大全 1095

vb 日語輸入法kana 模式

前幾天寫程序的時候使用了如下代碼:Private Sub Text1_KeyPress()Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)    If KeyAscii = vbKeyReturn Then            sendkeys "{tab}"    End IfEnd Sub form上有文本框数

SImonJ07的记事本 2108

VB 删除多余的输入法

 网上查了一天的资料,做了许多试验总算把问题解决了,不过如果要使不能再添加,还是要用上面的删除注册表方法,下面是代码,不过没有整理,有些API是不需要的:Option Explicit以下的API函数用于输入法妈作Private Declare Function GetKeyboardLayoutList Lib "user32" _(ByVal nBuff As Long, lpList As

793

VB关闭其他进程的输入法

http://files.cnblogs.com/files/liuzhaoyzz/%E5%85%B3%E9%97%AD%E5%85%B6%E4%BB%96%E8%BF%9B%E7%A8%8B%E8%BE%93%E5%85%A5%E6%B3%95IME.rar 新建上面的几个按钮和list,打开记事本或者win32pad,单击向记事本发送消息,程序会按ctrl+空格关闭中文输入法,并发送aa...

weixin_34260991的博客 345

VB下自动选择所有文本并切换默认输入法

<br />Public Sub RunGotFocus(pInternat As Boolean)<br />    On Error Resume Next<br />    <br />    pControl = ActiveControl.Name<br />    AutoSelect Controls(pControl)<br />    If pInternat = True Then<br />        Internat Controls(pControl), True<br /> 

极速蜗牛的专栏 1208

用API控制输入法状态

在VB中,某些控件具有输入焦点,却没有IMEMode属性,比如RichTextBox,为了方便在这些控件中控制输入法状态,俺编写了这个函数,代码如下:Option Explicit* ************************************************************** ** 程序名称:modIME.bas* 程序功能

lyserver的专栏 5110
上一篇: VB自由拖动控件的代码
下一篇: Blog初体验
Maxing
博客等级 码龄24年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值