Я пытаюсь вызвать метод WmiSetBrightness класса WmiMonitorBrightnessMethods:
https://docs.microsoft.com/en-us/windows/desktop/wmicoreprov/wmisetbrightness-method-in-class-wmimonitorbrightnessmethods
с помощью https://github.com/go-ole/go-ole и пример кода из Вызовметод класса WMI
Я не знаю, почему он возвращает ошибку:
wmi: error calling method WmiSetBrightness: Exception occurred. (Invalid method Parameter(s) )
Я искал некоторое время, но все ещене могу найти правильный способ передачи двух параметров Timeout и Brightness.
Мой код выглядит следующим образом:
func main() {
err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED)
if err != nil {
log.Fatal(err)
}
unknown, err := oleutil.CreateObject("WbemScripting.SWbemLocator")
if err != nil {
log.Fatal(err)
}
defer unknown.Release()
wmi, err := unknown.QueryInterface(ole.IID_IDispatch)
if err != nil {
log.Fatal(err)
}
defer wmi.Release()
serviceRaw, err := oleutil.CallMethod(wmi, "ConnectServer", nil, `root/WMI`)
if err != nil {
log.Fatal(err)
}
service := serviceRaw.ToIDispatch()
defer serviceRaw.Clear()
typeName := "WmiMonitorBrightnessMethods"
typeRaw, err := oleutil.CallMethod(service, "Get", typeName)
if err != nil {
log.Fatalf("wmi: error fetching type %v: %v", typeName, err)
}
typeResult := typeRaw.ToIDispatch()
defer typeRaw.Clear()
methodName := "WmiSetBrightness"
// Set Brightness value to 20 with the Timeout 1
methodRaw, err := oleutil.CallMethod(typeResult, methodName, 1, 20)
if err != nil {
log.Fatalf("wmi: error calling method %v: %v", methodName, err)
}
item := methodRaw.ToIDispatch()
defer methodRaw.Clear()
_ = item
}