如何判断当前是否全屏程序

 我来答
河南新华电脑学院
2017-11-16 · 百度认证:河南新华电脑学院有限公司官方账号
河南新华电脑学院
河南新华电脑学院隶属于IT教育知名品牌——新华互联网科技,是具有一定影响力的直营电脑教育品牌。
向TA提问
展开全部
static BOOL IsFullScreenActive()
{
/*
这个函数获取屏幕4角的窗口的进程句柄,判断与激活句柄是否相等的方式来判断是否全屏程序。
特别的,对 IE 之类的多标签多进程程序,子窗口的进程会和主窗口不同。需要获取窗口的主窗口来对比才可以
*/
struct IsNotSameProcessID
{
IsNotSameProcessID( DWORD id ) : processID(id){}
bool operator()( int x, int y )
{
POINT pt={x,y};
HWND xwnd=WindowFromPoint(pt);
HWND desktop=GetDesktopWindow();
HWND parent=0;
for(;;){ // 查找窗口的主窗口
parent=GetParent( xwnd );
if( parent==desktop || parent==0 )
break;
xwnd=parent;
}
DWORD pid=0;
GetWindowThreadProcessId( xwnd, &pid );
return ( pid!=processID );
}
DWORD processID;
};
HWND wnd=::GetForegroundWindow();
DWORD processID;
GetWindowThreadProcessId( wnd, &processID );
/// 获取屏幕大小
int iCx=GetSystemMetrics(SM_CXSCREEN);
int iCy=GetSystemMetrics(SM_CYSCREEN);
IsNotSameProcessID checker( processID );
if( checker(0,0) )
return FALSE;
if( checker(iCx-1,0) )
return FALSE;
if( checker(0,iCy-1) )
return FALSE;
if( checker(iCx-1,iCy-1) )
return FALSE;
return TRUE;
}
}
匿名用户
2017-11-17
展开全部
以下代码供参考:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667unit 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.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式