介绍:
我不是很擅长编程,只是在业余时间和工作中的小项目出现机会时尝试学习的东西。
我正在尝试创建一个基本应用程序,它模拟 (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 键(模拟打开开始菜单),这在相关机器上运行良好。
再次,任何帮助将不胜感激。
提前致谢。