简介:
我不是很擅长编程,只是我想在业余时间学习这些东西,并且在工作中出现小项目的机会到来。
我正在尝试创建一个基本应用程序,该应用程序模拟(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键(模拟打开“开始”菜单),并且在所涉及的机器上正常运行。
再次,我们将不胜感激。
谢谢。