c#使用具有多个键输入的switch语句



我正在尝试为我玩的棋盘游戏制作一个小设备。我对编程几乎一无所知,我认为这将是一个很好的开始。我有六个按钮来利用我的QT Py。所需的函数如下:

(+ 1)

(+ 10)

(+ 100)

[1]

[-10]

[-100](切换攻击/防御)

[下一页(用于跟踪多个字符)]

到目前为止我只写了这些:

using System;
namespace Counter
{
class Program
{
static void Main(string[] args)
{
var atk = 0;
var def = 0;
bool quit = false;
while (quit == false)
{
switch (Console.ReadKey().Key)
{
case ConsoleKey.D1:
atk++;
break;
case ConsoleKey.D2:
atk--;
break;
case ConsoleKey.D3:
def++;
break;
case ConsoleKey.D4:
def--;
break;
}
}
}
}
}

我如何使软件识别多个输入,例如[D5+D1 = pwr+10]?我将需要像疯了一样多绑定输入,以便拥有我想要的所有功能。

在这种情况下,我相信控制台名称空间中没有任何东西可以告诉输入是按下键(按下)还是上键(释放),你要做的是使用本地函数可以异步地告诉当前按下的键是按下键还是按上键,这里有一个例子:https://null-byte.wonderhowto.com/how-to/create-simple-hidden-console-keylogger-c-sharp-0132757/

总结:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook,
LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
private delegate IntPtr LowLevelKeyboardProc(
int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookCallback(
int nCode, IntPtr wParam, IntPtr lParam)
{

int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine($"{(Keys)vkCode} is key down? {(IntPtr)WM_KEYDOWN == wParam}");

return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
public static void Main(){
var handle = GetConsoleWindow();
// Hide
ShowWindow(handle, SW_HIDE);
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}

最新更新