自己写的判断当前活动窗口是否是全屏状态

//判断屏幕上的一点(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;
}

你可能感兴趣的:(C/C++)