C++中如何检测当前selected/active接口是否启用绑定

How to detect whether tying is enabled in the currently selected/active interface in C++

在 Windows 7(我不确定其他 OS)当您在网页上时,按 space 栏会向下滚动页面几个像素。但是当你在一个可以输入的界面(比如输入元素、文本区域、文字编辑器、代码编辑器、搜索栏等)中时,按下 space-bar 显然会输入 space。

类似地,当所有打开的 windows 或菜单都最小化,并且您正在查看桌面时,您按下一个字母键,而不是在某处键入字母,会发出哔声。

这表明打字功能的可用性可以 "detected"。如果可以检测到,则很可能使用 C++ 来完成。

我不知道该怎么称呼它。我试图找出使用 google 但我得到的一切似乎都与此无关。我可能没有使用正确的关键字。

不管这是什么,我正在创建一个 C++ 程序,我需要在其中检测到它(在 if 条件下)。像这样

if (/*typing can be done*/) {
//Do something..........
}

或者这个

if (/*typing can NOT be done*/) {
if( GetKeyState(VK_SPACE) & 0x8000 ) {
//Do something..........
}
}

而且我需要能够做到这一点。不特定于特定控制台 window 或 UI。

如果你能以任何方式帮助我解决这个问题,请这样做。并且请随时进行或建议相关编辑以改进此问题并使其不那么模糊,更详细和切题。

您描述的功能属于程序 运行 window 重点关注,而不属于操作系统(尽管操作系统将至少部分地最终支持该功能)。程序可以检测击键不足为奇,否则您将无法使用键盘将任何字符输入计算机。

但是,您不能仅 "detect" 带有 if 语句的随机事件。 "if" 不是 "when"。您的计算机不会重复检查程序中的所有 if 语句并在匹配时跳转到代码中的那个位置。想象一下混乱!

一个足够复杂以具有图形界面的程序几乎肯定有一个 "event loop",无论是在它自己的代码中还是隐藏在 API 调用中(如本机 Windows 应用程序);这样的事件循环通常会轮询发送到程序管理的 window(s) 的密钥。如果您没有事件循环(并且如果您的操作系统无法在击键未处理时生成 "signal"),则您将不得不创建一个。

确切的细节超出了 Stack Overflow 答案的范围,但通过将您指向一本关于如何创建图形程序的教科书的方向,我使您能够发现在这些情况下如何处理输入和输出。