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 ...
随机推荐
- but was actually of type 'com.sun.proxy.$Proxy101' 注入问题
最近在用springboot搭建项目框架时,遇到了如下错误,查询了一番,原来是没有引入spring框架的aop包导致: 问题: ERROR o.s.test.context.TestContextMa ...
- python 实现排序算法(三)-选择排序和冒泡排序
#/usr/bin/env python #coding:utf-8 #@auther="livermorium" ''' 选择排序 从数据中选择最小值,排在位置首位 再从剩余未排 ...
- 11 vim文本编辑器
和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...
- C#的两种类据类型:值类型和引用类型
注:引用类型相等赋值是地址赋值,不是值赋值. 什么是值类型,什么是引用类型 概念:值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基类为Objcet 值类 ...
- redis 过期时间与缓存
设置过期时间 redis对于存储的键值可以设置过期时间,对于过期了的键值,redis会自动删除. > OK > get price " > expire price (in ...
- java重写LinkedList
LinkedList重写类LinkList.java: import java.util.LinkedList;import java.util.List; public class LinkList ...
- css hack 用法注意
CSS hack 分类:CSS属性前缀法.选择器前缀法以及IE条件注释法 1.属性前缀法(即类内部Hack):例如 IE6能识别下划线""和星号" * ",IE ...
- js-杂记
js可计算传值 <p>点击按钮计算 x 的值.</p> <button onclick="myFunction()">点击这里</butt ...
- jdk src 学习 Threadlocal
示例: import java.io.Serializable; public class TestThreadLocal implements Serializable { /** * */ pri ...
- es 测试代码
测试代码 PUT test/doc/1 { "num": 1.0 } PUT test/doc/2 { "num": 2.0 } POST _scripts/j ...