Delphi中如何判断是否有程序全屏


本文整理自网络,侵删。

 
方法一:
  定时调用GetForegroundWindow获取最前端的窗口句柄,然后判断该窗口宽度高度是否等于屏幕的宽度高度。代码如下,大家参考:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  topWindow: THandle;
  wRect: TRect;
begin
  topWindow := GetForegroundWindow;
  GetWindowRect(topWindow, wRect);
  if (wRect.Bottom = Screen.Height) and (wRect.Right = Screen.Width) then begin
    Memo1.Lines.Add('有全屏程序运行');
    //做你爱做的事……
  end else begin
    Memo1.Lines.Add('无全屏程序运行');
    //做你爱做的事……
  end;
end;

这种方法真是弱啊弱,看看第二种方法吧

方法二:
  第二种方法是通过SHAppBarMessage函数给系统发送一个监听消息,用于监听一些关于AppBar的信息,该消息的第二个参数里有一个属性是用于指定回调消息的,程序中定义一个消息码用于监听。当传回的消息的wParam是ABN_FULLSCREENAPP 时判断lParam为真假来判断是进入全屏还是退出全屏。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,
  ShellAPI; // 要引用此单元

const
  WM_APPBAR_MESSAGE = WM_USER + 1;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    IsFullScreenAppRun: Boolean; //放个全局变量用于记录
    procedure WMAppBarMessage(var Msg: TMessage); message WM_APPBAR_MESSAGE;
  end;

var
  Form1: TForm1;
  AppBar_Data: APPBARDATA;



implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SHAppBarMessage(ABM_REMOVE, AppBar_Data); //窗口关闭时移除此消息
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FillChar(AppBar_Data, SizeOf(AppBar_Data), #0);
  AppBar_Data.cbSize := SizeOf(AppBar_Data);
  AppBar_Data.hWnd := Handle;
  AppBar_Data.uCallbackMessage := WM_APPBAR_MESSAGE; //指定回调消息
  SHAppBarMessage(ABM_NEW, AppBar_Data); //建立监听
end;

procedure TForm1.WMAppBarMessage(var Msg: TMessage);
var
  retCode: Cardinal ;
begin
  if Msg.Msg = WM_APPBAR_MESSAGE then begin
    if msg.WParam = ABN_FULLSCREENAPP then begin
      if msg.LParam = 1 then begin
        Memo1.Lines.Add('有全屏程序运行');
        IsFullScreenAppRun := True;
      end else if Msg.LParam = 0 then begin
        Memo1.Lines.Add('无全屏程序运行');
        IsFullScreenAppRun := False;
      end;
    end;
  end;
end;

end.

相关阅读 >>

Delphi读写ini文件加锁(独占)

Delphi 动态加载删除字体

Delphi xe6 �c使用android的zlib

Delphi textfile utf8编码读写

Delphi win32,win64用于单/多线程计数素数的整数性能比较

Delphi中ns和ms时间的获取方法

Delphi 根据年份获取年干支

Delphi 安卓获得设备 id

Delphi 合并两个 wav 文件流的函数

Delphi 数组定义

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...