This is a work-in-progress of a SendInput declare so that a user can send keyboard keys, mouse input, or hardware input to a program. I have a working program in C++, and am trying to convert it to Xojo. One of the fun puzzles was to retrieve the memory address of a structure: See How to get structure memory address? - #11 by Eugene_Dakin
Working Code in Visual Studio C++ presses the Window Key + D to minimize all windows, which is a relatively harmless program call and shows that the program is working. Here is the C++ code:
There are four input steps, which are: 1) Press the Virtual Win Key, 2) Press the virtual D key, 3) lift the virtual D key, 4) lift the virtual Win Key. The inputs are in an array with a size of 28 bytes. Here is the Microsoft Link to the SendInput function: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput
Here is the work-in-progress for the SendInput demonstration program in Xojo: SendInputRev1
This is a non-working partial-example. Chuckle, I am trying to convert C++ to Xojo Declares. Sorry for the Xojo spaghetti code, as I am not even close at completing the program.
Your inputs array is the equivalent of a memoryblock of size 28 with 4 INPUT structures laid end to end. You pass that memorblock to SendInput and declare the parameter as Ptr, and Xojo will take care of the rest. I haven’t looked at your code yet, but I think the declare parameters are
(count as Integer, inputs as Ptr, size as Integer)
Call it like
SendInput(4, inputsmemoryblock, 7)
Edit: I’m basing these numbers on reading “The inputs are in an array with a size of 28 bytes” as meaning the total array size is 28 bytes, not that the size of INPUT is 28 bytes.
What Tim said, with the addition that Int does not translate to Integer but to Int32, Uint to Uint32.
And just because I am curious: Why are you converting your String variables to Text?
Hi @Tim_Hare , yes, you are correct. I greatly prefer using structures as it makes adding data significantly easier to add and modify, as compared to using a memoryblock and manually counting bytes to modify the information.
I have no problem manually modifying a MemoryBlock to get the example program to work for the first time. Let me play with the code and see what I can create.
There was no reason in particular. I was just trying to show the data on the screen for the first attempt. If I have a hexadecimal number like &h0102E540 then it is likely a memory address, whereas a number like 51 is probably not a memory address. Its just for troubleshooting purposes, thats all.