keyeventf_keyup 未释放密钥
keyeventf_keyup not releasing key
我正在尝试制作一个基于 C# 控制台的应用程序,它会在我按住鼠标中键时按下并释放 space 键。
该应用程序可在基于文本的应用程序(记事本、网络浏览器等)中运行,了解如何按住 space 栏,它实际上会创建 spaces,但不是游戏。
例如,如果我按住中间按钮,它似乎没有注册 keyup 事件,这意味着我必须再次按下 space 栏到 "jump" .
代码如下:
static void Main(string[] args)
{
Console.WriteLine("Press down the middle mouse button to jump.\n"
+ "Press F5 to pause the application.");
while (true)
{
if ((GetAsyncKeyState(VK_MIDDLEBUTTON) & KEY_PRESSED) > 0)
{
SendInputWithAPI();
}
else if ((GetAsyncKeyState(VK_F5) & KEY_PRESSED) > 0)
{
PauseFunc();
}
Thread.Sleep(10);
}
}
static void SendInputWithAPI()
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1; // 1 = Keyboard Input
Input.U.ki.wScan = ScanCodeShort.SPACE;
Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
Inputs[0] = Input;
SendInput(1, Inputs, INPUT.Size);
Random time = new Random();
int randTime = time.Next(1, 4);
Thread.Sleep(randTime);
Input.U.ki.dwFlags = KEYEVENTF.KEYUP;
SendInput(1, Inputs, INPUT.Size);
}
static void PauseFunc()
{
Console.WriteLine("Paused... Press any key to continue.");
Console.ReadKey(true);
}
下面是包含所有结构的完整代码:
https://hastebin.com/oregahesoh.cs
我是不是输入错误了?
我知道 Thread.Sleep(randTime) 不是问题,因为我尝试了不同的时间(最多一秒)。
我已经修好了..
这是我添加的:
Input.type = 1;
Input.U.ki.dwFlags = KEYEVENTF.KEYUP | KEYEVENTF.SCANCODE;
Inputs[0] = Input;
到 keyup 事件。
我正在尝试制作一个基于 C# 控制台的应用程序,它会在我按住鼠标中键时按下并释放 space 键。
该应用程序可在基于文本的应用程序(记事本、网络浏览器等)中运行,了解如何按住 space 栏,它实际上会创建 spaces,但不是游戏。
例如,如果我按住中间按钮,它似乎没有注册 keyup 事件,这意味着我必须再次按下 space 栏到 "jump" .
代码如下:
static void Main(string[] args)
{
Console.WriteLine("Press down the middle mouse button to jump.\n"
+ "Press F5 to pause the application.");
while (true)
{
if ((GetAsyncKeyState(VK_MIDDLEBUTTON) & KEY_PRESSED) > 0)
{
SendInputWithAPI();
}
else if ((GetAsyncKeyState(VK_F5) & KEY_PRESSED) > 0)
{
PauseFunc();
}
Thread.Sleep(10);
}
}
static void SendInputWithAPI()
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1; // 1 = Keyboard Input
Input.U.ki.wScan = ScanCodeShort.SPACE;
Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
Inputs[0] = Input;
SendInput(1, Inputs, INPUT.Size);
Random time = new Random();
int randTime = time.Next(1, 4);
Thread.Sleep(randTime);
Input.U.ki.dwFlags = KEYEVENTF.KEYUP;
SendInput(1, Inputs, INPUT.Size);
}
static void PauseFunc()
{
Console.WriteLine("Paused... Press any key to continue.");
Console.ReadKey(true);
}
下面是包含所有结构的完整代码:
https://hastebin.com/oregahesoh.cs
我是不是输入错误了?
我知道 Thread.Sleep(randTime) 不是问题,因为我尝试了不同的时间(最多一秒)。
我已经修好了..
这是我添加的:
Input.type = 1;
Input.U.ki.dwFlags = KEYEVENTF.KEYUP | KEYEVENTF.SCANCODE;
Inputs[0] = Input;
到 keyup 事件。