1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ExtCtrls, StdCtrls,
  8. ShellAPI; // 要引用此单元
  9.  
  10. const
  11. WM_APPBAR_MESSAGE = WM_USER + 1;
  12.  
  13. type
  14. TForm1 = class(TForm)
  15. Timer1: TTimer;
  16. Memo1: TMemo;
  17. procedure FormCreate(Sender: TObject);
  18. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  19. private
  20. { Private declarations }
  21. public
  22. IsFullScreenAppRun: Boolean; //放个全局变量用于记录
  23. procedure WMAppBarMessage(var Msg: TMessage); message WM_APPBAR_MESSAGE;
  24. end;
  25.  
  26. var
  27. Form1: TForm1;
  28. AppBar_Data: APPBARDATA;
  29.  
  30. implementation
  31.  
  32. {$R *.dfm}
  33.  
  34. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  35. begin
  36. SHAppBarMessage(ABM_REMOVE, AppBar_Data); //窗口关闭时移除此消息
  37. end;
  38.  
  39. procedure TForm1.FormCreate(Sender: TObject);
  40. begin
  41. FillChar(AppBar_Data, SizeOf(AppBar_Data), #0);
  42. AppBar_Data.cbSize := SizeOf(AppBar_Data);
  43. AppBar_Data.hWnd := Handle;
  44. AppBar_Data.uCallbackMessage := WM_APPBAR_MESSAGE; //指定回调消息
  45. SHAppBarMessage(ABM_NEW, AppBar_Data); //建立监听
  46. end;
  47.  
  48. procedure TForm1.WMAppBarMessage(var Msg: TMessage);
  49. var
  50. retCode: Cardinal ;
  51. begin
  52. if Msg.Msg = WM_APPBAR_MESSAGE then begin
  53. if msg.WParam = ABN_FULLSCREENAPP then begin
  54. if msg.LParam = 1 then begin
  55. Memo1.Lines.Add('有全屏程序运行');
  56. IsFullScreenAppRun := True;
  57. end else if Msg.LParam = 0 then begin
  58. Memo1.Lines.Add('无全屏程序运行');
  59. IsFullScreenAppRun := False;
  60. end;
  61. end;
  62. end;
  63. end;
  64.  
  65. end.

自我改编代码:

  1. function IsFullScreen: Boolean; forward;
  2. function GetClassNameFX(h: HWND): string; forward;
  3.  
  4. function GetClassNameFX(h: HWND): string;
  5. var
  6. ClassName: PChar;
  7. begin
  8. Result := '';
  9. GetMem(ClassName, 256);
  10. try
  11. GetClassName(h, ClassName, 256);
  12.  
  13. Result := string(ClassName);
  14.  
  15. finally
  16. FreeMem(ClassName);
  17. end;
  18. end;
  19.  
  20. function IsFullScreen: Boolean;
  21. var
  22. h, h1, h2, h3: HWND;
  23. r, r1: TRect;
  24. rk, rg, r1k, r1g: Integer;
  25. s: string;
  26. begin
  27.  
  28. Result := False;
  29.  
  30. h := Windows.GetDesktopWindow();
  31. h1 := GetForegroundwindow;
  32. h2 := FindWindow('Progman', nil);
  33. h3 := FindWindow('WorkerW', nil);
  34.  
  35. if (h1 = h2) or (h1 = h3) or (h1 = h) then
  36. Exit;
  37. if h3 > 0 then
  38. begin
  39. s := GetClassNameFX(h1);
  40. if (s = 'WorkerW') or (s = 'Progman') then
  41. Exit;
  42. end;
  43.  
  44. GetWindowRect(h, r);
  45. rk := r.Right - r.Left;
  46. rg := r.Bottom - r.Top;
  47.  
  48. GetWindowRect(h1, r1);
  49. r1k := r1.Right - r1.Left;
  50. r1g := r1.Bottom - r1.Top;
  51.  
  52. if (rk = r1k) and (rg = r1g) and (r.BottomRight.X = r1.BottomRight.X) then
  53. Result := True;
  54. end;

不喜勿喷,这是我自己花了很长时间才想出来的

Delphi判断是否有全屏程序的更多相关文章

  1. 从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  2. [转]Android WebView播放视频(包括全屏播放),androidwebview

    Android WebView播放视频(包括全屏播放),androidwebview 最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里 ...

  3. 全屏显示网页FULLSCREEN API

    第一次看到应用 Fullscreen API 全屏显示网页,是 FaceBook 中的照片放大.作为一个比较新的 API,目前只有 Safari.Chrome 和 FireFox 三种浏览器支持该特性 ...

  4. 浏览器全屏之requestFullScreen全屏与F11全屏

    一.简介 浏览器全屏有两种方式,一种是HTML5新增的requestFullscree全屏,另一种是摁F11实现的全屏,本文将详解两种全屏的特点以及实现代码. 二.requestFullscreen全 ...

  5. 12、Libgdx的图像之全屏和垂直同步

    (官网:www.libgdx.cn) 检测当前设置 判断是否设置全屏,可以通过如下方式: boolean fullscreen = Gdx.graphics.isFullscreen(); 设置全屏和 ...

  6. H5实现全屏与F11全屏

    最近做项目用到全屏,现总结一下全屏: 1.局部全屏:H5全屏和F11有区别,在这种情况下判断全屏只需要通过H5全屏属性,无论全屏后有无滚动条都可判断. /** * [isFullscreen 判断浏览 ...

  7. js控制全屏及退出全屏

    js控制全屏及退出全屏,网上很多代码例子,我这里需求和标准的有点出入: 1.当用户点击某按钮,触发iframe下的页面全屏. 2.不允许用户退出全屏. 解决第一点,触发全屏可以按照网上的例子,代码如下 ...

  8. Android之针对WebView的全屏播放

    转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...

  9. x5webview 自定义全屏界面

    集成X5WEBVIEW可以选择全屏模式为标准全屏还是x5全屏,而不设置默认为false. 首先看看标准全屏的基本设置, if (webView.getX5WebViewExtension() != n ...

随机推荐

  1. but was actually of type 'com.sun.proxy.$Proxy101' 注入问题

    最近在用springboot搭建项目框架时,遇到了如下错误,查询了一番,原来是没有引入spring框架的aop包导致: 问题: ERROR o.s.test.context.TestContextMa ...

  2. python 实现排序算法(三)-选择排序和冒泡排序

    #/usr/bin/env python #coding:utf-8 #@auther="livermorium" ''' 选择排序 从数据中选择最小值,排在位置首位 再从剩余未排 ...

  3. 11 vim文本编辑器

    和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...

  4. C#的两种类据类型:值类型和引用类型

    注:引用类型相等赋值是地址赋值,不是值赋值. 什么是值类型,什么是引用类型 概念:值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基类为Objcet 值类 ...

  5. redis 过期时间与缓存

    设置过期时间 redis对于存储的键值可以设置过期时间,对于过期了的键值,redis会自动删除. > OK > get price " > expire price (in ...

  6. java重写LinkedList

    LinkedList重写类LinkList.java: import java.util.LinkedList;import java.util.List; public class LinkList ...

  7. css hack 用法注意

    CSS hack 分类:CSS属性前缀法.选择器前缀法以及IE条件注释法 1.属性前缀法(即类内部Hack):例如 IE6能识别下划线""和星号" * ",IE ...

  8. js-杂记

    js可计算传值 <p>点击按钮计算 x 的值.</p> <button onclick="myFunction()">点击这里</butt ...

  9. jdk src 学习 Threadlocal

    示例: import java.io.Serializable; public class TestThreadLocal implements Serializable { /** * */ pri ...

  10. es 测试代码

    测试代码 PUT test/doc/1 { "num": 1.0 } PUT test/doc/2 { "num": 2.0 } POST _scripts/j ...