AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Energieverwaltung von Netzwerkadaptern und USB Root Hub
Thema durchsuchen
Ansicht
Themen-Optionen

Energieverwaltung von Netzwerkadaptern und USB Root Hub

Ein Thema von delphisnoopy · begonnen am 9. Aug 2016 · letzter Beitrag vom 10. Aug 2016
Antwort Antwort
delphisnoopy

Registriert seit: 3. Aug 2016
5 Beiträge
 
#1

Energieverwaltung von Netzwerkadaptern und USB Root Hub

  Alt 9. Aug 2016, 16:04
Hallo,

ich würde gerne ein Programm schreiben um die Energieverwaltung Netzwerkadaptern und USB Geräten auszulesen und auch zu verändern. Speziell geht es dabei um die Einstellung unter Windows 7:

Geräter-Manager->Netwerkadapter->Mein-USBLAN Adapter->Energieverwaltung->"Computer kann das Gerät ausschalten, um Energie zu sparen"

bzw.

Geräter-Manager->USB-Controller->Root-Hub->Energieverwaltung->"Computer kann das Gerät ausschalten, um Energie zu sparen"

Ich habe im Beitrag http://www.delphipraxis.net/140025-n...eiberinfo.html Funktionen gefunden, um Netzwerkadapter anzuzeigen und Informationen über Ip-Adress und MAC-Adresse zu bekommen. Leider finde ich keine Auslesemöglichkeit für die Energieverwaltung.

Kann mir jemand sagen ob ich über die WMI Funktionen die Energieverwaltung lesen/setzen kann, oder ob ich hier an der komplett falschen Stelle suche?
Und außerdem wie ich das ganze auch für USB-Controller verwenden kann?

Vielen Dank schonmal!
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#2

AW: Energieverwaltung von Netzwerkadaptern und USB Root Hub

  Alt 9. Aug 2016, 16:38
Mit devcon.exe kann man die Devices kontrollieren.

Note: To change the status or configuration of a device, you must be a member of the Administrators group on the computer.

Beispiele:
Delphi-Quellcode:
function GetConsoleOutput(Command : string;
         Output, Errors : TStringList) : Boolean;
var
  Buffer : array[0..255] of Char;
  CreationFlags : DWORD;
  NumberOfBytesRead : DWORD;
  PipeErrorsRead : THandle;
  PipeErrorsWrite : THandle;
  PipeOutputRead : THandle;
  PipeOutputWrite : THandle;
  ProcessInfo : TProcessInformation;
  SecurityAttr : TSecurityAttributes;
  StartupInfo : TStartupInfo;
  Stream : TMemoryStream;
begin
  //Initialisierung ProcessInfo
  FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);

  //Initialisierung SecurityAttr
  FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
  SecurityAttr.nLength := SizeOf(TSecurityAttributes);
  SecurityAttr.bInheritHandle := True;
  SecurityAttr.lpSecurityDescriptor := nil;

  //Pipes erzeugen
  CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);
  CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0);

  //Initialisierung StartupInfo
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.hStdInput := 0;
  StartupInfo.hStdOutput := PipeOutputWrite;
  StartupInfo.hStdError := PipeErrorsWrite;
  StartupInfo.wShowWindow := SW_HIDE;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

  CreationFlags := CREATE_DEFAULT_ERROR_MODE or
                   CREATE_NEW_CONSOLE or
                   NORMAL_PRIORITY_CLASS;

  // Folgende Zeile ist nur für Delphi ab 2009 erforderlich:
  UniqueString(Command);

  if CreateProcess(nil,
                   PChar(Command),
                   nil,
                   nil,
                   True,
                   CreationFlags,
                   nil,
                   nil,
                   StartupInfo,
                   ProcessInfo) then
  begin
    Result := True;
    //Write-Pipes schließen
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsWrite);

    //Ausgabe Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil) do
      begin
         Stream.Write(Buffer, NumberOfBytesRead);
      end;
      OEMToAnsiBuff(Stream.Memory, Stream.Memory, Stream.Size); //<--------------
      Stream.Position := 0;
      Output.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeOutputRead);

    //Fehler Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil) do
      begin
         Stream.Write(Buffer, NumberOfBytesRead);
      end;
      OEMToAnsiBuff(Stream.Memory, Stream.Memory, Stream.Size);
      Stream.Position := 0;
      Errors.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeErrorsRead);

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hProcess);
  end
  else
  begin
    Result := False;
    CloseHandle(PipeOutputRead);
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsRead);
    CloseHandle(PipeErrorsWrite);
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Output : TStringList;
  Errors : TStringList;
begin
  Output := TStringList.Create;
  Errors := TStringList.Create;
  Memo1.Lines.Add('----------------------USB OFF---------------------');
  try
    if GetConsoleOutput('devcon.exe disable USB\ROOT_HUB20', Output, Errors) // USB 2.0
    then Memo1.Lines.AddStrings(Output); Memo1.Lines.Add('');
    if GetConsoleOutput('devcon.exe disable USB\ROOT_HUB30', Output, Errors) // USB 3.0
    then Memo1.Lines.AddStrings(Output);
  finally
    Output.free;
    Errors.free;
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
  Output : TStringList;
  Errors : TStringList;
begin
  Output := TStringList.Create;
  Errors := TStringList.Create;
  Memo1.Lines.Add('----------------------USB ON----------------------');
  try
    if GetConsoleOutput('devcon.exe enable USB\ROOT_HUB20', Output, Errors) // USB 2.0
    then Memo1.Lines.AddStrings(Output); Memo1.Lines.Add('');
    if GetConsoleOutput('devcon.exe enable USB\ROOT_HUB30', Output, Errors) // USB 3.0
    then Memo1.Lines.AddStrings(Output);
  finally
    Output.free;
    Errors.free;
  end;
end;
Einen Energieeffizienzdiagnose-Bericht bekommt man damit:
powercfg energy
(Administrator-Rechte erforderlich)
Mit powercfg.exe kann man sehr viel machen.
WMI hast Du selbst schon erwähnt.

Geändert von t.roller ( 9. Aug 2016 um 18:33 Uhr)
  Mit Zitat antworten Zitat
delphisnoopy

Registriert seit: 3. Aug 2016
5 Beiträge
 
#3

AW: Energieverwaltung von Netzwerkadaptern und USB Root Hub

  Alt 10. Aug 2016, 07:52
Hallo t.roller,

vielen Dank für die Antwort, aber das ist nicht ganz das, was ich suche. Ich will nicht den gesamten USB Hub deaktivieren, sondern nur die folgende Option auslesen bzw. deaktivieren:

Geräter-Manager->USB-Controller->Root-Hub->Energieverwaltung->"Computer kann das Gerät ausschalten, um Energie zu sparen"

Der USB Hub soll weiter laufen, es ist aber wichtig, dass er nicht das angeschlossene Gerät in einem bestimmten Zustand des Power Managements deaktiviertv (s. Bild im Anhang).
Angehängte Grafiken
Dateityp: png PWR_opt_win7.png (21,5 KB, 5x aufgerufen)

Geändert von delphisnoopy (10. Aug 2016 um 10:34 Uhr)
  Mit Zitat antworten Zitat
delphisnoopy

Registriert seit: 3. Aug 2016
5 Beiträge
 
#4

AW: Energieverwaltung von Netzwerkadaptern und USB Root Hub

  Alt 10. Aug 2016, 14:31
Hab mich jetzt auch etwas durch die ganzen WMI Funtionen geschlagen. Bei den WMI Klassen

Win32_NetworkAdapter bzw. Win32_USBHub

kann ich die gesuchten Devices finden, aber bei der Abfrage der Attribute

PowerManagementCapabilities und PowerManagementSupported

bekomme ich nicht die gesuchten Einstellungen, sondern nur NULL zurück...
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#5

AW: Energieverwaltung von Netzwerkadaptern und USB Root Hub

  Alt 10. Aug 2016, 14:54
PowerManagementCapabilities sind Arrays, die man entsprechend auswerten muss.
  Mit Zitat antworten Zitat
delphisnoopy

Registriert seit: 3. Aug 2016
5 Beiträge
 
#6

AW: Energieverwaltung von Netzwerkadaptern und USB Root Hub

  Alt 10. Aug 2016, 15:09
ok, kannst du vielleicht ein Beispiel geben wie ich diese auslese?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz