Вызов метода с параметрами класса WMI в golang - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь вызвать метод 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...