当我的程序不是活动程序时,如何停止使用GetKeyState获取值?

时间:2017-11-04 12:16:30

标签: c++ windows user-interface winapi

我正在制作一个程序,使用GetKeyState()函数来检查某个键是否被按下。但是,当程序没有激活(它只是在后台运行)时,我仍然可以获得按下按键的值。我怎么能克服这个问题,以便在我的程序处于活动状态时才能获得值?

对于我的一个密钥,这里是代码:

if (GetKeyState('A') < 0)
{
    canvas [1] = colour;
}

2 个答案:

答案 0 :(得分:1)

GetKeyState只应用于检查 Ctrl Shift 等以响应另一条输入消息:

  

应用程序调用GetKeyState以响应键盘输入消息

窗口/控件应该从keyboard messages得到大部分键盘输入,主要是WM_KEYDOWNWM_CHARWM_KEYUP。这些消息将通过键盘焦点发送到窗口。一些常用控件还允许父窗口处理一些输入消息。

答案 1 :(得分:0)

所以我不能使用任何其他方法,因为我根本不知道如何,这是我如何为其他想知道的人解决它:

我创建了一个常量变量,它等于打开时的活动窗口(我的程序很小,因此打开速度非常快)

const HWND window2 = GetForegroundWindow();

然后我测试了当前活动窗口是否与此相同:

    HWND Window = GetForegroundWindow();
if (window2 == Window) { `**Put original code here**` }

这绝对是一种粗暴的做法,并确定它可能不适用于较大的程序,但如果它有效,它可以工作:)。