Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Dokumentation zum Windows-API-Code-Pack gesucht
LittleTester
myCSharp.de - Member



Dabei seit:
Beiträge: 151

Themenstarter:

Dokumentation zum Windows-API-Code-Pack gesucht

beantworten | zitieren | melden

Ich suche die Dokumentation zum Windows-API-Code-Pack. Ich würde gerne nachlesen, ob es dort eine Funktion gibt, um das Energieschema von Windows auszulesen. Scheinbar gibt es da nämlich was:
https://stackoverflow.com/a/7457150

Auf der verlinkten Seite von Microsoft stehen zwar die Funktionen, aber nicht, wie ich diese anwenden muss. Keine Beispiele, nix.
https://learn.microsoft.com/de-de/windows/win32/power/power-management-functions?redirectedfrom=MSDN

Im Git-Repository gibt es zwar unter anderem eine Demo-App unter source/Samples/PowerMgmtDemo/CS/, aber mit der kann ich nichts anfangen und in der Hilfedatei unter documentation/Windows API Code Pack Help.chm gibt es zwar ein Inhaltsverzeichnis, aber wenn man sich da durch klickt erscheint im rechten Fenster kein Inhalt.

Generell soll das API-Code-Pack mächtig und hilfreich sein, so dass sich das wohl echt lohnt die Funktionen da drin zu kennen und anwenden zu können.

Vielleicht noch als Randnotiz:
Ich habe bereits funktionierenden Code, aber der funktioniert nur, wenn die Anwendung explizit als Administrator aufgerufen wird. (Mit Adminrechten am System angemeldet zu sein reicht nicht. Gbit eine Exception)


public static string GetSystemEnergySettingState()
{
    var searcher = new ManagementObjectSearcher(@"\\.\root\cimv2\power", "SELECT * FROM Win32_PowerPlan WHERE IsActive = True");
    using ManagementObjectCollection managementObjectCollection = searcher.Get();
    ManagementObject managementObject = managementObjectCollection.OfType<ManagementObject>().First();
    string SystemEnergySettingState = managementObject["ElementName"].ToString() ?? "Default";
    return SystemEnergySettingState;
}

Das gleiche Problem hatte ich mal, als ich auslesen wollte, ob Bitlocker aktiviert ist oder nicht. Damals bin ich dann auf den verlinkten Code, basierend auf dem Windows-API-Code-Pack-1.1 gestoßen, den ich aber nur kopiert habe. Wie hat der damalige Autor rausgefunden, wie er den Code schreiben muss? Wie geht man sowas an?
https://stackoverflow.com/a/41310139
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von LittleTester am .
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.312

beantworten | zitieren | melden

[Hinweis] Wie poste ich richtig? gilt auch für Dich und dazu gehört auch, dass man einen Titel nimmt, in dem man nicht seinen eigenen Frust ablässt.
Was glaubst Du wie das Forum aussehen würde, wenn jede:r einen Titel ("Read the fu**ing manual" Würde ich ja gerne) wie Du wählst - und wir müssen es korrigieren. Danke.

Völlig unnötig, dass ich jetzt Deinen Titel anpassen muss. Meine Güte....
private Nachricht | Beiträge des Benutzers
LittleTester
myCSharp.de - Member



Dabei seit:
Beiträge: 151

Themenstarter:

beantworten | zitieren | melden

Sorry, wollte nur das ironisch aufgreifen, was man in diversen Foren (so wortwörtlich hier nicht, das stimmt) so unsanft gerne an den Kopf geworfen bekommt.
Sollte echt nicht frustriert klingen und war auch nicht frustriert gemeint. Sollte zum Ausdruck bringen, dass ich mir bereits echt Mühe gegeben habe eine Dokumentation zu finden, zu lesen und zu verstehen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LittleTester am .
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.594

beantworten | zitieren | melden

Tja, als Software-Entwickler muß man sich halt viele Dinge selbst aneignen.

Zum einen sind die PowerManagement-Funktionen Teil der WinAPI, d.h. der direkte Zugriff darauf geht nur nativ (z.B. per C oder C++), für C# benötigt man P/Invoke-Aufrufe.
Aber da dies vom Windows-API-Code-Pack schon gemacht wurde, kann man diese auch von C# aus nutzen.

Im Sample-Code in "Window1.xaml.cs" gibt es die Methode GetPowerSettings, in der der Zugriff auf die Werte über die (statische) Klasse PowerManager passiert.
private Nachricht | Beiträge des Benutzers
LittleTester
myCSharp.de - Member



Dabei seit:
Beiträge: 151

Themenstarter:

beantworten | zitieren | melden

Einmal mehr ein Dankeschön für dich.
Das löst mein aktuelles Problem, aber wie / wo kann ich nachschlagen, was mir das Pack noch alles so bietet und wie ich es anwende? Ich schätze nicht für alles gibt es eine Demoanwendung? Wie geht man mit Nu-Get Paketen um zu denen sich keine (ausreichende) Dokus finden, bzw. schlecht dokumentiert sind? Ist ja eine ganz allgemeine Sache.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LittleTester am .
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.594

beantworten | zitieren | melden

Also ich habe die Hilfedatei bei mir öffnen können (und es zeigt mir auch alle Inhalte an) - ich habe aber festgestellt, daß im Verzeichnisnamen (des gesamten Pfads) kein Sonderzeichen (wie # oder %) vorkommen darf.

Die meisten NuGet-Pakete basieren auf Open Source Projekten - oder lassen sich zumindestens mit ILSpy (oder einem entsprechend anderem Tool) dekompilieren.
Und dann schreibt man sich ein paar kleine Testanwendungen und probiert die Methoden aus (anhand der Namen und Parameter kann man ja den Zweck erahnen).
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.312

beantworten | zitieren | melden

99% Deines Devs Leben ist: ausprobieren, weil Zeug unbekannt ist (warum auch immer).
Deswegen ist es ein Ingenieurbasierter Job und kein "Rezept-Job".

Wie effizient Du an die Infos kommst und diese anwendest: genau das ist das, was Dich zum Entwickler macht.
Verabschiede Dich von dem Gedanken, dass Du meistens eine Doc hast. Das ist in den aller aller wenigsten Fällen vorhanden.
private Nachricht | Beiträge des Benutzers
LittleTester
myCSharp.de - Member



Dabei seit:
Beiträge: 151

Themenstarter:

beantworten | zitieren | melden

Danke euch. Auch für das Tool. Direkt runtergeladen.
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 334

beantworten | zitieren | melden

Zitat
Wie geht man sowas an?
WIE der damalige Autor auf den Code gekommen ist (trial and error, Doku gelesen,...) wird sich wohl kaum rekonstruieren lassen. Deswegen machen sinnvolle Namensgebungen Sinn: um das Ändern/Erweitern/Nutzen/... eines Codes/ einer API/... zu erleichtern. Eine gute und aktuelle Dokumentation mitzuliefern ("Read the fine manual") ist trotzdem nicht falsch: Twiiter-Thread von RapidAPI
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray ;-)
private Nachricht | Beiträge des Benutzers