Имитация нажатия клавиш

Вступление:

Я не очень хорош в программировании, просто кое-что, что я пытаюсь изучить в свободное время и когда появляется возможность для небольших проектов на работе.

Я пытаюсь создать базовое приложение, которое имитирует нажатия клавиш для (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 ответов

Другие вопросы по тегам