2016-07-15 92 views
1

我尝试了一些WM_SYSKEYDOWN和WM_SYSKEYUP作为键盘输入。WM_SYSKEYDOWN没有更新

这里是重要的代码部分。

 case WM_SYSKEYDOWN: 
      if (wParam == VK_MENU)  // VK_MENU = 18 = alt keys 
      { 
       if (!(lParam & (1 << 30))) 
       { 
        std::cout << "Pressed left alt key" << std::endl; 
       } 
      }; 
      break; 

     case WM_SYSKEYUP: 
      if (wParam == VK_MENU)  // VK_MENU = 18 = alt keys 
      { 
         std::cout << "Released left alt key" << std::endl; 
      }; 
      break; 

我试图一次打印一个字符串,如果我按下按钮,并打印另一个字符串释放密钥。

发布作品,但按回复只是一次每个2按

if (!(lParam & (1 << 30))) 

这条线应该经常中断再次发布字符串。

我不明白为什么......但我希望这样做。

在此先感谢!

+0

WM_SYSKEYDOWN被保留到* *合并与另一个键ALT键按键。或F10。无论它可能是什么,它都远远超过了它最初的预期用途。理解它们的方法是以与WM_KEYDOWN相同的方式处理它们。 –

+0

所以,这意味着有一种方法可以指出哪个“alt”键是哪个键。是左还是右?我没有找到办法做到这一点。通过在WPARAM上输入左侧的Alt键并不能给我一个索引。所以我尝试了这种方法..(注意:右键给我的索引我需要) – DotBlack

回答

0

我没有使用这个功能,我发现。

if (GetAsyncKeyState(VK_LSHIFT) & 0x8000) 
{ 
// Button pressed! 
} 

行之有效:d

+1

它只是告诉你,关键是关闭,它并没有告诉你,它只是按下。好吧,在一个游戏循环中,在标准的winapi程序中致命。 –

+0

我只是用每帧检查6个键。我不认为这是一个问题。我也没有找到更好的解决方案。 – DotBlack