做一个多窗口程序,如何让输入法选择了以后就一直都有。
我以前没在意,但我发现QQ里一旦打开一个输入法后不管调哪个窗口或程序都会有的。所以我想问一下大家。
我以前没在意,但我发现QQ里一旦打开一个输入法后不管调哪个窗口或程序都会有的。所以我想问一下大家。
解决方案 »
- 如何安全卸载DLL?
- 请大家关注“各位高手,请问谁有通用客户或供应商管理系统的例子吗?(100分)”急!!!
- 什么是SUI Pack
- 怎样用DELPHI直接导入执行动作?
- 1000分求Indy9编写的语音通讯代码
- 大家知道有delphi for php的论坛吗
- 在win98下如何实现设置文件夹共享和取消共享
- Halcyon的安装错误
- 急!关于Quickrep,请问怎样分类汇总
- 执行存储过程时经常提示超时已过期,该怎么解决?
- 我做了一个系统用的是SQL Server,关于数据导出的问题?
- procedure typelist(Query:TQuery;start:integer;str:string);
前两天刚刚看来得
作者忘记了,不好意思:)unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Edit1Change(Sender: TObject);
procedure Edit1Enter(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}Uses registry, imm;
var CurIme: string;function GetImeCurName: String;
var r: TRegistry;
line : TStrings;
i: Integer;
S: String; 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;
begin
Line:=TStringList.Create;
r:=TRegistry.Create;
S:=GetImeFileName;
r.RootKey:=HKEY_LOCAL_MACHINE;
r.OpenKey('System',False);
r.OpenKey('CurrentControlSet',False);
r.OpenKey('Control',False);
r.OpenKey('Keyboard Layouts',False);
r.GetKeyNames(Line);
For i:=0 to Line.Count-1 do
begin
if Pos('E',Line[i])>0 then
begin
r.CloseKey;
r.RootKey :=HKEY_LOCAL_MACHINE;
r.OpenKey('System',False);
r.OpenKey('CurrentControlSet',False);
r.OpenKey('Control',False);
r.OpenKey('Keyboard Layouts',False);
r.OpenKey(Line[i],False);
if r.ReadString('IME file')=S then
begin
Result:=r.ReadString('Layout Text');
Break;
end;
end;
end;
r.Free;
Line.Free;
end;procedure SetCurIme(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[I]);
ActivateKeyboardLayout(HandleToSet, KLF_ACTIVATE);
end;
end;
end;procedure TForm1.Edit1Change(Sender: TObject);
begin
CurIme:=GetImeCurName;
end;procedure TForm1.Edit1Enter(Sender: TObject);
begin
SetCurIme(CurIme);
end;end.