模拟按键

时间:2019-08-07 15:21:36

标签: c# winforms driver sendkeys inputsimulator

  

简介:

我不是很擅长编程,只是我想在业余时间学习这些东西,并且在工作中出现小项目的机会到来。

我正在尝试创建一个基本应用程序,该应用程序模拟(Ctrl + Win + Shift)+ B的按键,并按住括号中的按键,直到按下B为止。

其原因是某些用户的显示器出现问题,并且重置显示驱动程序似乎可以解决问题。

  

代码:

我尝试了两种方法来完成自己想要的事情:

方法一:

using System;
using System.Windows.Forms;
using WindowsInput.Native;
using WindowsInput;


namespace FixMonitors
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var simu = new InputSimulator();
            simu.Keyboard.ModifiedKeyStroke(new[] { VirtualKeyCode.LWIN, VirtualKeyCode.CONTROL, VirtualKeyCode.SHIFT }, VirtualKeyCode.VK_B);
            this.Close();
        }
    }
}

方法二:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;


namespace FixMonitors
{
    static class KeyboardSend
    {
        [DllImport("user32.dll")]
        private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

        private const int KEYEVENTF_EXTENDEDKEY = 1;
        private const int KEYEVENTF_KEYUP = 2;

        public static void KeyDown(Keys vKey)
        {
            keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
        }

        public static void KeyUp(Keys vKey)
        {
            keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }
    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        this.Close();
            KeyboardSend.KeyDown(Keys.LControlKey);
            KeyboardSend.KeyDown(Keys.LWin);
            KeyboardSend.KeyDown(Keys.LShiftKey);
            KeyboardSend.KeyDown(Keys.B);
            KeyboardSend.KeyUp(Keys.B);
            KeyboardSend.KeyUp(Keys.LShiftKey);
            KeyboardSend.KeyUp(Keys.LWin);
            KeyboardSend.KeyUp(Keys.LControlKey);
        }
    }
}
  

问题:

现在,当我在Visual Studio中构建其中任何一个并运行创建的.exe时,一切在我的桌面上都可以正常运行。

我复制了该exe文件,并与我的其他四个桌面进行了测试,它对于其中三个桌面正常运行;屏幕变黑,显示驱动器复位。在第四台计算机上,绝对没有任何反应,我也无法弄清原因,因此,在诊断此问题上的任何帮助将不胜感激。

  

我尝试过的事情:

我尝试将.NET 3.5.1和.NET 4.8安装到有问题的机器上(因为这是我在我的机器上安装的)。

我也曾尝试重建专门针对广告.NET 3.5和.NET 4.7.2的应用程序,但无济于事。

此外,我在尝试诊断时稍稍更改了代码,以便仅按下Win键(模拟打开“开始”菜单),并且在所涉及的机器上正常运行。

再次,我们将不胜感激。

谢谢。

0 个答案:

没有答案