如何检测C ++中当前选定/活动界面是否启用了绑定

时间:2018-03-05 15:27:05

标签: c++ if-statement focus keyboard-events typing

在Windows 7中(我不确定其他操作系统)当您在网页上时,按空格键会向下滚动几个像素。但是当你进入可以完成输入的界面时(如输入元素,文本区域,文字编辑器,代码编辑器,搜索栏等),按空格键显然会键入一个空格。

同样,当所有打开的窗口或菜单都被最小化,并且您正在查看桌面,并按下一个字母键,而不是在某处键入的字母时,会产生一声哔声。

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

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

无论是什么,我都在创建一个C ++程序,我需要能够检测它(在if条件下)。像这样的东西

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

或者这个

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

我需要能够本地做到这一点。不是特定于特定的控制台窗口或UI。

如果你能以任何方式帮助我解决这个问题,请不要这样做。并且请随意制作或建议相关的编辑,以改善这个问题,使其不那么模糊,更详细,更贴切。

1 个答案:

答案 0 :(得分:0)

您描述的功能属于运行具有焦点的窗口的程序,而不属于操作系统(尽管操作系统将至少部分地最终为该功能提供动力)。程序可以检测到击键并不奇怪,因为否则您将无法使用键盘将任何字符输入计算机。

然而,你不能只是"检测"带有if语句的随机事件。的"如果"不是"当" 。您的计算机不会重复检查程序中的所有if语句,并在匹配时跳转到代码中的该位置。想象一下混乱!

具有图形界面的程序非常复杂,几乎肯定会有一个事件循环",可以在自己的代码中或隐藏在API调用中(如本机Windows应用程序的情况);这样的事件循环通常轮询发送到由程序管理的窗口的密钥。如果您没有事件循环(并且如果您的操作系统无法生成"信号"当键击无法处理时),您将不得不制作一个。

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