Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "shutdown.h"
- const BYTE PowerMode = 0xD6;
- const DWORD PowerOn = 0x01;
- const DWORD PowerOff = 0x04;
- struct MonitorDesc
- {
- HANDLE hdl;
- RECT rc;
- DWORD lastTick;
- DWORD power;
- };
- BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
- {
- std::vector<MonitorDesc>* pMonitors = reinterpret_cast< std::vector<MonitorDesc>* >(dwData);
- DWORD nMonitorCount;
- if(GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &nMonitorCount))
- {
- PHYSICAL_MONITOR* pMons = new PHYSICAL_MONITOR[nMonitorCount];
- if(GetPhysicalMonitorsFromHMONITOR(hMonitor, nMonitorCount, pMons))
- {
- for(DWORD i=0; i<nMonitorCount; i++)
- {
- MonitorDesc desc;
- desc.hdl = pMons[i].hPhysicalMonitor;
- desc.rc = *lprcMonitor;
- pMonitors->push_back(desc);
- }
- }
- delete[] pMons;
- }
- return TRUE;
- }
- void MonitorSwitch(MonitorDesc& monitor, DWORD mode)
- {
- if(monitor.power == mode)
- return;
- SetVCPFeature(monitor.hdl, PowerMode, mode);
- monitor.power = mode;
- }
- int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
- {
- DWORD IdleTime = 10 * 60 * 1000;
- std::vector<MonitorDesc> monitors;
- EnumDisplayMonitors(NULL, NULL, &MonitorEnumProc, reinterpret_cast<LPARAM>(&monitors));
- DWORD tick = GetTickCount();
- for(auto& monitor : monitors)
- {
- monitor.power = PowerOn;
- monitor.lastTick = tick;
- }
- POINT lastPos;
- GetCursorPos(&lastPos);
- while(1)
- {
- DWORD tick = GetTickCount();
- POINT pt;
- GetCursorPos(&pt);
- bool move = false;
- if(pt.x != lastPos.x || pt.y != lastPos.y)
- {
- move = true;
- }
- lastPos = pt;
- if(move)
- {
- for(auto& monitor : monitors)
- {
- if(pt.x >= monitor.rc.left && pt.x < monitor.rc.right && pt.y >= monitor.rc.top && pt.y < monitor.rc.bottom)
- {
- monitor.lastTick = tick;
- break;
- }
- }
- }
- for(auto& monitor : monitors)
- {
- DWORD delta = (tick - monitor.lastTick);
- if(delta >= IdleTime)
- {
- // wyłącz ekran
- if(monitor.power == PowerOn)
- {
- MonitorSwitch(monitor, PowerOff);
- }
- }
- else
- {
- // włącz ekran
- if(monitor.power == PowerOff)
- {
- MonitorSwitch(monitor, PowerOn);
- }
- }
- }
- Sleep(50);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement