Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.01.2018, 06:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию PowerEnumerate под Win64

Есть такая функция:
Код:
function PowerEnumerate(RootPowerKey : THandle; SchemeGuid : PGUID; SubGroupOfPowerSettingsGuid : PGUID; AccessFlags: POWER_DATA_ACCESSOR; Index: ULONG; var Buffer : TGUID; var BufferSize : DWORD) : DWORD; stdcall; external 'PowrProf.dll';

Вызов:
Код:
procedure TPowerPlansList.GetPowerPlans;
const
  BufferLength : DWORD = 1024;
var
  chGuid : TGUID;
  szGuid : DWORD;
  szName : DWORD;
  chName : PChar;
  stName : String;
  Idx : Integer;
  Ret : Integer;

  PowerPlan : TPowerPlan;

  iEnum : DWORD;
begin
  FItems.Clear;
  Idx := 0;

  szGuid := SizeOf(TGUID);

  GetMem(chName,BufferLength*SizeOf(Char));

  Try
    iEnum := PowerEnumerate(0{Nil},Nil,Nil,ACCESS_SCHEME,Idx,chGuid,szGuid);
    While iEnum = 0 Do
      Begin
        // Reinitialize buffer and buffer size
        // Undocumented in MSDN: even when PowerReadFriendlyName success,
        // it overwrites buffer size
        szName := BufferLength;
        ZeroMemory(chName,BufferLength*SizeOf(Char));

        Ret := PowerReadFriendlyName(Nil,@chGuid,Nil,Nil,PUCHAR(chName),@szName);
        if Ret = 0
          Then stName := StrPas(chName)
          Else
            If Not PowerReadWellKnownFriendlyName(chGuid,stName)
              Then stName := 'Unknown plan';

        PowerPlan.Index := Idx;
        PowerPlan.Guid := chGuid;
        PowerPlan.Name := stName;
        FItems.Add(PowerPlan);

        Inc(Idx);

        iEnum := PowerEnumerate(0{Nil},Nil,Nil,ACCESS_SCHEME,Idx,chGuid,szGuid);
      End;
  Finally
    FreeMem(chName,szName*SizeOf(Char));
  End;
end;

Но тут есть такой момент. Все прекрасно работает под Win32, а под Win64 возвращает ошибку (87, вроде это про неправильный параметр).
Если у кого есть мысль что в этом коде неправильно - подскажите.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter