我怎么知道一个窗口是否有焦点?(Win32 API)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (88)

使用Win32 API(使用C语言,但这是无关紧要的)如何判断给定的窗口(由HWND标识)是否具有焦点?我挂钩一个应用程序监视一个事件,当这个事件发生时,我想检查应用程序是否已经有焦点。如果没有,我想闪动窗口直到他们注意到它。

或者,FlashWindowEx结构标志FLASHW_TIMERNOFG闪烁,直到窗口焦点不闪烁,如果窗口已经有焦点?我现在不能测试这个,因为我不在我的开发环境中,但我的印象是它会闪现,这正是我想要避免的。

如果它很重要,应用程序在此窗口中使用DirectX。

提问于
用户回答回答于

除了gkrogers使用GetActiveWindow回答,你还可以通过捕获WM_SETFOCUSWM_KILLFOCUS事件来维护一个你想知道的窗口的布尔变量是否有焦点,或者WM_ACTIVATE

WndProc() ..
case WM_SETFOCUS:
  puts( "Got the focus" ) ;
  break ;

case WM_KILLFOCUS:
  puts( "Lost the focus" ) ;
  break;

case WM_ACTIVATE:
  if( LOWORD(wparam) == WA_ACTIVE )
    puts( "MEGAZORD ACTIVATED kew kew kew (flashy-eyes)" ) ;
  else 
    puts( "I AM NOW INACTIVE." ) ;
  break ;

扫码关注云+社区

领取腾讯云代金券