There are up and down methods ?
Hi @TRon, Yes we have up and down methods but I have questions:
type
{ TKeyInput }
TKeyInput = class
protected
procedure DoDown(Key: Word); dynamic; abstract;
procedure DoUp(Key: Word); dynamic; abstract;
public
procedure Down(Key: Word);
procedure Up(Key: Word);
procedure Press(Key: Word);
procedure Press(StringValue : String);
procedure Apply(Shift: TShiftState);
procedure Unapply(Shift: TShiftState);
end;
How can we have the exact same procedure name? Please explain this to me because I am very confused because it compiles without complaining. See below:
procedure Press(Key: Word);
procedure Press(StringValue : String);
The other thing that baffles me is for me to do what I want I have to press each key and HOLD then press the next key. So press CTRL and hold, press Shift and hold then press Alt and hold so what ever happnes to the keyboard buffer ( overflows a zillion times? but does not freeze? )
Even if there is a notion that all keys are pressed at the same time, it actually isn't. At least not from nature. Most keyboard do not even support pressing more than an x amount of keys at the same time 
Just so you know the reason am searching for this is because @dbannon posted recently about moving a window from one workspace to another in Linux and I started digging and on my Debian and Gnome system when I press Ctrl+Alt+Shift+<left or right arrow key> I can switch to another workspace. So I was trying to simulate this in code and send @dbanon's way but things are not as simple as they look. I also found you can set this to switch workspaces: _NET_WM_DESKTOP
I know people will hang me high one of these days but I asked chatGPT and I got back this:
Steps to Set _NET_WM_DESKTOP
1 Open a Connection to the X Server: Use XOpenDisplay to establish a connection with the X server.
2 Retrieve the Atom for _NET_WM_DESKTOP: Use XInternAtom to get the atom corresponding to the _NET_WM_DESKTOP property.
3 Prepare the Data: Prepare the data you want to set. This will be the workspace number you want to assign to the window.
4 Set the Property Using XChangeProperty: Use XChangeProperty to set the property on the window.
5 Flush the Display: Ensure that the changes are sent to the X server by using XFlush.
6 Close the Connection: Close the connection to the X server using XCloseDisplay.
Seems easy enough right? NOt so am afraid :-) If you have any code please do share!