| |
|
|
Uwe ''Pascal'' Niemeier | Hi Leute!
Mal wieder was Neues: KompilierenMarkierenSeparierenwindow %maxx,%maxy
$H Windows.ph
$H ocx3a.ph
$I ocx3a.inc
ocxInit()
var objLocator&=ocxCreate("WbemScripting.SWbemLocator")
var objService&=ocxMethod(objLocator&,"ConnectServer",".","root\cimv2")
declare Exec$
Exec$="SELECT * FROM Win32_PerfRawData_PerfOS_Memory"----Speicher
Exec$="SELECT * FROM Win32_SystemEnclosure"--------------PC-Gehäuse
Exec$="SELECT * FROM Win32_LogicalDisk"------------------Laufwerke
Exec$="SELECT * FROM Win32_OperatingSystem"--------------Infos über Windows
Exec$="SELECT * FROM Win32_PointingDevice"---------------Infos über Maus
Exec$="SELECT * FROM Win32_USBHub"-----------------------Verfügbare USB-Anschlüsse
Exec$="SELECT * FROM Win32_Printer"----------------------Infos über Drucker
Exec$="SELECT * FROM Win32_Process"----------------------Prozesse
Exec$="SELECT * FROM Win32_QuickFixEngineering"----------HotFixes
Exec$="SELECT * FROM Win32_Product"----------------------Alle installierten Programme
Exec$="SELECT * FROM Win32_StartupCommand"---------------Autostart-Programme
Exec$="SELECT * FROM Win32_NetworkAdapterConfiguration"--verfügbare Netzwerkverbindungen
Exec$="SELECT * FROM Win32_Service"----------------------Services
var Collection&=ocxMethod(objService&,"ExecQuery",Exec$)
var Count%=ocxGet(Collection&,"Count")
var Enum&=ocxGet(Collection&,"_NewEnum")
declare Obj&
whileloop 0,Count%
CallMethod(Enum&,3,1,Var#,0)--IEnumVARIANT::Next
casenot Var#.vt%=~VT_DISPATCH:break
Obj&=Var#.Val&
print &loop;" von ",Count%
print ocxMethod(Obj&,"GetObjectText_")
ocxRelease(Obj&)
print "<ENTER>"
waitinput
cls
endwhile
print "Ende"
ocxRelease(Enum&,Collection&,objService&,objLocator&)
ocxDeInit()
waitinput
BTW1: Da die Abfrage über einen SQL-Befehl erfolgt, läßt sich das Ergebnis im Vorfeld über entsprechende WHERE-Bedingungen eingrenzen.
BTW2: Auch die Ausgabe läßt sich auf einzelne Datenfelder begrenzen. Da aber nicht alle Datensätze die selben Felder enthalten (nicht einmal innerhalb einer System-Kategorie), würde bei Abfrage eines nicht vorhandenen Feldes die Fehlermeldung "Unbekannter Name" erfolgen. Dies läßt sich unterdrücken durch Änderung des ocx-internen ErrorLevels. KompilierenMarkierenSeparierenwindow %maxx,%maxy
$H Windows.ph
$H ocx3a.ph
$I ocx3a.inc
ocxInit()
var Exec$=" SELECT * FROM Win32_LogicalDisk WHERE FileSystem = FAT32 "
var objLocator&=ocxCreate("WbemScripting.SWbemLocator")
var objService&=ocxMethod(objLocator&,"ConnectServer",".","root\cimv2")
var Collection&=ocxMethod(objService&,"ExecQuery",Exec$)
var Count%=ocxGet(Collection&,"Count")
var Enum&=ocxGet(Collection&,"_NewEnum")
declare Obj&
whileloop 1,Count%
CallMethod(Enum&,3,1,Var#,0)--IEnumVARIANT::Next
casenot Var#.vt%=~VT_DISPATCH:break
Obj&=Var#.Val&
ocxErrorlevel%=0--Fehlermeldung wegen "Irgendwas" unterdrücken
print "Name : ",ocxGet(Obj&,"Name")
print "Description: ",ocxGet(Obj&,"Description")
print "Irgendwas : ",ocxGet(Obj&,"Irgendwas")
ocxErrorLevel%=1--Fehlermeldungen sicherheitshalber wieder zulassen
ocxRelease(Obj&)
endwhile
ocxRelease(Enum&,Collection&,objService&,objLocator&)
ocxDeInit()
waitkey
Danke an alle hier [...] und hier [...] beteiligten für die Anregung hierzu!
SeeYou Pascal |
|
|
| |
|
|
|
| Genial, funktioniert super!
(solche tollen Codes erinner mich immer an ein tolles Codesnippets/ Thread- Gruppen- und Schlagwortezuordnungssystem" das mir da vorschwebt, sodass man z.B. auch durch Codesnippets-Rubriken browsen kann) |
|
|
| |
|
|