有谁遇到过这样的问题,怎么解决?(100分)

  • 主题发起人 主题发起人 onlyonekgx
  • 开始时间 开始时间
O

onlyonekgx

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我写的程序在98下可以正常运行和退出,但(不是所有机子都是这样)
有的机子只要运行我的程序98就无法正常关机(重启),不过可以注销,
正常与不正常的机子用的是同一版本的98
2、如何能让自己的程序保持用户当前使用的输入法?
例如:用户每新增一条记录,输入法都会改变
如何得到当前输入法?(我不能在程序设计时就给一个中文输入法,因为用户可能
没有此输入法,即使有,如果不是用户经常使用的输入法也是白费)
 
得到当前输入法的名称:
function GetImeFileName: string;
var
szImeFileName: array[0..MAX_PATH] of char;
begin
if ImmGetIMEFileName(GetKeyboardLayout(0), szImeFileName, MAX_PATH) <> 0 then
Result := AnsiUpperCase(StrPas(szImeFileName))
else
Result := '';
end;

然后再调用就可以了,我的实践是在2000下调试,在98下一般都不会有问题的!
 
估计你的程序有时因为忙于处理什么东西而没有响应WM_QUERYENDSESSION消息有关.
 
To zzf888:
ImmGetIMEFileName
这个函数要不要定义
或从DLL中载入?
 
To peng_qs:
我估计这种可能性不大,
但如果真的这样有什么办法可以处理?
 
当然要定义了!
 
怎么定义?
 
listion....
 
ImmGetIMEFileName
只能得到输入法的文件名
我要的是输入法的名称!
ImmGetDescription
此函数只能得到输入法的描述,
而无法得到输入法的名称
 
要得到当前的输入法名称
var myHKL : HKL;
myHKL:=GetKeyBoardLayOut(0);
for i := 0 to Screen.Imes.Count-1 do
begin
if HKL(Screen.Imes.Objects) = myHKL then
Edit2.Text := Screen.Imes.Strings;//当前输入法名称
end;

exc:

var myHKL : HKL;

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
myHKL:=GetKeyBoardLayOut(0);
end;

procedure TForm1.DBGrid1Exit(Sender: TObject);
begin
ActivateKeyBoardLayOut(myHKL,KLF_ACTIVATE);
end;
 
多人接受答案了。
 
后退
顶部