mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 08:25:32 +00:00
140 lines
3.1 KiB
ObjectPascal
140 lines
3.1 KiB
ObjectPascal
(*
|
|
Name: VisualKeyboardInfo
|
|
Copyright: Copyright (C) 2003-2017 SIL International.
|
|
Documentation:
|
|
Description:
|
|
Create Date: 3 May 2011
|
|
|
|
Modified Date: 3 May 2011
|
|
Authors: mcdurdin
|
|
Related Files:
|
|
Dependencies:
|
|
|
|
Bugs:
|
|
Todo:
|
|
Notes:
|
|
History: 03 May 2011 - mcdurdin - I2890 - Record diagnostic data when encountering registry errors
|
|
*)
|
|
unit VisualKeyboardInfo;
|
|
|
|
interface
|
|
|
|
uses VisualKeyboard, Contnrs;
|
|
|
|
type
|
|
TVisualKeyboardInfo = class
|
|
public
|
|
Keyboard: TVisualKeyboard;
|
|
FileName: string;
|
|
KeymanID: Integer;
|
|
KeymanName: string;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
TVisualKeyboardInfoList = class(TObjectList)
|
|
protected
|
|
function Get(Index: Integer): TVisualKeyboardInfo;
|
|
procedure Put(Index: Integer; Item: TVisualKeyboardInfo);
|
|
public
|
|
property Items[Index: Integer]: TVisualKeyboardInfo read Get write Put; default;
|
|
function Add(Item: TVisualKeyboardInfo): Integer;
|
|
procedure Load;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Classes,
|
|
klog,
|
|
ErrorControlledRegistry,
|
|
RegistryKeys,
|
|
SysUtils,
|
|
Windows;
|
|
|
|
{ TVisualKeyboardInfoList }
|
|
|
|
function TVisualKeyboardInfoList.Add(Item: TVisualKeyboardInfo): Integer;
|
|
begin
|
|
Result := inherited Add(Item);
|
|
end;
|
|
|
|
function TVisualKeyboardInfoList.Get(Index: Integer): TVisualKeyboardInfo;
|
|
begin
|
|
Result := TVisualKeyboardInfo(inherited Get(Index));
|
|
end;
|
|
|
|
procedure TVisualKeyboardInfoList.Load;
|
|
procedure LoadExt(FAdmin: Boolean);
|
|
var
|
|
Path: string;
|
|
i: Integer;
|
|
begin
|
|
with TRegistryErrorControlled.Create do // I2890
|
|
try
|
|
if FAdmin then
|
|
begin
|
|
RootKey := HKEY_LOCAL_MACHINE;
|
|
Path := '\'+SRegKey_InstalledKeyboards_LM+'\';
|
|
end
|
|
else
|
|
begin
|
|
RootKey := HKEY_CURRENT_USER;
|
|
Path := '\'+SRegKey_InstalledKeyboards_CU+'\';
|
|
end;
|
|
for i := 0 to Count - 1 do
|
|
if OpenKeyReadOnly(Path+Items[i].KeymanName) then
|
|
if ValueExists(SRegValue_VisualKeyboard) then Items[i].FileName := ReadString(SRegValue_VisualKeyboard);
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
str: TStringList;
|
|
vki: TVisualKeyboardInfo;
|
|
i: Integer;
|
|
begin
|
|
KL.Log('Loading visual keyboards');
|
|
Clear;
|
|
str := TStringList.Create;
|
|
with TRegistryErrorControlled.Create do // I2890
|
|
try
|
|
RootKey := HKEY_CURRENT_USER;
|
|
if OpenKeyReadOnly(SRegKey_ActiveKeyboards_CU) then
|
|
begin
|
|
GetValueNames(str);
|
|
for i := 0 to str.Count - 1 do
|
|
begin
|
|
vki := TVisualKeyboardInfo.Create;
|
|
vki.KeymanID := StrToIntDef(str[i], 10000);
|
|
vki.KeymanName := ReadString(str[i]);
|
|
vki.Keyboard := nil;
|
|
vki.FileName := '';
|
|
Add(vki);
|
|
end;
|
|
end;
|
|
LoadExt(False);
|
|
LoadExt(True);
|
|
for i := 0 to Count - 1 do
|
|
KL.Log('Visual Keyboard '+Items[i].KeymanName+'='+Items[i].FileName);
|
|
finally
|
|
Free;
|
|
str.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TVisualKeyboardInfoList.Put(Index: Integer; Item: TVisualKeyboardInfo);
|
|
begin
|
|
inherited Put(Index, Item);
|
|
end;
|
|
|
|
{ TVisualKeyboardInfo }
|
|
|
|
destructor TVisualKeyboardInfo.Destroy;
|
|
begin
|
|
FreeAndNil(Keyboard);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
end.
|
|
|