Delphi判断是否有全屏程序
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.
自我改编代码:
function IsFullScreen: Boolean; forward;
function GetClassNameFX(h: HWND): string; forward; function GetClassNameFX(h: HWND): string;
var
ClassName: PChar;
begin
Result := '';
GetMem(ClassName, 256);
try
GetClassName(h, ClassName, 256); Result := string(ClassName); finally
FreeMem(ClassName);
end;
end; function IsFullScreen: Boolean;
var
h, h1, h2, h3: HWND;
r, r1: TRect;
rk, rg, r1k, r1g: Integer;
s: string;
begin Result := False; h := Windows.GetDesktopWindow();
h1 := GetForegroundwindow;
h2 := FindWindow('Progman', nil);
h3 := FindWindow('WorkerW', nil); if (h1 = h2) or (h1 = h3) or (h1 = h) then
Exit;
if h3 > 0 then
begin
s := GetClassNameFX(h1);
if (s = 'WorkerW') or (s = 'Progman') then
Exit;
end; GetWindowRect(h, r);
rk := r.Right - r.Left;
rg := r.Bottom - r.Top; GetWindowRect(h1, r1);
r1k := r1.Right - r1.Left;
r1g := r1.Bottom - r1.Top; if (rk = r1k) and (rg = r1g) and (r.BottomRight.X = r1.BottomRight.X) then
Result := True;
end;
不喜勿喷,这是我自己花了很长时间才想出来的
Delphi判断是否有全屏程序的更多相关文章
- 从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- [转]Android WebView播放视频(包括全屏播放),androidwebview
Android WebView播放视频(包括全屏播放),androidwebview 最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里 ...
- 全屏显示网页FULLSCREEN API
第一次看到应用 Fullscreen API 全屏显示网页,是 FaceBook 中的照片放大.作为一个比较新的 API,目前只有 Safari.Chrome 和 FireFox 三种浏览器支持该特性 ...
- 浏览器全屏之requestFullScreen全屏与F11全屏
一.简介 浏览器全屏有两种方式,一种是HTML5新增的requestFullscree全屏,另一种是摁F11实现的全屏,本文将详解两种全屏的特点以及实现代码. 二.requestFullscreen全 ...
- 12、Libgdx的图像之全屏和垂直同步
(官网:www.libgdx.cn) 检测当前设置 判断是否设置全屏,可以通过如下方式: boolean fullscreen = Gdx.graphics.isFullscreen(); 设置全屏和 ...
- H5实现全屏与F11全屏
最近做项目用到全屏,现总结一下全屏: 1.局部全屏:H5全屏和F11有区别,在这种情况下判断全屏只需要通过H5全屏属性,无论全屏后有无滚动条都可判断. /** * [isFullscreen 判断浏览 ...
- js控制全屏及退出全屏
js控制全屏及退出全屏,网上很多代码例子,我这里需求和标准的有点出入: 1.当用户点击某按钮,触发iframe下的页面全屏. 2.不允许用户退出全屏. 解决第一点,触发全屏可以按照网上的例子,代码如下 ...
- Android之针对WebView的全屏播放
转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...
- x5webview 自定义全屏界面
集成X5WEBVIEW可以选择全屏模式为标准全屏还是x5全屏,而不设置默认为false. 首先看看标准全屏的基本设置, if (webView.getX5WebViewExtension() != n ...
随机推荐
- ip route 命令详解
linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...
- Windows Server 2012 R2 无法启用Microsoft .NET Framework 3.5 功能
1 在新windows 2012 R2 上安装SQL 2014 ,提示需要安装 .NET Framework 3.5 2 在添加角色和功能--功能--.NET Framework 3.5,然后失败 3 ...
- Error: Could not find gradle wrapper within Android SDK. Might need to update your Android SDK. Looked here: C:\Users\Administrator\AppData\Local\Android\sdk\tools\templates\gradle\wrapper
在Windows7上运行 “cordova build Android” 报错,如下: C:\test\hello> cordova build androidANDROID_HOME=C:\U ...
- iOS NSUserDefaults
一.介绍 NSUserDefaults适合存储请练级的本地数据,对于一些简单的数据(NSString类型)来说是首选,但是如果我们自定义了一个对象,对象保存的是一些信息,这是就不能直接存储到NSUse ...
- servlet的执行过程简介(从tomcat服务器和web应用的角度)
该链接详解htttp请求和响应 http://www.cnblogs.com/goxcheer/p/8424175.html 1.web应用工程发布到tomcat服务器 2.客户端访问某个web资源, ...
- 6.6安装编译安装zabbix3.2
添加yum源 get -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #安装阿里云y ...
- MySQL多表查询,pymysql模块。
一 多表查询: 首先什么是多表查询: 我们在实际工作中,不可能把数据都存入一个表中,那么又需要这些表之间有一定的关联,因为表与表之间的数据是相关联的,所以就要用到我们的外键将多表连接到一起,那么我们更 ...
- gt,gte,lt,lte缩写的含义
gt: greater than 大于 gte: greater than or equal 大于等于 lt: less than 小于 lte: less than or equal 小于等于
- mogoDB工具选择及连接<一>
最近在某微服务项目中需要用到mogoDB 原因是:开源免费.适合互联网公司.大数据量情况下性能比mysql好 咨询过为啥不用oracle,原因你懂得 --费用 好,言归正传: 1.选择工具,使用工具是 ...
- 【Git使用】sourcetree跳过注册的方法(转)
当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...