有关焦点窗口最前

1、以下几个函数,均可以获取当前的焦点所在程序的句柄,只是获取的焦点信息不一样。

GetForegroundWindow

GetActiveWindow

GetFocus

2、GetForegroundWindow和GetActiveWindow的区别

GetForegroundWindow指最前的窗口,但是最前的窗口不一定是激活的...比如说qq的主窗口,只要不靠到屏幕边上,就是总在最前的,你拖放一个ie过去是挡不住的,这时候,用GetActiveWindow得到的是有焦点的ie窗口,用GetForegroundWindow得到的是最前的qq窗口
————————————————
版权声明:本文为CSDN博主「活最好的自己」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lz465350/article/details/40741863

获取活动窗口输入焦点控件句柄的方法_leevans的专栏-CSDN博客

GetForegroundWindow函数只能获取Windows当前焦点窗口(也可以叫活动窗口)的句柄,如果需要获取该窗口中焦点控件句柄,就需要用到下面这段代码:

HWND hForeWnd = GetForegroundWindow();//获得当前激活的窗口句柄

DWORD dwSelfThreadId = GetCurrentThreadId();//获取本身的线程ID

DWORD dwForeThreadId = GetWindowThreadProcessId(hForeWnd, NULL);//根据窗口句柄获取线程ID

AttachThreadInput(dwForeThreadId, dwSelfThreadId, true);//附加线程

HWND hFocus = GetFocus();//获取具有输入焦点的窗口句柄

AttachThreadInput(dwForeThreadId, dwSelfThreadId, false);//取消附加的线程

hFocus就是焦点控件的句柄。

需要说明的一点,在测试过程中,以上代码对网页不起作用,其它窗口OK!

另外需要提醒一下,GetForegroundWindow 和 GetActiveWindow 函数的区别:
GetActiveWindow 只是获取当前程序中(严格地说是线程中)被激活的窗口
GetForegroundWindow 是获取当前系统中被激活的窗口
两个函数的级别是不一样的, 一个是线程级、一个是系统级。

 

 

posted @ 2021-09-16 09:55  晨光静默  阅读(215)  评论(0编辑  收藏  举报