如何使用WMI获取基板的序列号



一个很好的例子是在Powerbuilder中使用WMI来终止正在运行的进程。

同样的技术也可以用于获取基板序列号。我需要扩展相同的代码来处理WQL查询的返回值。

我要执行的WQL查询是:

SELECT Product, SerialNumber FROM Win32_BaseBoard

我可以执行上面的查询,但不知道如何在调用ExecuteStatement((函数后将SerialNumber保存在变量中。

请查看链接以获取完整的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(

函数调用后,用返回的BaseBoard的序列号设置PowerBuilder本地变量,该怎么办?

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 & "rootcimv2")~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)

最新更新