autoit 将输入法修改为英文输入法,获取输入法的值【20190918亲测原创】

这是一个讨厌爬虫的人写的文章,当下的网络,把错误的文章抄的满天下都是

本人亲测win7 win2012可用,废话不多说,上代码

;切换为英文输入法
$hWnd = WinGetHandle("[ACTIVE]") ;$hWnd 为目标窗口句柄,这里设置的是当前活动窗口

$ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", "04090409", "int", 1 + 0)

DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", 0x50, "int", 1, "int", $ret[0])

最大的不同之处 04090409 这才是美式键盘输入法,网上全是

08040804 这是微软输入法,你都没启用,当然调用不上了,而且就算启用了默认还的是中文状态

调用不上对应的输入法,还会使用默认输入法,这就是怎么也切换输入法不成功的原因

想知道是怎么来的?往下看

原理篇:

首先非常感谢这篇文章:也是从一楼回答中找到了成功修改的契机

http://www.autoitx.com/thread-53349-1-1.html

上修改后的完整代码

#Region
#AccAu3Wrapper_Icon=										 ;程序图标
#AccAu3Wrapper_UseX64=n										 ;是否编译为64位程序(y/n)
#AccAu3Wrapper_OutFile=										 ;输出的Exe名称
#AccAu3Wrapper_OutFile_x64=									 ;64位输出的Exe名称
#AccAu3Wrapper_UseUpx=n										 ;是否使用UPX压缩(y/n) 注:开启压缩极易引起误报问题
#AccAu3Wrapper_Res_Comment=									 ;程序注释
#AccAu3Wrapper_Res_Description=								 ;程序描述
#AccAu3Wrapper_Res_Fileversion=1.0.0.5
#AccAu3Wrapper_Res_FileVersion_AutoIncrement=y				 ;自动更新版本 y/n/p=自动/不自动/询问
#AccAu3Wrapper_Res_ProductVersion=1.0						 ;产品版本
#AccAu3Wrapper_Res_Language=2052							 ;资源语言, 英语=2057/中文=2052
#AccAu3Wrapper_Res_LegalCopyright=							 ;程序版权
#AccAu3Wrapper_Res_RequestedExecutionLevel=					 ;请求权限: None/asInvoker/highestAvailable/requireAdministrator
#AccAu3Wrapper_Run_Tidy=y									 ;编译前自动整理脚本(y/n)
#AccAu3Wrapper_Run_Obfuscator=y								 ;启用脚本加密(y/n)
#Obfuscator_Parameters=/cs=1 /cn=1 /cf=1 /cv=1 /sf=1 /sv=1	 ;脚本加密参数: 0/1不加密/加密, /cs字符串 /cn数字 /cf函数名 /cv变量名 /sf精简函数 /sv精简变量
#AccAu3Wrapper_DBSupport=y									 ;使字符串加密支持双字节字符(y/n) <- 可对中文字符等实现字符串加密
#AccAu3Wrapper_AntiDecompile=y								 ;是否启用防反功能(y/n) <- 简单防反, 用于应对傻瓜式反编译工具
#EndRegion

#cs ____________________________________

	欢迎使用 AutoIt v3 中文版 !

	Au3版本:	3.3.14.2
	脚本作者:	Juck
	脚本功能:	input_method 输入法测试
	更新日志:
	联系方式:

#ce _______________脚本开始_________________


Opt("WinTitleMatchMode", 4)
Run("notepad.exe")
Sleep(500)
$hWnd = WinGetHandle("classname=Notepad")
;~ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts
$KeyStr = _GetKeyboardLayout($hWnd)
$KeyName = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\" & $KeyStr, "Layout Text")
MsgBox(0, $KeyStr, $KeyName) ;显示默认输入法
LoadKeyboardLayout("04090409", $hWnd) ;设为美式键盘
$KeyStr = _GetKeyboardLayout($hWnd)
$KeyName = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\" & $KeyStr, "Layout Text")
MsgBox(0, $KeyStr, $KeyName) ;显示当前修改后的输入法


Func _GetKeyboardLayout($hWnd)
	Local $ret = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)
	$ret = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $ret[0])
	Return Hex($ret[0], 8)
EndFunc   ;==>_GetKeyboardLayout

Func LoadKeyboardLayout($sLayoutID, $hWnd)
	Local $WM_INPUTLANGCHANGEREQUEST = 0x50
	Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 1 + 0)
	DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $ret[0])
EndFunc   ;==>LoadKeyboardLayout

好了,这里再说下思路问题,你电脑有搜狗什么的吧,有输入法管理器吧,别说不知道,再不知道百度去吧

利用输入法管理器 修改默认输入法 ,用这个程序弹窗输入法的代码,这才是真的代码,不在注册表里,查资料说输入法在

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

反正我是没有找到04090409 但弹出的窗口是【注意弹窗标题!】

看到

MsgBox(0, $KeyStr, $KeyName) ;显示默认输入法

MsgBox(0, $KeyStr, $KeyName) ;显示当前修改后的输入法

这两行了吧,这两行就是核心

想用什么输入法,自己确定输入法代码,就像这 04090409 找谁说理去?

总结

1、用输入法管理器,取默认输入法,配合这个程序修改

2、输入法代码自己确定!尤其不要信网上抄的漫天都是的文章,都是蜘蛛乱爬回来的!只能信一部分!

zhangbest5个人原创,转载请注明,谢谢!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好,我可以回答这个问题。使用autoit3可以通过WMI(Windows Management Instrumentation)来获取计算机硬件信息,例如CPU、内存、硬盘等。您可以使用AutoIt的ObjGet函数来获取WMI对象,然后使用该对象的方法来获取所需的信息。 ### 回答2: AutoIt3是一种用于自动化操作的脚本语言,通过编写AutoIt3脚本可以实现获取计算机硬件信息的功能。下面简要介绍一下如何使用AutoIt3获取计算机硬件信息。 首先,我们需要下载安装AutoIt3,安装完成后就可以开始编写脚本了。接下来,我们就可以通过AutoIt3的内置函数来获取计算机硬件信息。 AutoIt3提供了一系列函数来获取不同类型的硬件信息,比如: 1. 获取CPU信息:我们可以使用内置函数`_CPUGetInfo()`来获取CPU的名称、制造商以及架构等信息。 2. 获取内存信息:使用内置函数`_MemoryGetStats()`可以获取当前计算机的内存统计信息,比如可用内存、已用内存等。 3. 获取硬盘信息:AutoIt3提供了`DriveGetDrive()`函数来获取计算机上的所有硬盘驱动器,进而可以使用`DriveGetModel()`函数来获取每个硬盘的模型和序列号等信息。 4. 获取网络适配器信息:使用`_NetworkGetAdapterInfo()`可以获取计算机上所有网络适配器的信息,如适配器名称、MAC地址等。 5. 获取显示器信息:使用`_MonitorGetInfo()`可以获取计算机上所有显示器的信息,如显示器的名称、分辨率等。 当我们获取到这些硬件信息后,还可以将其保存到文件或者在程序中进行处理和展示等。 总的来说,AutoIt3是一个功能强大的自动化脚本语言,通过利用它的内置函数,我们可以方便地获取计算机的硬件信息。当然,除了AutoIt3,还有其他一些工具和编程语言也可以实现相似的功能,选择使用哪种方式主要取决于个人的偏好和需求。 ### 回答3: AutoIt是一种基于脚本的自动化语言,可以用于控制和模拟用户操作。虽然AutoIt本身并不直接提供获取计算机硬件信息的功能,但可以利用其脚本的编写和执行能力,结合操作系统的相关接口函数来实现。 通过调用AutoIt的相关功能函数,可以获取计算机硬件的信息,例如: 1. 获取CPU信息:可以使用WMI(Windows Management Instrumentation)来查询计算机的CPU信息。可以使用AutoIt的WMI相关函数来实现,例如使用`ObjGet`函数获取WMI对象,然后通过对象的属性获取CPU信息。 2. 获取内存信息:可以使用AutoIt的内存函数来获取计算机的内存信息,例如使用`MemGetStats()`函数来获取内存的使用情况,包括总内存大小、可用内存大小等。 3. 获取硬盘信息:可以使用AutoIt的文件操作函数来获取硬盘的信息,例如使用`DriveGetDrive()`函数获取计算机上的所有硬盘列表,然后使用`DriveSpaceTotal()`函数获取每个硬盘的总容量。 4. 获取网络适配器信息:可以使用AutoIt的网络函数来获取计算机的网络适配器信息,例如使用`Ping()`函数来检测网络适配器的连通性,或者使用`IPConfigGetAdaptersInfo()`函数获取网络适配器的详细信息。 综上所述,虽然AutoIt本身不能直接获取计算机硬件信息,但通过调用相关的操作系统接口函数,结合AutoIt的脚本编写能力,可以实现获取计算机硬件信息的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值