Full screen检测方法

在Windows环境下,检测全屏应用程序是一项挑战。本文介绍了两种方法:一是检查窗口角点的hWnd,但此方法对带有控制条的全屏应用不适用;二是注册Desktop Toolbars监听ABN_FULLSCREENAPP消息。然而,方法一对于IE全屏模式外的其他情况并不奏效,而方法二提供了一种更可靠的解决方案。
摘要由CSDN通过智能技术生成

Windows下经常会遇到这样一个问题,检测是否有应用程序处于全屏状态,如果有,则需要做一些特别动作。

笔者尝试过不同的方法,

方法一,检测四个角点的hWnd,看他们是否是同一个window,通常对于播放器这种应用程序处于全屏时,会带有一个进度控制条,导致了四个角点属于两个不同的window。

方法二,注册Desktop   Toolbars,当有全屏幕程序打开或者关闭的时候都会有ABN_FULLSCREENAPP消息通知,在收到后作处理即可。

 

下面分别列举这两种方法:

方法一:

bool   IsFullScreen()
{
    HWND   pWnd1   =   NULL;
    HWND   pWnd2   =   NULL;
    HWND   pWnd3   =   NULL;
    HWND   pWnd4   =   NULL;

    int iCx=GetSystemMetrics(SM_CXSCREEN);
    int iCy=GetSystemMetrics(SM_CYSCREEN);

    POINT   pt1;
    pt1.x   =   1;
    pt1.y   =   1;
    POINT   pt2;
    pt2.x   =   1;
    pt2.y   =   iCy-1;
    POINT   pt3;
    pt3.x   =   iCx-1;
    pt3.y   =   1;
    POINT   pt4;
    pt4.x   =   iCx-1;
    pt4.y   =   iCy-1;

    pWnd1   =   Windo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import sys import random import pygame from dust import Dust def check_keydown_events(event, robot): if event.key == pygame.K_RIGHT: # move right robot.moving_right = True elif event.key == pygame.K_LEFT: # move left robot.moving_left = True def check_keyup_events(event, robot): if event.key == pygame.K_RIGHT: robot.moving_right = False elif event.key == pygame.K_LEFT: robot.moving_left = False def check_events(robot): # respond to keyboard and mouse item # supervise keyboard and mouse item for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: check_keydown_events(event, robot) elif event.type == pygame.KEYUP: check_keyup_events(event, robot) def update_screen(ai_settings, screen, dusts, robot,detector): # fill color 填充颜色 screen.fill(ai_settings.bg_color) # check robot and dust collisions check_robot_dust_collisions(robot, dusts) # draw the dusts dusts.draw(screen) # draw the robot robot.blitme() # draw the detector detector.blitme() # visualiaze the window pygame.display.flip() def create_dust(ai_settings, screen, dusts): """Create dust, and place it in the room.""" dust = Dust(ai_settings, screen) dust.rect.x = random.randint(50, ai_settings.screen_width - 50) dust.rect.y = random.randint(50, ai_settings.screen_height - 50) dusts.add(dust) def create_room(ai_settings, screen, dusts): """Create a full room of dusts.""" for mine_number in range(ai_settings.dust_number): create_dust(ai_settings, screen, dusts) def check_robot_dust_collisions(robot, dusts): """Respond to robot-dust collisions.""" # Remove any robot and dusts that have collided. pygame.sprite.spritecollide(robot, dusts, True, None)
最新发布
07-11
这段代码是一个基于pygame库开发的小游戏,其中包含了一些与键盘和鼠标交互的事件处理函数,以及更新游戏画面的函数。同时还包括了创建尘埃和检测机器人与尘埃碰撞的函数。 在这个游戏中,你可以控制一个机器人通过按下键盘上的左右箭头键来移动机器人。游戏窗口中有一些随机生成的尘埃,你需要避免机器人与尘埃发生碰撞。 代码中的`check_keydown_events`函数用于检测按键按下事件,如果按下的是右箭头键,则设置机器人的向右移动状态为True;如果按下的是左箭头键,则设置机器人的向左移动状态为True。 `check_keyup_events`函数用于检测按键释放事件,如果释放的是右箭头键,则设置机器人的向右移动状态为False;如果释放的是左箭头键,则设置机器人的向左移动状态为False。 `check_events`函数是一个事件处理函数,用来监控键盘和鼠标事件。当检测到窗口关闭事件时,调用`sys.exit()`函数退出游戏;当检测到按键按下事件时,调用`check_keydown_events`函数处理按键按下事件;当检测到按键释放事件时,调用`check_keyup_events`函数处理按键释放事件。 `update_screen`函数用于更新游戏窗口的画面。首先使用`screen.fill()`函数填充窗口背景颜色,然后检测机器人与尘埃的碰撞情况,接着绘制尘埃,机器人和探测器的图像,并调用`pygame.display.flip()`函数刷新窗口。 `create_dust`函数用于创建尘埃,并将其放置在房间中的随机位置。 `create_room`函数用于创建一个满屏的尘埃房间,它会多次调用`create_dust`函数来创建多个尘埃。 `check_robot_dust_collisions`函数用于检测机器人与尘埃的碰撞情况,并移除发生碰撞的尘埃。 以上就是这段代码的主要功能和实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值