DWORD DisableDisplayPowerWin7(bool bDisable) { DWORD dwRet = 0; static const GUID id = { 0x9fb78f01, 0xc2c4, 0x4cb5, { 0x80, 0x31, 0xdc, 0x63, 0xc8, 0xa3, 0x62, 0x1 } }; static GUID* OriginalValue = NULL; static BOOL bModify = FALSE; DWORD (WINAPI *pPowerGetActiveScheme)(HKEY UserRootPowerKey,GUID** ActivePolicyGuid) = NULL; DWORD (WINAPI *pPowerReadFriendlyName)(HKEY RootPowerKey,const GUID* SchemeGuid,const GUID* SubGroupOfPowerSettingsGuid,const GUID* PowerSettingGuid,PUCHAR Buffer,LPDWORD BufferSize) = NULL; DWORD (WINAPI *pPowerDuplicateScheme)(HKEY RootPowerKey,const GUID* SourceSchemeGuid,GUID** DestinationSchemeGuid) = NULL; DWORD (WINAPI *pPowerWriteFriendlyName)(HKEY RootPowerKey,const GUID* SchemeGuid,const GUID* SubGroupOfPowerSettingsGuid,const GUID* PowerSettingGuid,UCHAR* Buffer,DWORD BufferSize) = NULL; DWORD (WINAPI *pPowerWriteACValueIndex)(HKEY RootPowerKey,const GUID* SchemeGuid,const GUID* SubGroupOfPowerSettingsGuid,const GUID* PowerSettingGuid,DWORD AcValueIndex) = NULL; DWORD (WINAPI *pPowerWriteDCValueIndex)(HKEY RootPowerKey,const GUID* SchemeGuid,const GUID* SubGroupOfPowerSettingsGuid,const GUID* PowerSettingGuid,DWORD DcValueIndex) = NULL; DWORD (WINAPI *pPowerSetActiveScheme)(HKEY UserRootPowerKey,const GUID* SchemeGuid) = NULL; DWORD (WINAPI *pPowerDeleteScheme)(HKEY RootPowerKey,const GUID* SchemeGuid) = NULL; GUID* pid = (GUID*)&id; WCHAR szTmp[MAX_PATH] = {0}; DWORD dwSize = 0; HMODULE hLib = ::LoadLibrary(_T("PowrProf.dll")); if (NULL == hLib) { dwRet = GetLastError(); goto _Exit; } pPowerGetActiveScheme = (DWORD (WINAPI *)(HKEY,GUID **))::GetProcAddress(hLib, "PowerGetActiveScheme"); pPowerReadFriendlyName = (DWORD (WINAPI *)(HKEY RootPowerKey,const GUID* SchemeGuid,const GUID* SubGroupOfPowerSettingsGuid,const GUID* PowerSettingGuid,PUCHAR Buffer,LPDWORD BufferSize))::GetProcAddress(hLib, "PowerReadFriendlyName"); pPowerDuplicateScheme = (DWORD (WINAPI *)(HKEY,const GUID *,GUID **))::GetProcAddress(hLib, "PowerDuplicateScheme"); pPowerWriteFriendlyName = (DWORD (WINAPI *)(HKEY,const GUID *,const GUID *,const GUID *,UCHAR *,DWORD))::GetProcAddress(hLib, "PowerWriteFriendlyName"); pPowerWriteACValueIndex = (DWORD (WINAPI *)(HKEY,const GUID *,const GUID *,const GUID *,DWORD))::GetProcAddress(hLib, "PowerWriteACValueIndex"); pPowerWriteDCValueIndex = (DWORD (WINAPI *)(HKEY,const GUID *,const GUID *,const GUID *,DWORD))::GetProcAddress(hLib, "PowerWriteDCValueIndex"); pPowerSetActiveScheme = (DWORD (WINAPI *)(HKEY,const GUID *))::GetProcAddress(hLib, "PowerSetActiveScheme"); pPowerDeleteScheme = (DWORD (WINAPI *)(HKEY,const GUID *))::GetProcAddress(hLib, "PowerDeleteScheme"); if (pPowerGetActiveScheme == NULL || pPowerReadFriendlyName == NULL || pPowerDuplicateScheme == NULL || pPowerWriteFriendlyName == NULL || pPowerWriteACValueIndex == NULL || pPowerWriteDCValueIndex == NULL || pPowerSetActiveScheme == NULL || pPowerDeleteScheme == NULL) { dwRet = GetLastError(); goto _Exit; } if (bDisable) { if (!bModify) { if (NULL != OriginalValue) { LocalFree(OriginalValue); OriginalValue = NULL; } pPowerGetActiveScheme(NULL, &OriginalValue); dwSize = MAX_PATH*sizeof(WCHAR); dwRet = pPowerReadFriendlyName(NULL, OriginalValue, NULL, NULL, (PUCHAR)szTmp, &dwSize); if (0 != lstrcmpiW(szTmp, L"FUCKPOWER")) { dwRet = pPowerDuplicateScheme(NULL, OriginalValue, &pid); if ((0 != dwRet) && (183 != dwRet)) { LocalFree(OriginalValue); OriginalValue = NULL; goto _Exit; } pPowerWriteFriendlyName(NULL, &id, NULL, NULL, (UCHAR*)L"FUCKPOWER", (lstrlenW(L"FUCKPOWER")+1)*2); } //显示器 pPowerWriteACValueIndex(NULL, &id, &GUID_VIDEO_SUBGROUP, &GUID_VIDEO_POWERDOWN_TIMEOUT, 0); pPowerWriteDCValueIndex(NULL, &id, &GUID_VIDEO_SUBGROUP, &GUID_VIDEO_POWERDOWN_TIMEOUT, 0); //硬盘 pPowerWriteACValueIndex(NULL, &id, &GUID_DISK_SUBGROUP, &GUID_DISK_POWERDOWN_TIMEOUT, 0); pPowerWriteDCValueIndex(NULL, &id, &GUID_DISK_SUBGROUP, &GUID_DISK_POWERDOWN_TIMEOUT, 0); //睡眠 pPowerWriteACValueIndex(NULL, &id, &GUID_SLEEP_SUBGROUP, &GUID_STANDBY_TIMEOUT, 0); pPowerWriteDCValueIndex(NULL, &id, &GUID_SLEEP_SUBGROUP, &GUID_STANDBY_TIMEOUT, 0); //待机 pPowerWriteACValueIndex(NULL, &id, &GUID_SLEEP_SUBGROUP, &GUID_HIBERNATE_TIMEOUT, 0); pPowerWriteDCValueIndex(NULL, &id, &GUID_SLEEP_SUBGROUP, &GUID_HIBERNATE_TIMEOUT, 0); dwRet = pPowerSetActiveScheme(NULL, &id); if (0 != dwRet) { LocalFree(OriginalValue); OriginalValue = NULL; pPowerDeleteScheme(NULL, &id); goto _Exit; } bModify = TRUE; } } else { if (bModify) { bModify = FALSE; if (NULL != OriginalValue) { if (*OriginalValue != id) { pPowerSetActiveScheme(NULL, OriginalValue); pPowerDeleteScheme(NULL, &id); } LocalFree(OriginalValue); OriginalValue = NULL; } else { pPowerDeleteScheme(NULL, &id); } } } _Exit: if (NULL != hLib) { ::FreeLibrary(hLib); } return dwRet; }
keivin2006 认证博客专家 C/C vc/qt 音视频 一名c/c++/vc/qt 的小学生,“精通”c,“精通”c++,“精通”vc++,“精通”php,“精通”qt,“精通”java,“精通”python,“精通”c#,“精通”...! 编不下去了,只要见过名字的都我“精通”....为哈,因为我现在是csdn“砖家”了!本人qq: 88520350 qq学习群:930432714 (C/C++/QT/VC学习交流群) 海量学习资料都分享在群里指点学习方向,掌握学习要点,快速提高技术水平, 技术分享,共同学习!