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

WMI/SetPowerState/InvokeMethod -> Vorgang ist aufgrund des aktuellen Zustands des Objekts ungültig
ismirschlecht
myCSharp.de - Member



Dabei seit:
Beiträge: 47

Themenstarter:

WMI/SetPowerState/InvokeMethod -> Vorgang ist aufgrund des aktuellen Zustands des Objekts ungültig

beantworten | zitieren | melden

Hallo,

folgendes Problem:
- An EINEM Rechner stecken ZWEI USB - Tastaturen.
- aus betriebsspezifischen Gründen soll jeweils nur eine funktionieren, mit der Möglichkeit, zu wechseln
- ich versuche, diese Aufgabe mit WMI und der SetPowerState - Methode zu lösen

Die beiden Tastaturen kann ich identifizieren über eine WMI - Abfrage:

select PnPDeviceId from CIM_LogicalDevice where Caption like \"%Tasten%\"


List<ManagementObject> mcl = new List<ManagementObject>();
// ... usw

public void HoleUSB()
        {
         mcl.Clear();
         ManagementObjectSearcher mos = new ManagementObjectSearcher(Fr);
         foreach (ManagementObject mob in mos.Get())
             {
              mcl.Add(mob);
              }
          }

So weit, so gut. in mcl[0] und mcl[1] liegen dann tatsächlich die beiden Managementobjekte, die den Tastaturen entsprechen.
Dann aber gehts nicht weiter. Ich bereite den Aufruf von SetPowerState vor mit einem Objektarray:


Object[] args = new Object[2] {6, DateTime.Now} ;
die 6 entspricht dem PowerOff

Aber dann:


try
                {
                mcl[0].InvokeMethod("SetPowerState",args);
                }
            catch (Exception ex)
                {
                // ist nur eine Fehlerausgabe in einem Memo 
                P.Text+="ERROR"+CR+ex.Message+CR;
                }
Die Fehlermeldung, die IMMER kommt, lautet:
Fehler
Der Vorgang ist aufgrund des aktuellen Zustands des Objekts ungültig.
Sehr informativ.
Bestimmt nur ein Anfängerfehler, aber ich habe keine Ahnung, in welcher Richtung ich suchen soll.
Ach so: ich arbeite untr Win7 mit VS 2010.
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Hi,

laut Doku:

SetPowerState Method
Zitat von MSDN
This method is currently not implemented by WMI. To use this method, you must implement it in your own provider.

Wie Du es anders machst, weis ich leider nicht.
private Nachricht | Beiträge des Benutzers
ismirschlecht
myCSharp.de - Member



Dabei seit:
Beiträge: 47

Themenstarter:

beantworten | zitieren | melden

Danke für die Antwort.
Die besagte Stelle hatte ich auch gefunden, aber großzügig ignoriert, da das Internet voll von (angeblich) funktionierenden Beispielen ist (was für ein Misthaufen).
Leider bin ich Neuling auf dem Gebiet.
Da werde ich mal meinen eigenen Provider providern (wenn ich weiß, was das ist).
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Hmm, wenn ich mir so diese wmi doku angucke, ist da fast jede Methode so markiert.

Ich denke ich hab dich hier auf den falschen Pfad gebracht. Das wird warscheinlich eine Implementierungs Sache des Treiber Herstellers sein.
private Nachricht | Beiträge des Benutzers