鱼C论坛

 找回密码
 立即注册
查看: 7997|回复: 17

GetForegroundWindow()与WindowFromPoint()区别??

[复制链接]
发表于 2012-10-7 22:01:33 | 显示全部楼层 |阅读模式
1鱼币
这两个函数有什么区别啊??比如都对IE浏览器 这两个函数返回值 都指的是什么地方啊??

最佳答案

查看完整内容

WindowFromPoint你指向了客户区,而不是窗口的上方那个非客户区(就是拖动IE位置的地方) 你获取到它控件的句柄了 这是IE客户区的类名:Internet Explorer_Server 当然如果你指向的是地址栏 那么类名就会是:ToolbarWindow32 GetForegroundWindow() 倒是没这个问题,直接获取窗口句柄 也就是说这个API获取的才是正确的值:IEFrame 当然如果你上面那个API指向的是IE的非客户区(拖动IE那个地方),理论上也可以获取窗口句 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-7 22:01:34 | 显示全部楼层
WindowFromPoint你指向了客户区,而不是窗口的上方那个非客户区(就是拖动IE位置的地方)
你获取到它控件的句柄了
这是IE客户区的类名:Internet Explorer_Server
当然如果你指向的是地址栏
那么类名就会是:ToolbarWindow32

GetForegroundWindow()
倒是没这个问题,直接获取窗口句柄
也就是说这个API获取的才是正确的值:IEFrame
当然如果你上面那个API指向的是IE的非客户区(拖动IE那个地方),理论上也可以获取窗口句柄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-8 21:40:11 | 显示全部楼层
LZ,不想说你,MSDN里面不是说的挺清楚的么,详情参见MSDN
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-8 22:38:21 | 显示全部楼层
GetForegroundWindow
该函数返回前台窗口的句柄(用户当前工作的窗口)
比如你现在看见这些字肯定是IE或其他浏览器在最前面(前台)工作(你如果边看苍老师的LOVE ACTION MOVIE边看这里的情况除外。),这时GetForegroundWindow
浏览器的句柄,句柄不用我解释吧 ,都知道,如果你真不知道。。百度一下,这很基础的东西
WindowFromPoint
该函数获得包含指定点的窗口的句柄。
参数:POINT Point
这个结构包含X,Y成员,也就是坐标~\(≧▽≦)/~啦啦啦
传入指定点,它会在屏幕找该点,然后返回指定点前的窗口的句柄
另外建议你先百度,百度中文解释不全的话,就GOOGLE,如果还是不行只好MSDN中英文拿去翻译引擎翻译

另外祝楼主天天进步!

补充内容 (2012-10-8 22:40):
什么叫最前台,就是比如XP下面任务栏(是任务栏来着?),我们如果浏览器在最前面,那么那个矩形框就是凹下去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-8 23:00:30 | 显示全部楼层

正如你所说;如果同时看开两个窗口呢,那GetForegroundWindow得到的是哪个??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-8 23:20:32 | 显示全部楼层
拉登o睡觉 发表于 2012-10-8 23:00
正如你所说;如果同时看开两个窗口呢,那GetForegroundWindow得到的是哪个??

不是说过最前台的么,前台代表目前窗口是获得焦点的
只有一个会是最前台的
看图
凹下去,这里这个IE就是最前台的窗口
360桌面截图20121008232458.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-8 23:22:35 | 显示全部楼层
如果还有哪里不明白请说,在12点之前我还在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-9 08:42:00 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-10-8 23:22
如果还有哪里不明白请说,在12点之前我还在

hwnd=WindowFromPoint(lpPoint);
GetClassName(hwnd,ClassName,255);
假如此时 lpPoint就在IE浏览器上,GetClassName()的返回值为Internet Explorer_Server,而
hwnd=GetForegroundWindow();
GetClassName(hwnd,ClassName,255);
返回值却为IEFrame 这是为什么呢,不是应该返回的一样菜对吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 12:29:21 | 显示全部楼层
具体用VC6.0的SPI++
可以看出来我说的一切,如果我讲的太草的话。。╮(╯▽╰)╭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 12:34:26 | 显示全部楼层
如果还有什么漏点导致你没明白的话
请问我。


你的问题都问的很好。O(∩_∩)O~
有些人问问题不懂偏偏装懂

你的下一次成长
我很期待。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-9 12:56:41 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-10-9 12:28
WindowFromPoint你指向了客户区,而不是窗口的上方那个非客户区(就是拖动IE位置的地方)
你获取到它控件的 ...

为什么用spy++ 不能获取到IEFrame 而只能得到Internet Explorer_Server,而且怎么从 IEFrame  得到下面的WorkerW  ReBarWindow32  ComboBoxEx32   ComboBox  Edit,怎么从spy++ 我都看不到这些东西啊??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 13:01:48 | 显示全部楼层
11.jpg
SPI++指向这里可以得到你要的那个

至于那个控件的通过窗口类名我不清楚怎么得到控件类名(我没做过这种软件)。
但是可以通过点POINT来获取你要的控件句柄

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 13:04:48 | 显示全部楼层
22.jpg
也就是SPI++点击工具栏的第9个工具(那个望远镜)
然后拖动那个瞄准镜到指定窗口的地方就可以看到具体信息了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-9 13:15:09 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-10-9 13:01
SPI++指向这里可以得到你要的那个

至于那个控件的通过窗口类名我不清楚怎么得到控件类名(我没做过这种 ...

难道是我的IE浏览器问题 我试了微软自带的IE 360 搜狗 浏览器 firefox都无法得到IEFrame   ?? 我看过有人用FindWindowEx()可以一层层的得到这些类名 前提是 先得到IEFrame     比如 这样:
hwnd=GetForegroundWindow();
        //得到当前活动窗口类名
        GetClassName(hwnd,ClassName,255);
        //判断是否是IE窗口
        if(strcmp(ClassName,"IEFrame")!=0)
                return FALSE;
        //是IE窗口则继续查找url地址栏
        hwnd=::FindWindowEx(hwnd,NULL,"WorkerW",NULL);
        if(hwnd==NULL)
                return FALSE;
        hwnd=::FindWindowEx(hwnd,NULL,"ReBarWindow32",NULL);
        if(hwnd==NULL)
                return FALSE;
        hwnd=::FindWindowEx(hwnd,NULL,"ComboBoxEx32",NULL);
        if(hwnd==NULL)
                return FALSE;
        hwnd=::FindWindowEx(hwnd,NULL,"ComboBox",NULL);
        if(hwnd==NULL)
                return FALSE;
        hwnd=::FindWindowEx(hwnd,NULL,"Edit",NULL);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 13:18:48 | 显示全部楼层
你试试在SPI++的WINDOW 1窗口中找到IE
然后右键点properties->Class
然后看上面的CLASS NAME应该是IEFrame
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 13:20:24 | 显示全部楼层
如果不行我也 没办法,说实话,没必要用SPI++,你自己写就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-9 13:23:51 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-10-9 13:18
你试试在SPI++的WINDOW 1窗口中找到IE
然后右键点properties->Class
然后看上面的CLASS NAME应该是IEFram ...

嗯 这样能找到了 谢谢哈!麻烦你这么久,但是为什么不能直接用spy++ 指到那个位置就能直接看到呢!哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-9 13:27:44 | 显示全部楼层
非常抱歉。我不是很清楚。。。
小菜万分想要十个大脑(希望头别太大)
只可惜智力不足。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表