如何拦截输入法消息?(100分)

  • 主题发起人 主题发起人 computercsl
  • 开始时间 开始时间
C

computercsl

Unregistered / Unconfirmed
GUEST, unregistred user!
我在我的繁体操作系统上输入了繁体字,写到了一个远程数据库里,数据库是My sql ,字段格式是文本格式,然后另外一个简体中文操作系统来读数据库的数据,用TNT控件显示的字符时繁体中文,不会有乱码,同样他在简体中文系统上打简体中文写到数据库,我的繁体系统读出来的结果是简体字,也不出现乱码,但是如果我在我的繁体系统上在TNT控件上用简体输入法输入简体中文写到数据库,那台简体中文系统读出来的就是乱码(有些文字是乱码),TNT控件在接受我的简体中文的时候已经是乱码,请问能通过拦截输入法消息解决吗,如何解决?
 
设置输入法
procedure TForm1.SetMyIme(ImeName: string);
var
i: integer;
HandleToSet: HKL;
begin
if not SysLocale.FarEast then
Exit;
if ImeName <> ' ' then begin
if (AnsiCompareText(ImeName, Screen.DefaultIme) <> 0) and (Screen.Imes.Count <> 0) then begin
HandletoSet := Screen.DefaultKbLayout;
i := Screen.Imes.IndexOf(ImeName);
if i >= 0 then
HandletoSet := HKL(Screen.Imes.Objects);
ActivateKeyboardLayout(HandleToSet, KLF_ACTIVATE);
end;
end;
end;
得到当前输入法名称:
const MAX_PATH=?
function TForm1.GetImeFileName: string;
var
szImeFileName: array[0..MAX_PATH] of char;
begin

if ImmGetIMEFileName(myhkl, szImeFileName, MAX_PATH) <> 0 then
Result := AnsiUpperCase(StrPas(szImeFileName))
else
Result := '';

end;
 
TO grayback :ImmGetIMEFileName 函数不支持Windows NT呀,能否发我份例子?能在XP,2000系统下运行的,解决了再加分
 
我这个例子就能在xp,2000下运行的.
 
ImmGetIMEFileName函数通不过呀,你看下面帮助:
[Now Supported on Windows NT]

The ImmGetIMEFileName function gets the filename of the IME associated with the specified keyboard layout.

BOOL ImmGetIMEFileName(

HKL hKL,
LPTSTR lpszFileName,
UINT uBufLen
);
 
看错了,是支持Windows NT ,但我为什么通不过,能份份例子我吗?
邮箱:computercsl@163.com
 
myhkl 这个字段没定义,是表示什么?
 
List := Tstringlist.Create;
for i := 0 to Screen.Imes.Count - 1 do begin
list.Add(Screen.Imes.Strings);
end;
 
应该可以通过的....
 
if (GetImeFileName = '') and (List.Count > 0) then
SetMyIme(List.Strings[0]);
 
例子都在了,你自己整理一下吧.
 
好的,我判断后怎么能把乱码问题解决呢?先送100啦
 
我设置输入法,需要安装那种输入法,再设置才有效,是这样的吗?
 
后退
顶部