Also dieser Code startet bei mir osk 64bit. Ohne Wow64DisableWow64FsRedirection wollte osk garnicht erst starten. Die 32Bit funkz wohl nicht unter 64bit (oder will nicht).
Delphi-Quellcode:
uses
JwaWindows,
SysUtils;
function GetNativeWindowsDirectory : String;
var
P : array[0..MAX_PATH] of Char;
begin
SHGetFolderPath(0, CSIDL_SYSTEM, 0, SHGFP_TYPE_DEFAULT, @P);
result := P;
end;
var
oldValue : Pointer;
Path : String;
begin
Path := GetNativeWindowsDirectory + '\osk.exe';
if not Wow64DisableWow64FsRedirection(oldValue) then
RaiseLastOSError;
ShellExecuteW(0, 'open', PChar(Path), '', '', SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection(oldValue);
end.
ShowMessage funktioniert nur dann, wenn es mindestens einmal vor Wow64DisableWow64FsRedirection aufgerufen wurde. Sonst sind nicht alle DLLs geladen und es wird versucht eine 64bit
DLL in einen 32bit Prozess zu laden. Zumindest ich bekomme eine generische
Exception C0FB007E, was wohl vom Delphi delay loader Mechanismus stammt. $7E = 126d ist übrigens der
Win32 Code für Modul nicht gefunden.