当前位置:  开发笔记 > 编程语言 > 正文

如何判断窗口是否具有焦点?(Win32 API)

如何解决《如何判断窗口是否具有焦点?(Win32API)》经验,为你挑选了3个好方法。

使用Win32 API(在C中,但这是无关紧要的)如何判断给定窗口(由HWND标识)是否具有焦点?我正在挂钩观看活动的应用程序,当该事件发生时,我想检查应用程序是否已经有焦点.如果没有,我想要闪烁窗口,直到它们为焦点.

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

编辑:此外,如果重要,应用程序在此窗口中使用DirectX.



1> gkrogers..:

GetActiveWindow将返回与输入焦点关联的顶级窗口.GetFocus将返回具有输入焦点的窗口的句柄.

本文可能会有所帮助:http:
//www.microsoft.com/msj/0397/Win32/Win320397.aspx


该链接在其显示的位置不再可用,但可以存档:[web.archive.org/web/200308 ](https://web.archive.org/web/20030807084141/http://www.microsoft的.com/MSJ/0397 /的Win32/Win320397.aspx)
或者,对于比@Sabuncu的页面更现代的页面,请尝试以下操作:https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms646292(v=vs.85).aspx

2> bobobobo..:

除了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_INACTIVE )
    puts( "I AM NOW INACTIVE." ) ;
  else // WA_ACTIVE or WA_CLICKACTIVE
    puts( "MEGAZORD ACTIVATED kew kew kew (flashy-eyes)" ) ;
  break ;


喜欢这个例子。

3> Jason Cohen..:

你的意思是"专注"还是指"活跃"?

一个窗口具有焦点 - 第一个获得键盘事件的窗口.如果其中一个子窗口具有焦点,则外窗口(用户可以在屏幕上拖动)是"活动的",但它本身可能有也可能没有焦点.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有