* Merge winforms framework content to working branch (#14) * Breadcrumb / TOC / Move net5 to net folder (#15) * change path from net5 to net * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Mess with bread/toc * Add .net 5 winforms placeholder article (#16) * added some metadata and adjusted net5 placeholder * corrections * corrections * corrections * Test1 * Swapping landing page vs concept * fix links * Fix links * Fix desc
7.4 KiB
title, description, ms.date, dev_langs, helpviewer_keywords, ms.assetid
| title | description | ms.date | dev_langs | helpviewer_keywords | ms.assetid | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| How to: Simulate Mouse and Keyboard Events in Code | Learn how to use the options Windows Forms provides to programmatically simulate mouse and keyboard inputs. | 03/30/2017 |
|
|
6abcb67e-3766-4af2-9590-bf5dabd17e41 |
How to: Simulate Mouse and Keyboard Events in Code
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.
To programmatically click the right mouse button
-
Create a xref:System.Windows.Forms.MouseEventArgs whose xref:System.Windows.Forms.MouseEventArgs.Button%2A property is set to the xref:System.Windows.Forms.MouseButtons.Right?displayProperty=nameWithType value.
-
Call the xref:System.Windows.Forms.Control.OnMouseClick%2A method with this xref:System.Windows.Forms.MouseEventArgs as the argument.
For more information on custom controls, see Developing Windows Forms Controls at Design Time.
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 xref:System.Windows.Forms.CheckBox.Checked%2A property of the xref:System.Windows.Forms.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 xref:System.Windows.Forms.SendKeys class for sending keystrokes to the active application.
Caution
If your application is intended for international use with a variety of keyboards, the use of xref:System.Windows.Forms.SendKeys.Send%2A?displayProperty=nameWithType could yield unpredictable results and should be avoided.
Note
The xref:System.Windows.Forms.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 xref:System.Windows.Forms.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 xref:System.Windows.Forms.SendKeys class tries to use the previous implementation first, and if that fails, uses the new implementation. As a result, the xref:System.Windows.Forms.SendKeys class may behave differently on different operating systems. Additionally, when the xref:System.Windows.Forms.SendKeys class uses the new implementation, the xref:System.Windows.Forms.SendKeys.SendWait%2A 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 xref:System.Windows.Forms.SendKeys class to use the new implementation by adding the following application setting to your app.config file.
<appSettings> <add key="SendKeys" value="SendInput"/> </appSettings>To force the xref:System.Windows.Forms.SendKeys class to use the previous implementation, use the value
"JournalHook"instead.
To send a keystroke to the same application
-
Call the xref:System.Windows.Forms.SendKeys.Send%2A or xref:System.Windows.Forms.SendKeys.SendWait%2A method of the xref:System.Windows.Forms.SendKeys class. The specified keystrokes will be received by the active control of the application. The following code example uses xref:System.Windows.Forms.SendKeys.Send%2A to simulate pressing the ENTER key when the user double-clicks the surface of the form. This example assumes a xref:System.Windows.Forms.Form with a single xref:System.Windows.Forms.Button control that has a tab index of 0.
[!code-cppSystem.Windows.Forms.SimulateKeyPress#10] [!code-csharpSystem.Windows.Forms.SimulateKeyPress#10] [!code-vbSystem.Windows.Forms.SimulateKeyPress#10]
To send a keystroke to a different application
-
Activate the application window that will receive the keystrokes, and then call the xref:System.Windows.Forms.SendKeys.Send%2A or xref:System.Windows.Forms.SendKeys.SendWait%2A 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
FindWindowandSetForegroundWindowmethods to activate the Calculator application window, and then calls xref:System.Windows.Forms.SendKeys.SendWait%2A to issue a series of calculations to the Calculator application.Note
The correct parameters of the
FindWindowcall 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.[!code-cppSystem.Windows.Forms.SimulateKeyPress#5] [!code-csharpSystem.Windows.Forms.SimulateKeyPress#5] [!code-vbSystem.Windows.Forms.SimulateKeyPress#5]
Example
The following code example is the complete application for the previous code examples.
[!code-cppSystem.Windows.Forms.SimulateKeyPress#0] [!code-csharpSystem.Windows.Forms.SimulateKeyPress#0] [!code-vbSystem.Windows.Forms.SimulateKeyPress#0]
Compiling the Code
This example requires:
- References to the System, System.Drawing and System.Windows.Forms assemblies.