初探WINDOWS下IME程式設計

2021-08-26 07:23:46 字數 2076 閱讀 7227

大家知道,delphi許多控制項有ime屬性。這麼好用的東西vc可沒自帶,怎麼辦呢?其實,可通過登錄檔,用api實現。

1、將用到的api

regopenkey:開啟登錄檔一鍵

regqueryvalue:查詢一鍵值

regqueryvalueex:同上

regclosekey:關閉開啟的鍵

loadkeyboardlayout:裝載輸入法

activatekeyboardlayout:啟用輸入法

2、ime資訊在登錄檔中的位置

在hkey_users:".default\keyboard layout\preload"放的是已安裝的輸入法,下有幾個以數字為名的子鍵,內容是輸入法代號(keyboard layout),如"e0040804",其中左4位是裝置**(device identifier),右4位是語言**(language identifier)。例如上面:左e004指智慧型abc,右0804指大陸中文。(詳見msdn)

在hkey_local_machine:"system\currentcontrolset\control\keyboard layouts\"放的是已註冊的輸入法。他的子鍵名為輸入法代號(keyboard layout),內容為該輸入法的ime檔案,名稱等資訊。

3、主要思路

我們可先把已裝的輸入法列舉出來(從登錄檔),使用者選擇其一後,再啟用該輸入法。

兩關鍵函式:

hkl loadkeyboardlayout(lpctstr pwszklid,uint flags);

第乙個引數是待開啟的輸入法代號,如"e0040804"(智慧型abc);

第二個引數是標誌位,如klf_activate(啟用)。

hkl activatekeyboardlayout(hkl hkl,uint flags);

第乙個引數是開啟的輸入法控制代碼(由loadkeyboardlayout返回);

第二個引數是標誌位,如klf_setforprocess。(詳見msdn)

4、例子程式

新建一基於對話方塊的工程,加入一combobox控制項,增加控制變數m_cb1。加入一edit控制項,增加控制變數m_edt1.對combobox,增加對cbn_selchange的對映函式onselchangecombo1()。對edit1,增加對en_setfocuos的setfocusedit1().在對話方塊類標頭檔案的public:下加入陣列宣告:cstring lst[10];

在oninitdialog()的return前加如下**:

hkey hk,hk1;

long cp=16;

char lp[15];

char a[2];

a[0]='1';

a[1]='\0';

cstring str,str1;

str=".default\\keyboard layout\\preload\\";//已裝的輸入法。注:win2000有所不同

str+=a;

int i=0;

while(::regopenkey(hkey_users,str,&hk)==error_success)//開啟鍵

else messagebox("open error");

regclosekey(hk1);

}::regclosekey(hk);

m_cb1.setcursel(0);

在onsetfocusedit1()加入如下**:
cstring temp;

temp=m_cb1.getcursel()!=cb_err?lst[m_cb1.getcursel()]:"00000409";

hkl hkl;

hkl=loadkeyboardlayout(temp,klf_activate);//裝載輸入法

if(hkl==null) onok();

activatekeyboardlayout(hkl,klf_setforprocess);//啟用輸入法

在onselchangecombo1()加入如下**:
m_edt1.setfocus();
即可編譯執行。

IME程式設計心得

二 imm ime結構的基本工作過程及特點 使用者鍵盤訊息 系統通過imm傳遞給與當前執行緒對應的ime ime根據輸入的訊息和輸入上下文中記錄的資料,將使用者的鍵盤動作轉換成結果串 以字串訊息的形式返回給imm 放到應用程式視窗的訊息佇列中。三 ime的構成 1.ime轉換介面 ime conve...

Win下的輸入法(IME)程式設計(1)

win 下的輸入法程式設計方法 在win 下編寫輸入法主要可以採用外掛程式式和 ime方式兩種 外掛程式式的實現核心是通過鍵盤鉤子對輸入進行攔截,再把要輸出的內容傳送給處於活動狀態的編輯視窗。ime 方式則是使用系統提供的 ime input method editor 介面實現輸入法。頭一種方法自...

Windows服務初探

namespace careeye 程序的主入口點 static void main servicestorun new system.serviceprocess.servicebase system.serviceprocess.servicebase.run new careeye 設計器支援...