Laden...

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

Erstellt von ismirschlecht vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.651 Views
I
ismirschlecht Themenstarter:in
45 Beiträge seit 2012
vor 9 Jahren
WMI/SetPowerState/InvokeMethod -> Vorgang ist aufgrund des aktuellen Zustands des Objekts ungültig

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:> Fehlermeldung:

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.

849 Beiträge seit 2006
vor 9 Jahren

Hi,

laut Doku:

SetPowerState Method

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.

I
ismirschlecht Themenstarter:in
45 Beiträge seit 2012
vor 9 Jahren

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).

849 Beiträge seit 2006
vor 9 Jahren

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.