Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Исследователь
316 / 315 / 24
Регистрация: 06.04.2011
Сообщений: 870
1

Падение на PowerReadFriendlyName()

20.04.2011, 23:51. Показов 845. Ответов 0
Метки нет (Все метки)

Есть задача: перечислить все существующие схемы питания "семерки". Пробовал EnumPowrSchemes, но она для ХР и возвращает иной список, чем можно увидеть через панель управления. Начиная с висты, используется PowerEnumerate. Хорошо, ее и будем использовать. Сразу скажу, что использую компилятор MinGW + IDE Relo. Т.к. в стандартных хидерах нет объявления этих функций, то грузим их напрямую из powrprof.dll. "Валится" на PowerReadFriendlyName, до MessageBox не доходит. PowerEnumerate отрабатывает как надо. В чем проблема?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
typedef DWORD (*POWERENUMERATE)(HKEY, GUID*, GUID*, POWER_DATA_ACCESSOR, ULONG, UCHAR*, DWORD*);
typedef DWORD (*POWERREADFRIENDLYNAME)(HKEY, GUID*, GUID*, GUID*, UCHAR*, DWORD*);
...
 
HMODULE hModule = LoadLibrary(_T("powrprof.dll"));
if(!hModule) return false;
 
POWERENUMERATE PowerEnumerate = (POWERENUMERATE)GetProcAddress(hModule, "PowerEnumerate");
if(!PowerEnumerate) return false;
 
POWERREADFRIENDLYNAME PowerReadFriendlyName = (POWERREADFRIENDLYNAME)GetProcAddress(hModule, "PowerReadFriendlyName");
if(!PowerReadFriendlyName) return false;
 
GUID SchemeGuid;
ULONG index = 0;
DWORD BufferSize = sizeof(GUID);
TCHAR pDataBuf[MAX_PATH];
DWORD dwSize = MAX_PATH;
 
while(ERROR_SUCCESS == PowerEnumerate(NULL, NULL, NULL, ACCESS_SCHEME, index, (PUCHAR)&SchemeGuid, &BufferSize)) {
    //PowerReadFriendlyName(NULL, &SchemeGuid, NULL, NULL, NULL, &dwSize);
    //pDataBuf = (PUCHAR)LocalAlloc(LMEM_MOVEABLE|LMEM_ZEROINIT, dwSize);
    ZeroMemory(pDataBuf, MAX_PATH);
    PowerReadFriendlyName(NULL, &SchemeGuid, NULL, NULL, (PUCHAR)pDataBuf, &dwSize);
 
    MessageBox(0, (TCHAR*)pDataBuf, 0, 0);
 
    LocalFree(pDataBuf);
    index++;
}
 
FreeLibrary(hModule);
Добавлено через 1 час 20 минут
Это решено - забыл про _stdcall.
Вопрос другой, "вдогонку": почему не совпадают GUID'ы, полученные PowerEnumerate() и PowerGetActiveScheme() ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2011, 23:51
Ответы с готовыми решениями:

Ошибка: LNK2019: ссылка на неразрешенный внешний символ PowerReadFriendlyName в функции
Здравствуйте. Изучаю WinAPI. Хочу сделать класс который будет хронить список всех существующих схем...

Падение
Здравствуйте. Почему такое может быть? Был сайт по запросу "слон" на 18 месте. Накупил в...

Падение скорости
Доброго времени суток, около недели назад резко произошло падение скорости в браузере, и как после...

Падение мяча
Мяч должен рандомно появляться по оси x и к этому рандому должно применяться падение мяча по оси y...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2011, 23:51

падение соединения
Здравствуйте , такая проблема. В безопасном режиме с загрузкой сетевых драйверов интернет качает со...

Падение фпс
Добрый день. Столкнулся с такой проблемой: после нескольких минут пребывания в играх (cs go, the...

Падение Release
Всем привет. Есть код по конвертированию float в строку char* #include <sstream> using...

Падение с отскоком
тело падает с высоты H без начальной скорости и встречает на своем пути закрепл. площадку,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.