Skip to content

Automating Keystrokes with SendKeys in PowerShell

Automating repetitive tasks is a common need for many IT professionals and developers. PowerShell, with its extensive capabilities for system administration and automation, provides a powerful toolset for accomplishing such tasks. One such capability is the ability to simulate keystrokes using the SendKeys method. In this article, we’ll explore how to use SendKeys in PowerShell to automate typing and provide practical examples.

Understanding SendKeys

SendKeys is a method that allows you to send keystrokes to the active window. It simulates keyboard input, making it possible to automate tasks that involve typing, such as filling out forms or interacting with applications.

Use Cases

1. Automated Data Entry

Automating data entry tasks can significantly reduce manual errors and save time. For example, you can use SendKeys to populate web forms with predefined data or enter repetitive information into spreadsheets.

2. Application Testing

When testing applications, especially those with graphical user interfaces (GUI), automating user interactions can streamline the testing process. With SendKeys, you can simulate user input to navigate through different screens, enter data, and trigger actions.

3. Scripted Installations

During scripted installations or deployments, automating keystrokes can be useful for interacting with installer wizards or configuration prompts that require user input. This allows for unattended installations, making the deployment process more efficient.

How to Use SendKeys in PowerShell

To use SendKeys in PowerShell, follow these steps:

  1. Load the assembly: Before using SendKeys, you need to load the System.Windows.Forms assembly, which contains the SendKeys method.
  2. Create an instance of the SendKeys class: Once the assembly is loaded, create an instance of the SendKeys class.
  3. Use the Send method: Call the Send method on the SendKeys instance and pass the desired keystrokes as a string parameter.

Code Example

Let’s create a PowerShell script that types “” into a Notepad document:

# Load the System.Windows.Forms assembly
Add-Type -AssemblyName System.Windows.Forms
# Define the text to be typed
$textToType = ""
# Start Notepad
Start-Process notepad
# Wait for Notepad to open
Start-Sleep -Seconds 1
# Get the Notepad window
$notepadWindow = Get-Process | Where-Object {$_.MainWindowTitle -eq "Untitled - Notepad"} | Select-Object -First 1
if ($notepadWindow) {
    # Type the text into Notepad
else {
    Write-Host "Notepad is not running or could not be found."

Explanation of the Code

  • We start by loading the System.Windows.Forms assembly using the Add-Type cmdlet.
  • We define the text we want to type into Notepad.
  • We start Notepad using the Start-Process cmdlet.
  • After a short delay to allow Notepad to open, we use Get-Process to find the Notepad window.
  • If Notepad is found, we use SendKeys::SendWait to send the text to Notepad.

Below is an example that demonstrates how to send special keys such as Tab, Space, Enter, and others to Notepad using the SendKeys method in PowerShell:

# Load the System.Windows.Forms assembly
Add-Type -AssemblyName System.Windows.Forms

# Start Notepad
Start-Process notepad

# Wait for Notepad to open
Start-Sleep -Seconds 1

# Define the special keys to be sent
$specialKeys = @(
    'Tab',        # Tab key
    'Space',      # Space key
    'Enter',      # Enter key
    '{UP}',       # Up arrow key
    '{DOWN}',     # Down arrow key
    '{LEFT}',     # Left arrow key
    '{RIGHT}',    # Right arrow key
    '{HOME}',     # Home key
    '{END}',      # End key
    '{INSERT}',   # Insert key
    '{DELETE}',   # Delete key
    '{PGUP}',     # Page Up key
    '{PGDN}',     # Page Down key
    '{F1}',       # F1 key
    '{F2}',       # F2 key
    '{F3}',       # F3 key
    '{F4}',       # F4 key
    '{F5}',       # F5 key
    '{F6}',       # F6 key
    '{F7}',       # F7 key
    '{F8}',       # F8 key
    '{F9}',       # F9 key
    '{F10}',      # F10 key
    '{F11}',      # F11 key
    '{F12}'       # F12 key

# Iterate over each special key and send it to Notepad
foreach ($key in $specialKeys) {
    Start-Sleep -Milliseconds 200  # Add a small delay between key presses


Automating keystrokes with SendKeys in PowerShell can save time and effort when performing repetitive tasks. By understanding how to use SendKeys and applying it effectively, you can streamline your automation workflows and improve productivity.

Remember to use error handling to ensure your scripts handle unexpected situations gracefully. With practice and experimentation, you can harness the power of PowerShell for even more complex automation tasks.

Published inAutomationPowerShell
© 2024 - Powered by Coffee & Magic