Gehört da nicht noch ein bisschen wartezeit rein?
Ein
Handle ein Close command zu schicken, das es erstmal verarbeiten muss, wird aber sofort neu gestartet, ich vermute das geht deinem rechner zu schnell.
Evtl. mal mit ProcessExplorer (SysInternals) gucken wie oft dein tabtip.exe offen ist wenn du diese funktion aufrufts.
Code:
procedure openKeyboard();
var
FPath : String;
IPTip_Main_Window: HWND;
begin
FPath := 'C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe';
{
IPTip_Main_Window := FindWindow('IPTip_Main_Window', nil);
if IPTip_Main_Window > 0 then
PostMessage(IPTip_Main_Window, WM_SYSCOMMAND, SC_CLOSE, 0);
}
while FindWindow('IPTip_Main_Window', nil) > 0 do PostMessage(IPTip_Main_Window, WM_SYSCOMMAND, SC_CLOSE, 0);
if FileExists(FPath) then
ShellExecute(0, 'OPEN', PChar(FPath), '', '', 1);
end;
das wäre eine radikale lösung.