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???