1

介绍:

我不是很擅长编程,只是在业余时间和工作中的小项目出现机会时尝试学习的东西。

我正在尝试创建一个基本应用程序,它模拟 (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 键(模拟打开开始菜单),这在相关机器上运行良好。

再次,任何帮助将不胜感激。

提前致谢。

4

0 回答 0