Irgendwie sind die Ergebnisse nicht so *ganz* identisch, wie mit VBS ermittelt. Ein riesen Problem: es werden keine Zahlenwerte übergben. Warum?
Code: Alles auswählen
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#ListIcon_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 150, 74, 800, 600, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Ausgabe")
If CreateGadgetList(WindowID())
;-
ListIconGadget(#ListIcon_0, 0, 0, 800, 600, "Column1", 100)
AddGadgetColumn(#ListIcon_0, 2, "Column2", 100)
AddGadgetColumn(#ListIcon_0, 3, "Column3", 100)
AddGadgetColumn(#ListIcon_0, 4, "Column4", 100)
AddGadgetColumn(#ListIcon_0, 5, "Column5", 100)
AddGadgetColumn(#ListIcon_0, 6, "Column6", 100)
AddGadgetColumn(#ListIcon_0, 7, "Column7", 100)
AddGadgetColumn(#ListIcon_0, 8, "Column8", 100)
AddGadgetColumn(#ListIcon_0, 9, "Column9", 100)
AddGadgetColumn(#ListIcon_0, 10, "Column10", 100)
AddGadgetColumn(#ListIcon_0, 11, "Column11", 100)
AddGadgetColumn(#ListIcon_0, 12, "Column12", 100)
AddGadgetColumn(#ListIcon_0, 13, "Column13", 100)
AddGadgetColumn(#ListIcon_0, 14, "Column14", 100)
AddGadgetColumn(#ListIcon_0, 15, "Column15", 100)
EndIf
EndIf
EndProcedure
;- KONSTANTEN STRUKTUREN PROZEDUREN
#COINIT_MULTITHREAD=0
#RPC_C_AUTHN_LEVEL_CONNECT=2
#RPC_C_IMP_LEVEL_IDENTIFY=2
#EOAC_NONE=0
#RPC_C_AUTHN_WINNT=10
#RPC_C_AUTHZ_NONE=0
#RPC_C_AUTHN_LEVEL_CALL=3
#RPC_C_IMP_LEVEL_IMPERSONATE=3
#CLSCTX_INPROC_SERVER=1
#WBEM_S_NO_ERROR = 0
Structure d
l.l
h.l
EndStructure
Procedure.l ansi2bstr(ansi.s)
size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0)
Dim unicode.w(size)
MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size)
ProcedureReturn SysAllocString_(@unicode())
EndProcedure
Procedure.s unicode2ansi(mem)
ansi.s=""
Repeat
a=PeekW(mem)
ansi=ansi+Chr(a)
mem+2
Until a=0
ProcedureReturn ansi
EndProcedure
;- MAIN
Open_Window_0()
Dim item$(0)
Dim text$(0)
Enum$=""
Restore video
Read count
Dim item$(count)
For j=1 To count: Read item$(j): Next
Enum$=item$(1)
Gosub wmicall
For i=0 To retour-1: AddGadgetItem (#ListIcon_0, -1, text$(i)): Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End
;- WMI-Call
wmicall:
dm=0
CoInitializeEx_(0,#COINIT_MULTITHREAD)
hres=CoInitializeSecurity_(0, -1,0,0,#RPC_C_AUTHN_LEVEL_CONNECT,#RPC_C_IMP_LEVEL_IDENTIFY,0,#EOAC_NONE,0)
hres=CoCreateInstance_(?CLSID_WbemLocator,0,#CLSCTX_INPROC_SERVER,?IID_IWbemLocator,@loc.IWbemLocator)
hres=loc\ConnectServer(ansi2bstr("root\cimv2"),0,0,0,0,0,0,@svc.IWbemServices)
hres=svc\QueryInterface(?IID_IUnknown,@pUnk.IUnknown)
hres=CoSetProxyBlanket_(svc,#RPC_C_AUTHN_WINNT,#RPC_C_AUTHZ_NONE,0,#RPC_C_AUTHN_LEVEL_CALL,#RPC_C_IMP_LEVEL_IMPERSONATE,0,#EOAC_NONE)
hres=CoSetProxyBlanket_(pUnk,#RPC_C_AUTHN_WINNT,#RPC_C_AUTHZ_NONE,0,#RPC_C_AUTHN_LEVEL_CALL,#RPC_C_IMP_LEVEL_IMPERSONATE,0,#EOAC_NONE)
pUnk\release()
hres=CoCreateInstance_(?CLSID_WbemRefresher,0,#CLSCTX_INPROC_SERVER,?IID_IWbemRefresher,@pRefresher.IWbemRefresher)
hres=pRefresher\QueryInterface(?IID_IWbemConfigureRefresher,@pConfig.IWbemConfigureRefresher)
hres=pConfig\AddEnum(svc,ansi2bstr(Enum$),0,0,@penum.IWbemHiPerfEnum,@id)
pConfig\release()
Dim tab.IWbemObjectAccess(300)
For k=2 To count
For x=1 To 2
pRefresher\refresh(0)
hres=penum\GetObjects(0,100*SizeOf(IWbemObjectAccess),@tab(),@retour.l)
If dm=0: Dim text$(retour): dm=1: EndIf
If x=1
hres=tab(0)\GetPropertyHandle(ansi2bstr(item$(k)),0,@pnp)
EndIf
If x>1
*MemoryID = AllocateMemory(5000)
For i=0 To retour-1
tab(i)\Readpropertyvalue(pnp,500,@len,*MemoryID)
text$(i) + unicode2ansi(*MemoryID) + Chr(10)
tab(i)\release()
Next i
FreeMemory(*MemoryID)
EndIf
Delay(10)
Next
Next
penum\release()
pRefresher\release();
svc\release()
loc\release()
CoUninitialize_()
Return
;- DATA
DataSection
CLSID_WbemLocator:
;4590f811-1d3a-11d0-891f-00aa004b2e24
Data.l $4590F811
Data.w $1D3A, $11D0
Data.b $89, $1F, $00, $AA, $00, $4B, $2E, $24
IID_IWbemLocator:
;dc12a687-737f-11cf-884d-00aa004b2e24
Data.l $DC12A687
Data.w $737F, $11CF
Data.b $88, $4D, $00, $AA, $00, $4B, $2E, $24
IID_IUnknown:
;00000000-0000-0000-C000-000000000046
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_IWbemRefresher:
;49353c99-516b-11d1-aea6-00c04fb68820
Data.l $49353C99
Data.w $516B, $11D1
Data.b $AE, $A6, $00, $C0, $4F, $B6, $88, $20
CLSID_WbemRefresher:
;c71566f2-561E-11D1-AD87-00C04FD8FDFF
Data.l $C71566F2
Data.w $561E, $11D1
Data.b $AD,$87,$00,$C0,$4F,$D8,$FD,$FF
IID_IWbemConfigureRefresher:
;49353c92-516b-11d1-aea6-00c04fb68820
Data.l $49353C92
Data.w $516B, $11D1
Data.b $AE, $A6, $00, $C0, $4F, $B6, $88, $20
IID_IWbemObjectAccess:
;49353c9a-516b-11d1-aea6-00c04fb68820
Data.l $49353C9A
Data.w $516B, $11D1
Data.b $AE, $A6, $00, $C0, $4F, $B6, $88, $20
video:
Data.l 12
Data.s "Win32_VideoController", "Caption", "AdapterDACType", "VideoProcessor", "AdapterRAM", "VideoModeDescription", "CurrentBitsPerPixel", "CurrentRefreshRate", "DriverVersion", "InfFilename", "InfSection", "InstalledDisplayDrivers"
EndDataSection
Warum wird kein "AdapterRAM", "CurrentBitsPerPixel", "CurrentRefreshRate" wie beim VBS-Bruder ausgegeben???