spiegel-keyman/windows/src/engine/keyman/KeymanDesktopShell.pas
Marc Durdin b65b982584 Keyman Desktop and Keyman Developer open source 10.0 alpha seed (#121)
* Keyman for Windows 10.0 Open Source

* Squashed 'windows/src/ext/jedi/jedi/' content from commit f444ad2

git-subtree-dir: windows/src/ext/jedi/jedi
git-subtree-split: f444ad2da4693851e523f1ea6bd541f701904c24

* Squashed 'windows/src/ext/jedi/jcl/' content from commit d63d3c9fd

git-subtree-dir: windows/src/ext/jedi/jcl
git-subtree-split: d63d3c9fd9ff84efdd8159084ec6a60313644243

* Squashed 'windows/src/ext/jedi/jvcl/' content from commit bee19f3b4

git-subtree-dir: windows/src/ext/jedi/jvcl
git-subtree-split: bee19f3b46909fde2fa92c06cd2706f41d99f6c3

* Add required .res files

* Add required .res files

* Add docbook files (forced)

* Add required libxslt

* Add required jedi files

* Add installation files

* Tweak .gitignore for open

* CI

* Remove KMW from Developer source (#122)

* Remove KMW from Developer source (copies during build)

* Remove KMW from Developer source (copies during build)

* Remove KMW from Developer source (copies during build)

* Fixup release build and copy license, readme from kmw during build

* Remove obsolete build help documentation

* Keyman Engine 10 on Windows regression for shift states (#129)

* Improve #128 -- cleaner debug messages

* Fixes #127, shift state now resets correctly; and more work for #128

* Fixes #130 (#131)
2017-07-25 10:53:06 +07:00

65 lines
1.6 KiB
ObjectPascal

unit KeymanDesktopShell;
interface
type
TKeymanDesktopShell = class
class function RunKeymanConfiguration(params: string = ''): Boolean;
class function IsTextEditorVisible: Boolean; static;
class function OpenHelp(topic: string): Boolean;
private
class function GetRootPath: string;
class function GetRootDir: string;
class function GetShellPath: string;
end;
implementation
uses
System.SysUtils,
Winapi.Windows,
KeymanPaths,
utilexecute;
class function TKeymanDesktopShell.GetRootDir: string;
begin
Result := ExcludeTrailingPathDelimiter(TKeymanPaths.KeymanDesktopInstallPath);
end;
class function TKeymanDesktopShell.GetRootPath: string;
begin
Result := IncludeTrailingPathDelimiter(GetRootDir);
end;
class function TKeymanDesktopShell.GetShellPath: string;
begin
Result := TKeymanPaths.KeymanDesktopInstallPath(TKeymanPaths.S_KMShell);
end;
class function TKeymanDesktopShell.RunKeymanConfiguration(params: string = ''): Boolean;
begin
Result := TUtilExecute.Shell(0, GetShellPath, GetRootPath, params);
end;
const
STextEditorClassName = 'TfrmTextEditor'; // I4265
class function TKeymanDesktopShell.IsTextEditorVisible: Boolean;
begin
Result := FindWindow(STextEditorClassName, nil) <> 0;
end;
class function TKeymanDesktopShell.OpenHelp(topic: string): Boolean;
var
cleantopic: WideString;
i: Integer;
begin
cleantopic := '';
for i := 1 to Length(topic) do
if CharInSet(topic[i], ['a'..'z','A'..'Z','0'..'9','_','/','\','-']) then // I3310
cleantopic := cleantopic + topic[i]; // I3310
Result := RunKeymanConfiguration('-h '+cleantopic);
end;
end.