当我的程序不是活动程序时,如何停止使用 GetKeyState 获取值?
Posted
技术标签:
【中文标题】当我的程序不是活动程序时,如何停止使用 GetKeyState 获取值?【英文标题】:How do I stop getting values with GetKeyState when my program isnt the active program? 【发布时间】:2017-11-04 12:16:30 【问题描述】:我正在制作一个程序,它使用GetKeyState()
函数来检查是否按下了某个键。但是,当程序未处于活动状态时(它只是在后台运行),我仍然会获得按下按键时的值。我怎样才能克服这个问题,以便仅在我的程序处于活动状态时才获得值?
对于我的其中一个键,代码如下:
if (GetKeyState('A') < 0)
canvas [1] = colour;
【问题讨论】:
检查焦点。 如果您只需要活动时的值,您应该使用窗口消息。这就是他们的目的。 @Mgetz 你能举个例子吗?我只听说过这些if(::GetForegroundWindow() == my_window_handle)
@SamFielding 处理窗口消息你必须有一个窗口There is a tutorial on MSDN
【参考方案1】:
GetKeyState
只能用于检查 Ctrl、Shift 等以响应另一个输入消息:
应用程序调用 GetKeyState 以响应键盘输入消息
窗口/控件的大部分键盘输入应该来自keyboard messages,主要是WM_KEYDOWN
、WM_CHAR
和WM_KEYUP
。这些消息被发送到具有键盘焦点的窗口。一些常用控件还允许父窗口处理一些输入消息。
【讨论】:
【参考方案2】:所以我不能使用任何其他方法,因为我根本不知道如何,以下是我为其他想知道的人解决的方法:
我创建了一个常量变量,它等于打开时的活动窗口(我的程序很小,所以打开速度非常快)
const HWND window2 = GetForegroundWindow();
然后我测试一下当前活动窗口是否和这个一样:
HWND Window = GetForegroundWindow();
if (window2 == Window) `**Put original code here**`
这绝对是一种粗略的做法,当然它可能不适用于大型程序,但如果它有效,它就有效:)。
【讨论】:
以上是关于当我的程序不是活动程序时,如何停止使用 GetKeyState 获取值?的主要内容,如果未能解决你的问题,请参考以下文章