Имитация нажатия клавиш
Вступление:
Я не очень хорош в программировании, просто кое-что, что я пытаюсь изучить в свободное время и когда появляется возможность для небольших проектов на работе.
Я пытаюсь создать базовое приложение, которое имитирует нажатия клавиш для (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 (имитирующая открытие меню "Пуск"), и это прекрасно работает на рассматриваемой машине.
Опять же, любая помощь будет принята с благодарностью.
Заранее спасибо.