Hallo,
folgendes Problem:
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.
Hi,
laut Doku:
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.
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).
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.