Da beim Anklicken das Fenster den Fokus bekommt, kann die Eingabe auch nur in diesem Fenster landen.
Selbst wenn man jetzt die Eingabe abfangen würde, dann wüsste dieses Keyboard / dein Code aber auch nicht mehr, dass vorher ein anderes Fenster den Fokus hatte.
Keyboard auf eine eigene Form, welche beim Klick in den Clientbereich nie den Fokus bekommen darf.
Oder das Keyboard vom Windows nutzen.
C:\Windows\System32\osk.exe
SW_SHOWNOACTIVATE, WS_POPUPWINDOW und irgendwie sowas.
Delphi-Quellcode:
uses Winapi.ShellAPI;
procedure TForm2.Button1Click(Sender: TObject);
begin
// Lässt sich so aber nicht aus einen Win32-Programm aufrufen ... nur Win64,
// oder du fängst an bissl zu pfuschen.
ShellExecute(Self.Handle,
nil,
{'C:\Windows\System32\osk.exe'}'
osk.exe',
nil,
nil, SW_SHOW);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
keybd_event(VK_LWIN, 0, 0, 0);
keybd_event(VK_OEM_PERIOD, 0, 0, 0);
keybd_event(VK_OEM_PERIOD, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;
Liegt aber nicht am Delphi.
https://stackoverflow.com/questions/...ton-in-c-sharp
https://www.delphipraxis.net/215802-...dows-11-a.html
Und selbst die uralte virtuelle Tastatur
'TapTip.exe'
ist nur noch im Win64 verfügbar.