VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 2076|回复: 9

[求助] 如何获取运行程序全屏窗口的句柄?

[复制链接]
68_avatar_middle
在线会员 发表于 2015-12-28 21:05:13 | 显示全部楼层 |阅读模式
如何获取一个运行程序全屏窗口的句柄(如:PPT程序在全屏状态下)?如何代码操作让一个PPT程序的窗口全屏显示并能够向该全屏窗口发送消息?

由于要用到一点windows编程方向的知识,但又没有怎么学过windows编程,望大神能给出较详细的解答. 初入此站,积分不够,身价不足3驿站币,但真心求教.

评分

参与人数 1热心值 +1 收起 理由
70_avatar_small hahala + 1 百度一下你就知道

查看全部评分





上一篇:请大家帮忙分析一下头文件的格式,感激不尽!
下一篇:VC picture conctrol如何响应onsize函数,调整大小?
81_avatar_middle
online_moderator 发表于 2015-12-28 23:37:22 | 显示全部楼层
luckyboylch 发表于 2015-12-28 21:25
又要白发了吗,是不是只要是在论坛里发一些太过于入门级的问题就不会有人理睬,哎。。。

2# 说的是一种方法,也可以使用 FindWindow 来查找目标窗口,都可以实现的
39_avatar_middle
在线会员 发表于 2015-12-28 21:24:54 | 显示全部楼层
GetActiveWindow( );

评分

参与人数 1热心值 +1 收起 理由
68_avatar_small luckyboylch + 1

查看全部评分

68_avatar_middle
ico_lz  楼主| 发表于 2015-12-28 21:25:51 | 显示全部楼层
又要白发了吗,是不是只要是在论坛里发一些太过于入门级的问题就不会有人理睬,哎。。。
68_avatar_middle
ico_lz  楼主| 发表于 2015-12-28 21:44:30 | 显示全部楼层

谢谢,给我提供了切入点
68_avatar_middle
ico_lz  楼主| 发表于 2015-12-29 09:04:53 | 显示全部楼层
Debug 发表于 2015-12-28 23:37
2# 说的是一种方法,也可以使用 FindWindow 来查找目标窗口,都可以实现的

全屏窗口如何通过FindWindow来找,无法知道全屏窗口的标题或者其它窗口信息来传给FindWindow,PPT全屏放映下的窗口和非全屏放映下的窗口应该不是同一个窗口吧?
73_avatar_middle
在线会员 发表于 2015-12-29 16:46:50 | 显示全部楼层

81_avatar_middle
online_moderator 发表于 2015-12-30 15:48:00 | 显示全部楼层
luckyboylch 发表于 2015-12-29 09:04
全屏窗口如何通过FindWindow来找,无法知道全屏窗口的标题或者其它窗口信息来传给FindWindow,PPT全屏放 ...

事先使用 spy++ 看下就知道了,正因为不是一个窗口,所以类的名字什么的都不同,所以 sp++ 就能区分啦

评分

参与人数 1热心值 +1 收起 理由
68_avatar_small luckyboylch + 1

查看全部评分

68_avatar_middle
ico_lz  楼主| 发表于 2015-12-30 23:04:07 | 显示全部楼层
Debug 发表于 2015-12-30 15:48
事先使用 spy++ 看下就知道了,正因为不是一个窗口,所以类的名字什么的都不同,所以 sp++ 就能区分啦

一开始主要是不知道当窗口全屏时如何调出spy++来查看全屏窗口的信息(任务栏被隐藏了不知道如何调出spy++)才提了这个问题,突然发现可以先通过快捷键调出任务管理器窗口来让底部任务栏显示出来,这时候就可以用spy++来查看全屏窗口信息了。之前一直用的就是FindWindow来获取句柄的,由于以为全屏状态下无法调出spy++来查看全屏窗口的信息便猜可能有什么专门的函数可以获取全屏窗口的句柄.  智伤捉急啊!不管怎么说还是谢谢了!
04_avatar_middle
在线会员 发表于 2015-12-31 10:05:51 | 显示全部楼层
bool IsForegroundFullscreen ()
{
        bool bFullscreen = false;//存放当前激活窗口是否是全屏的,true表示是,false表示不是
        HWND hWnd;
        RECT rcApp;
        RECT rcDesk;

        hWnd = GetForegroundWindow ();//获取当前正在与用户交互的当前激活窗口句柄

        if ((hWnd != GetDesktopWindow ()) && (hWnd != GetShellWindow ()))//如果当前激活窗口不是桌面窗口,也不是控制台窗口
        {
                GetWindowRect (hWnd, &rcApp);//获取当前激活窗口的坐标
                GetWindowRect (GetDesktopWindow(), &rcDesk);//根据桌面窗口句柄,获取整个屏幕的坐标

                if (rcApp.left <= rcDesk.left && //如果当前激活窗口的坐标完全覆盖住桌面窗口,就表示当前激活窗口是全屏的
                        rcApp.top <= rcDesk.top &&
                        rcApp.right >= rcDesk.right &&
                        rcApp.bottom >= rcDesk.bottom)
                {

                        TCHAR szTemp[100];

                        if (GetClassName (hWnd, szTemp, sizeof (szTemp)) > 0)//如果获取当前激活窗口的类名成功
                        {
                                if (strcmp(szTemp, "WorkerW") != 0)//如果不是桌面窗口的类名,就认为当前激活窗口是全屏窗口
                                        bFullscreen = true;
                        }
                        else bFullscreen = true;//如果获取失败,就认为当前激活窗口是全屏窗口
                }
        }//如果当前激活窗口是桌面窗口,或者是控制台窗口,就直接返回不是全屏

        return bFullscreen;
}
网上的判断全屏的方式。

评分

参与人数 1热心值 +1 收起 理由
68_avatar_small luckyboylch + 1

查看全部评分

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-27 16:22

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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