Как я могу получить серийный номер BaseBoard с WMI? - PullRequest
0 голосов
/ 27 ноября 2018

Хороший пример - использование WMI в Powerbuilder, которое завершает работающий процесс.

Тот же метод можно использовать для получения SerialNumber из BaseBoard .Мне нужно расширить тот же код для обработки возвращаемых значений запроса WQL.

WQL-запрос, который я хочу выполнить:

SELECT Product, SerialNumber FROM Win32_BaseBoard

Я могу выполнитьзапрос выше, но не знаете, как сохранить SerialNumber в переменной после вызова функции ExecuteStatement ().

Пожалуйста, посмотрите на ссылку для полного PowerBuilderкод. Как завершить процесс, если в его пути есть определенное имя папки?

Ниже приведен фрагмент кода, взятый по ссылке выше, чтобы показать функцию.

wsh = CREATE OleObject
wsh.ConnectToNewObject("MSScriptControl.ScriptControl")
wsh.Language = "VBScript"
wsh.AddCode(TheCode)
TRY
    wsh.ExecuteStatement(FunctionName)
CATCH (RunTimeError Re01)
    MessageBox("Query Error", "Following code has some problems.~r~n~r~n" +                 TheCode, StopSign!)
END TRY
wsh.DisconnectObject()

DESTROY wsh

Важный вызов функции wsh.ExecuteStatement (FunctionName)

Что делать после вызова этой функции, чтобы установить локальные переменные PowerBuilder с возвращенным SerialNumber из BaseBoard?

1 Ответ

0 голосов
/ 08 декабря 2018
OLEObject ole_wsh
Any la_baseboard[]
string ls_message

 ole_wsh = CREATE OLEObject
 ole_wsh.ConnectToNewObject("MSScriptControl.ScriptControl")
 ole_wsh.Language = "vbscript"
 ole_wsh.AddCode('Function rtnBaseBoard()~r~n' &
 + 'DIM objBaseBoard(2)~r~n'  &
 + 'strComputer = "."~r~n'  &
 + 'Set objWMIService ='  &
 + '   GetObject("winmgmts:\\" & strComputer & "\root\cimv2")~r~n' &
 + 'Set colItems =' &
 + '    objWMIService.ExecQuery("SELECT Product, SerialNumber FROM Win32_BaseBoard")~r~n' &
 + 'For Each objItem in colItems~r~n' &
 + 'objBaseBoard(0) = objItem.Product~r~n' &
 + 'objBaseBoard(1) = objItem.SerialNumber~r~n' &
 + 'Next~r~n' &
 + 'rtnBaseBoard = objBaseBoard~r~n' &
 + 'End Function')
 la_baseboard[] = ole_wsh.Eval("rtnBaseBoard")
 ole_wsh.DisconnectObject()
 DESTROY ole_wsh

ls_message = "Product: " + string(la_baseboard[1]) + "~r~n" + &
+ "SerialNumber: " + string(la_baseboard[2]) + "~r~n" 
MessageBox("Win32 BaseBoard",ls_message)

Смотрите другие примеры использования WMI от Powerbuilder

...