![]() |
Windows Tastatur öffnen
Hallo!
Ich möchte via Button klick die Windows Tastatur öffnen. Es sollte auf einem normalen Desktop(Win 10) & einem Tablet(Win 10) funktionieren. Habe es mit der TabTip.exe(C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe) versucht ![]() Bei dem Desktop Rechner funktioniert es einwandfrei. Ich kontrolliere ob die TabTip.exe offen ist, wenn ja beende ich sie & starte sie = Tastatur wird angezeigt. Nicht der effizienteste weg, würde aber für meinen fall ausreichen. Bei dem Tablet wird die TabTip.exe beendet falls offen & gestartet. Jedoch nicht angezeigt. Der prozess läuft im hintergrund & ist aktiv. Gibt es einen weg die Windows Tastatur aufzurufen bzw. zu öffnen? Am besten ohne "zerstören" vom Task. Vielen Dank im Voraus! Daniel |
AW: Windows Tastatur öffnen
Wie startest du sie? CreateProcess? ShellExecute?
|
AW: Windows Tastatur öffnen
Delphi-Quellcode:
{$IFDEF MSWINDOWS}
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); if FileExists(FPath) then ShellExecute(0, 'OPEN', PChar(FPath), '', '', 1); end; {$endif} |
AW: Windows Tastatur öffnen
Welche Windows 10-Version genau? Wenn ich mich richtig erinnere war unter 1607 (oder 1703? :gruebel:) das leider so dass von einer Win32-Anwendung aus die Bildschirmtastatur einfach nicht aufging...
|
AW: Windows Tastatur öffnen
Probier mal CreateProcess - da hast du normalerweise die bessere Kontrolle. Z. B. könntest du mit TStartupInfo.wShowWindow rumspielen.
|
AW: Windows Tastatur öffnen
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:
das wäre eine radikale lösung.
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; |
AW: Windows Tastatur öffnen
Und vor dem Sleep noch ein SendMessage statt dem PostMessage, dann muß das Sleep nur auf's Beendetwerden warten und nicht auf den Start davon, bis das Programm endlich mal auf diese Message reagiert.
Natürlich kann man auch schauen ob die Anwengung noch läuft und erst weiter machen, wenn sie weg ist, anstatt nur blind zu schlafen. |
AW: Windows Tastatur öffnen
Eigentlich sollte doch zumindest für Edit-Felder automatisch die Bildschirmtastatur aufgehen, wenn du in der DPR am Anfang ein
Delphi-Quellcode:
aufrufst. Kann das mangels passender Hardware gerade nicht testen.
Application.UseMetropolisUI
Edit: Ich sehe gerade, daß das nur für Windows 7 galt. |
AW: Windows Tastatur öffnen
Moin,
du kannst es bei Tablets auch wie folgt ansprechen um die standard Mobiletastatur aufzurufen. Funktioniert wunderbar. Liegt wohl an der geänderten Handhabe bei Win10 für den mobilen Bereich. (Quelle ![]()
Delphi-Quellcode:
function TTabletHeadlinePanel.FindTrayButtonWindow: THandle;
var ShellTrayWnd: THandle; TrayNotifyWnd: THandle; begin Result := 0; ShellTrayWnd := FindWindow('Shell_TrayWnd', nil); if ShellTrayWnd > 0 then begin TrayNotifyWnd := FindWindowEx(ShellTrayWnd, 0, 'TrayNotifyWnd', nil); if TrayNotifyWnd > 0 then begin Result := FindWindowEx(TrayNotifyWnd, 0, 'TIPBand', nil); end; end; end; procedure TTabletHeadlinePanel.LogoClick(Sender: Tobject); var TrayButtonWindow: THandle; begin TrayButtonWindow := FindTrayButtonWindow; if TrayButtonWindow > 0 then begin ShowMessage('Tray'); PostMessage(TrayButtonWindow, WM_LBUTTONDOWN, MK_LBUTTON, $00010001); PostMessage(TrayButtonWindow, WM_LBUTTONUP, 0, $00010001); end else begin // Edit: ab hier für den Desktop, aber das erklärt sich wohl auch von selbst :) ShowMessage('Tabtip'); ShellExecute(0, 'open', 'c:\Program Files\Common Files\microsoft shared\ink\TabTip.exe', nil, nil, SW_SHOWNA); end; end; |
AW: Windows Tastatur öffnen
Habe gerade endtdeckt, das es im Windows 10 Tablet Modus funktioniert, jedoch mit langer verzögerung. Wenn der Tablet Modus deaktiviert ist funktioniert es nicht(wie oben beschrieben).
Zitat:
Zitat:
Wow danke an alle für die schnellen Antworten! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz