spiegel-keyman/windows/src/engine/keyman/langswitch/LoadIndirectStringUnit.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

43 lines
983 B
ObjectPascal

unit LoadIndirectStringUnit;
interface
function LoadIndirectString(const name: WideString): WideString;
implementation
uses
Windows;
type
TSHLoadIndirectString = function(const pszSource: PWideChar; pszOutBuf: PWideChar; cchOutBuf: UINT; ppvReserved: Pointer): HRESULT; stdcall;
var
hSHLWApi: THandle = 0;
FSHLoadIndirectString: TSHLoadIndirectString = nil;
function LoadIndirectString(const name: WideString): WideString;
var
buf: array[0..260] of WideChar;
begin
Result := '';
if hSHLWApi = 0 then
begin
hSHLWApi := LoadLibrary('shlwapi.dll');
if hSHLWApi = 0 then
Exit;
FSHLoadIndirectString := GetProcAddress(hSHLWApi, 'SHLoadIndirectString');
end;
if not Assigned(FSHLoadIndirectString) then Exit;
if FSHLoadIndirectString(PWideChar(name), buf, Length(buf), nil) = S_OK then
Result := buf;
end;
initialization
finalization
if hSHLWApi <> 0 then FreeLibrary(hSHLWApi);
hSHLWApi := 0;
FSHLoadIndirectString := nil;
end.