如何在按下键时将 bool 变量设置为 true,再次按下时如何设置为 false?
How to set a bool variable to true when a key is pushed and false when it is pushed again?
我在 C# 中遇到了一个很大的问题,现在我正在尝试编写一个函数来检测 F8 按钮何时被按下并将 bool F8Pushed 设置为 true,然后当它再次被按下时将 F8Pushed 设置为 false。
这是我目前的代码:
static bool IsKeyPressed() //This Function Returns True if F8 Is Pushed and False if F8 is up
{
bool is_pressed = (GetAsyncKeyState(119) & 0x8000) != 0;
return is_pressed;
}
static void CheckHotKey() //This is the Function that I am calling the other function from for debugging.
{
while (true)
{
Console.WriteLine(IsKeyPressed());
}
}
现在我遇到但无法解决的问题是,我无法找到一种方法让变量将其自身复制到另一个变量,并在有意义的情况下能够返回 false。如果 IsKeyPressed() == true
我可以将 bool 设置为 true,但是当它再次 returns 为真时,我无法弄清楚如何将其恢复为 false。
提前致谢!
编辑:
感谢您的帮助,但是我仍然遇到了一些问题,这是更新。
static bool IsKeyPressed()
{
is_pressed = (GetAsyncKeyState(119) & 0x8000) != 0 && !is_pressed;
return is_pressed;
}
static void CheckHotKeys()
{
while (true)
{
IsKeyPressed();
if(is_pressed)
{
F8Pushed = true;
}
Console.WriteLine(F8Pushed);
if(IsKeyPressed())
{
F8Pushed = false;
}
Console.WriteLine(F8Pushed);
}
}
我设法让它工作了一点,但是它有很多错误,很多时候击键没有检测到任何想法?
您必须将该变量 is_pressed
设置为全局变量以保持当前状态。然后像这样尝试:
static bool is_pressed;
static bool IsKeyPressed()
{
is_pressed = (GetAsyncKeyState(119) & 0x8000) != 0 && !is_pressed;
return is_pressed;
}
其中 && !is_pressed
每次都会为您切换值
假设您将按键结果存储在布尔值中:
bool isKeyPressed = true;
然后您可以这样做:
isKeyPressed == IsKeyPressed() && !isKeyPressed;
我不确定我是否完全理解你想要完成的事情。您的代码包含太多有问题的部分,我选择编写一个全新的代码:
class Program
{
const byte VK_F8 = 0x77;
const byte VK_ESC = 0x1b;
static bool globalAppState = false;
static void Main(string[] args)
{
bool lastState = IsKeyPressed(VK_F8);
while (!IsKeyPressed(VK_ESC))
{
bool newState = IsKeyPressed(VK_F8);
if (lastState != newState)
{
if (newState)
{
Console.WriteLine("F8: pressed");
globalAppState = !globalAppState;
}
else
Console.WriteLine("F8: released");
lastState = newState;
}
}
}
static bool IsKeyPressed(byte keyCode)
{
return ((GetAsyncKeyState(keyCode) & 0x8000) != 0);
}
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(int vKey);
}
函数 IsKeyPressed(VK_F8)
始终告诉您指定键的当前状态 (pressed/released)。
当您只需要在更改时执行某些操作时(从按下到释放,或从释放到按下) 用您的特定任务替换控制台输出函数。
当你需要一些多线程时,比如在新线程中处理事件,这是一个不同的问题......(在此范围之外)
编辑:在每个新的按键事件上添加了变量更改。这是肮脏的解决方案...
我在 C# 中遇到了一个很大的问题,现在我正在尝试编写一个函数来检测 F8 按钮何时被按下并将 bool F8Pushed 设置为 true,然后当它再次被按下时将 F8Pushed 设置为 false。
这是我目前的代码:
static bool IsKeyPressed() //This Function Returns True if F8 Is Pushed and False if F8 is up
{
bool is_pressed = (GetAsyncKeyState(119) & 0x8000) != 0;
return is_pressed;
}
static void CheckHotKey() //This is the Function that I am calling the other function from for debugging.
{
while (true)
{
Console.WriteLine(IsKeyPressed());
}
}
现在我遇到但无法解决的问题是,我无法找到一种方法让变量将其自身复制到另一个变量,并在有意义的情况下能够返回 false。如果 IsKeyPressed() == true
我可以将 bool 设置为 true,但是当它再次 returns 为真时,我无法弄清楚如何将其恢复为 false。
提前致谢!
编辑: 感谢您的帮助,但是我仍然遇到了一些问题,这是更新。
static bool IsKeyPressed()
{
is_pressed = (GetAsyncKeyState(119) & 0x8000) != 0 && !is_pressed;
return is_pressed;
}
static void CheckHotKeys()
{
while (true)
{
IsKeyPressed();
if(is_pressed)
{
F8Pushed = true;
}
Console.WriteLine(F8Pushed);
if(IsKeyPressed())
{
F8Pushed = false;
}
Console.WriteLine(F8Pushed);
}
}
我设法让它工作了一点,但是它有很多错误,很多时候击键没有检测到任何想法?
您必须将该变量 is_pressed
设置为全局变量以保持当前状态。然后像这样尝试:
static bool is_pressed;
static bool IsKeyPressed()
{
is_pressed = (GetAsyncKeyState(119) & 0x8000) != 0 && !is_pressed;
return is_pressed;
}
其中 && !is_pressed
每次都会为您切换值
假设您将按键结果存储在布尔值中:
bool isKeyPressed = true;
然后您可以这样做:
isKeyPressed == IsKeyPressed() && !isKeyPressed;
我不确定我是否完全理解你想要完成的事情。您的代码包含太多有问题的部分,我选择编写一个全新的代码:
class Program
{
const byte VK_F8 = 0x77;
const byte VK_ESC = 0x1b;
static bool globalAppState = false;
static void Main(string[] args)
{
bool lastState = IsKeyPressed(VK_F8);
while (!IsKeyPressed(VK_ESC))
{
bool newState = IsKeyPressed(VK_F8);
if (lastState != newState)
{
if (newState)
{
Console.WriteLine("F8: pressed");
globalAppState = !globalAppState;
}
else
Console.WriteLine("F8: released");
lastState = newState;
}
}
}
static bool IsKeyPressed(byte keyCode)
{
return ((GetAsyncKeyState(keyCode) & 0x8000) != 0);
}
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(int vKey);
}
函数 IsKeyPressed(VK_F8)
始终告诉您指定键的当前状态 (pressed/released)。
当您只需要在更改时执行某些操作时(从按下到释放,或从释放到按下) 用您的特定任务替换控制台输出函数。
当你需要一些多线程时,比如在新线程中处理事件,这是一个不同的问题......(在此范围之外)
编辑:在每个新的按键事件上添加了变量更改。这是肮脏的解决方案...