When Keys Are Pressed A Keyboard Controller Generates Output

When Keys Are Pressed A Keyboard Controller Generates Output

One of the things we baked into CircuitPython is 'HID' (Human Interface Device) control - that means keyboard and mouse capabilities.This means your CircuitPython board can act like a keyboard device and press key commands, or a mouse and have it move the mouse pointer around and press buttons. Fruity Keyboard Controller. Fruity Keyboard Controller generates automation data to control modulation targets (knobs, sliders etc.) from Piano roll or a live MIDI input. MIDI Note or velocity can be used as the modulation source. Read more about internal automation controllers here. See Fruity Keyboard Controller in action here.

Windows Forms provides several options for programmatically simulating mouse and keyboard input. This topic provides an overview of these options.

Simulating Mouse Input

The best way to simulate mouse events is to call the OnEventName method that raises the mouse event you want to simulate. This option is usually possible only within custom controls and forms, because the methods that raise events are protected and cannot be accessed outside the control or form. For example, the following steps illustrate how to simulate clicking the right mouse button in code.

When Keys Are Pressed A Keyboard Controller Generates Output

To programmatically click the right mouse button

  1. Create a MouseEventArgs whose Button property is set to the MouseButtons.Right value.

  2. Call the OnMouseClick method with this MouseEventArgs as the argument.

When Keys Are Pressed A Keyboard Controller Generates Output Windows 10

For more information on custom controls, see Developing Windows Forms Controls at Design Time.

When Keys Are Pressed A Keyboard Controller Generates Output In Java

There are other ways to simulate mouse input. For example, you can programmatically set a control property that represents a state that is typically set through mouse input (such as the Checked property of the CheckBox control), or you can directly call the delegate that is attached to the event you want to simulate.

Simulating Keyboard Input

Although you can simulate keyboard input by using the strategies discussed above for mouse input, Windows Forms also provides the SendKeys class for sending keystrokes to the active application.


If your application is intended for international use with a variety of keyboards, the use of SendKeys.Send could yield unpredictable results and should be avoided.


The SendKeys class has been updated for the .NET Framework 3.0 to enable its use in applications that run on Windows Vista. The enhanced security of Windows Vista (known as User Account Control or UAC) prevents the previous implementation from working as expected.

The SendKeys class is susceptible to timing issues, which some developers have had to work around. The updated implementation is still susceptible to timing issues, but is slightly faster and may require changes to the workarounds. The SendKeys class tries to use the previous implementation first, and if that fails, uses the new implementation. As a result, the SendKeys class may behave differently on different operating systems. Additionally, when the SendKeys class uses the new implementation, the SendWait method will not wait for messages to be processed when they are sent to another process.

If your application relies on consistent behavior regardless of the operating system, you can force the SendKeys class to use the new implementation by adding the following application setting to your app.config file.

When Keys Are Pressed A Keyboard Controller Generates Output In Computer

To force the SendKeys class to use the previous implementation, use the value 'JournalHook' instead.

To send a keystroke to the same application

  1. Call the Send or SendWait method of the SendKeys class. The specified keystrokes will be received by the active control of the application. The following code example uses Send to simulate pressing the ENTER key when the user double-clicks the surface of the form. This example assumes a Form with a single Button control that has a tab index of 0.

To send a keystroke to a different application

  1. Activate the application window that will receive the keystrokes, and then call the Send or SendWait method. Because there is no managed method to activate another application, you must use native Windows methods to force focus on other applications. The following code example uses platform invoke to call the FindWindow and SetForegroundWindow methods to activate the Calculator application window, and then calls SendWait to issue a series of calculations to the Calculator application.


    The correct parameters of the FindWindow call that locates the Calculator application vary based on your version of Windows. The following code finds the Calculator application on Windows 7. On Windows Vista, change the first parameter to 'SciCalc'. You can use the Spy++ tool, included with Visual Studio, to determine the correct parameters.


The following code example is the complete application for the previous code examples.

Compiling the Code

This example requires:

  • References to the System, System.Drawing and System.Windows.Forms assemblies.

See also