VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 中文输入法随Word文档同时打开
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:15099, 日期:2001-05-05
经常使用Word进行中文文档编辑的人,在打开Word之后通常要选择自己习惯使用的中文输入法,然后才能进行录入等编辑操作。其操作流程如图一(略)所示。图一中虚线框所代表的“选择输入法”操作,如果能够让机器自动执行,实现定制自己习惯使用的输入法,那岂不是省掉了一步操作,省略后的流程如图二(略)所示。真是既经济又实惠,何乐而不为呢?下面是笔者以目前使用最为广泛的智能ABC标准输入法4.0版为例进行的实现过程,环境为Windos 98操作系统、安装了Office 97。

   众所周知,Visual Basic 是Microsoft Office的开发语言,当然也是Word 的实现语言。因此,当我们要在Word 的基础上增加新的功能时,就要创建一个新的“宏”,事实上也就是开发出一条新的Word 命令。那么,什么是“宏”呢?Word中的宏相当于DOS下的批处理。宏的本质是一段Visual Basic代码,是各种预定操作的记录,执行宏就是Word按照宏中记录的顺序自动执行各种操作。其作用一是化繁为简、压缩步骤;二是开放系统、扩展功能,完成Word中某些不能直接完成的任务。鉴于Word中“宏”的功能,可以实现我们的要求。

   那么用什么调用或激活所要的中文输入法呢?用Shell语句无法调用智能ABC的Abcwin.exe应用程序。查找Windows API函数,发现ActiveKeyboardLayout函数解释如下:

   VB声明 Declare Function ActivateKeyboardLayout& Lib "user32" (ByVal hkl As Long, ByVal flags As Long)

   说明 激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义。

   HKL Long  --指定一个键盘布局的句柄。

   Flsgs Long  将指定的键盘移至内部键盘布局列表的起始处。

   返回值 Long  --如执行成功,返回前一个键盘布局的句柄;零表示错误。

   由此可见,ActiveKeyboardLayout函数能够激活所需要的输入法,但是必须给出要激活某一输入法的句柄。

   GetKeyboradLayout函数可以得到当前输入法的句柄。解释如下:

   VB声明 Declare Function GetKeyboradLayout & Lib "user32" (ByVal dwLayout As Long)

   说明 取得一个句柄,描述指定应用程序的键盘布局。

   dwLayout Long  欲检查线程的标识符。为0表示当前线程的键盘布局

   Flsgs Long  将指定的键盘移至内部键盘布局列表的起始处。

   返回值 Long  --键盘布局的句柄。

   至此解决问题的关键点已经找到,那么就开始行动编写程序吧!

   首先,编写读取每种输入法键盘布局句柄的程序。具体步骤如下:

   打开VB后选择标准的EXE文档,在Form1上添加一个Text1和一个Command1控件,输入以下程序。

Option Explicit’声明API读取当前输入法的句柄函数
Private Declare Function GetKeyboardLayout Lib
"user32" (ByVal dwLayout As Long) As Long
Private Sub Form_Load()
Dim hCurKBDLayout As long
hCurKBDLayout = GetKeyboardLayout(0)
Text1.Text = hCurKBDLayout
End Sub
   当然可以将以上程序写得更加复杂、智能化一些,可以一次读取所有的输入法句柄。但本文重点不在这段程序上,只是用最简单的方法分别读取输入法的句柄值。统计如下表。

名称 句柄值
王码拼音输入法5.0版 -534640636
王码拼音输入法5.0版 -534640636
王码五笔输入法4.5版 -534575100
微软拼音输入法1.5版 -535951356
全拼输入法4.0版 -536803324
郑码输入法4.0版 -536672252
智能ABC标准输入法4.0版 -536606716
王码五笔型输入法98版 -534771708
王码五笔画输入法5.0版 -534706172
English(American) 67699721
   有了各种输入法的句柄值,利用“宏”就可以实现我们所要求的功能。方法如下:
   找到Microsoft Office\Templates\normal.dot文件,右键单击弹出窗口,选择“打开”\“工具”\“宏”,录制一个名为“Autoexec”的宏,然后在Visual Basic 编辑器内录入如下程序:

Option Explicit
Private Declare Function ActivateKeyboardLayout Lib
"user32" (ByVal hkl As Long, ByVal flags As Long) As Long

Public hCurKBDLayout As Long
Sub autoexec()
hCurKBDLayout = -536606716 ‘智能ABC输入法
ActivateKeyboardLayout hCurKBDLayout, 0
End Sub
   该程序可以实现打开Word时,自动打开智能ABC输入法,依此类推,如果要实现其它输入法的打开,只需将hCurKBDLayout的值按照表中的值进行修改即可。
   注意:

在向normal.dot文件中添加宏之前,一定进行该文件的备份。