在NET(C#)中,使用SendKeys模拟按键时,有些情况操作不生效。通过C#调用WinAPI实现的替代的方案模拟按键可以解决。本文主要介绍通过C#调用WinAPI实现模拟按键的方法及示例代码。

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void PressKey(Keys key, bool up)
{
    const int KEYEVENTF_EXTENDEDKEY = 0x1;
    const int KEYEVENTF_KEYUP = 0x2;
    if (up)
    {

        keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);

    }
    else
    {

        keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);

    }
}

需要引入命名空间:using System.Runtime.InteropServices;

调用方法:

PressKey(Keys.ControlKey, false);
PressKey(Keys.V, false);
PressKey(Keys.V, true);
PressKey(Keys.ControlKey, true);

注意:上面代码是模拟的Ctrl+V,第一个参数指定的具体的按键,第二个参数true是松开,false是按下。