Ошибка: "The name 'Keys' does not exist in the current context"
У меня почему-то не находит имя Keys. Я скачал через менеджер NuGet
следующие пакеты:
- InputSimulation;
- System.Drawing.Common.
Мой код:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Threading;
using WindowsInput;
using WindowsInput.Native;
using System.Windows.Forms;
class Program
{
// Настройки
static int pixelBox = 3;
static int pixelSens = 40;
static Color pixelColor = Color.FromArgb(254, 254, 64); // Жëлтый
static int tapTime = 74;
static int waitTime = 0;
static int clicks = 1;
static bool waiting = false;
static bool noMovementCheck = true;
static void Main(string[] args)
{
// Основной цикл
while (true)
{
if (IsKeyDown(Keys.Alt)) // Проверка на удержание ALT
{
HoldMode();
}
Thread.Sleep(1);
}
}
private static bool IsKeyDown(object alt)
{
// Какая-то логика
}
private static void HoldMode()
{
var keys = new[] { Keys.W, Keys.A, Keys.D, Keys.S, Keys.Space };
bool allKeysNotPressed = true;
}
}
Но возникает ошибка:
CS0103 Имя "Keys" не существует в текущем контексте.
Что ещё можно сделать?
Ответы (1 шт):
Автор решения: Chaos_Sower
Вариант 1 — считывать комбинацию клавиши и
Вариант 2 — проверять состояние
→ Ссылка
Считывать клавишу Alt
без сочетания с другой клавишей — не очень удачная затея, поскольку в консольном приложении сделать это довольно проблематично.
Вот как вы можете поступить:
Вариант 1 — считывать комбинацию клавиши и Alt
Вы можете ожидать от пользователя нажатия комбинации клавиш Alt + любая другая клавиша
. Для этого нужно изменить код следующим образом:
class Program
{
private static void Main()
{
while (true)
{
Console.WriteLine("Нажмите на комбинацию \"Alt + любая клавиша\" (для выхода нажмите Esc)...");
ConsoleKeyInfo ConsoleKeyInfo = Console.ReadKey(true);
if (ConsoleKeyInfo.Key == ConsoleKey.Escape)
{
break;
}
if ((ConsoleKeyInfo.Modifiers & ConsoleModifiers.Alt) != 0)
{
Console.WriteLine("Нажата клавиша Alt вместе с " + ConsoleKeyInfo.Key);
}
else
{
Console.WriteLine("Нажата клавиша " + ConsoleKeyInfo.Key);
}
}
}
}
Вариант 2 — проверять состояние Alt
по таймеру
Вы можете проверять нажатось клавиши Alt
в реальном времени с помощью таймера:
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
private static extern short GetAsyncKeyState(int vKey);
const int VK_MENU = 0x12; // код клавиши Alt
private static void Main()
{
Console.WriteLine("Нажмите Alt (для выхода нажмите Esc)...");
Timer Timer = new(CheckAltKey, null, 0, 100); // Проверка каждые 100 миллисекунд
while (true)
{
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)
{
break;
}
}
}
private static void CheckAltKey(object? state)
{
if (GetAsyncKeyState(VK_MENU) < 0)
{
Console.WriteLine("Вы нажали клавишу Alt!");
}
}
}