//判断屏幕上的一点(niX,niY)所属的process id是否和WDProcessID相同
//返回true表示相同,返回false表示不同
bool CheckSame(DWORD WDProcessID,int niX,int niY)
{
bool lbRet = false;
POINT lpt={niX,niY};
HWND lhwnd= (HWND)WindowFromPoint (lpt);
HWND lHdesktop= (HWND)GetDesktopWindow();
HWND lHparent=0;
for(;;)
{ // 查找窗口的主窗口
lHparent= ::GetParent(lhwnd);
if( lHparent==lHdesktop || lHparent==0 )
break;
lhwnd=lHparent;
}
DWORD lWDpid=0;
GetWindowThreadProcessId( lhwnd, &lWDpid );
if (lWDpid == WDProcessID)
{
lbRet = true;
}
else
{
lbRet = false;
}
return lbRet;
}
//判断当前活动窗口是否全屏
BOOL IsFullScreenActive(void)
{
/*
这个函数获取屏幕4角的窗口的进程句柄,判断与激活句柄是否相等的方式来判断是否全屏程序。
特别的,对 IE 之类的多标签多进程程序,子窗口的进程会和主窗口不同。需要获取窗口的主窗口来对比才可以
*/
bool lbRet = false;
HWND lHforewnd=::GetForegroundWindow();
DWORD lWDProcessID;
GetWindowThreadProcessId( lHforewnd, &lWDProcessID );
/// 获取屏幕大小
int iCx=GetSystemMetrics(SM_CXSCREEN);
int iCy=GetSystemMetrics(SM_CYSCREEN);
do
{
if( CheckSame(lWDProcessID,0,0) ==false)
break;
if( CheckSame(lWDProcessID,iCx-1,0) ==false)
break;
if( CheckSame(lWDProcessID,0,iCy-1) ==false)
break;
if( CheckSame(lWDProcessID,iCx-1,iCy-1) ==false)
break;
lbRet = true;
} while (false);
return lbRet;
}
自己写的判断当前活动窗口是否是全屏状态
最新推荐文章于 2024-08-23 15:12:59 发布