Requires: COMate by srod - http://www.purebasic.fr/english/viewtopic.php?t=33983
Requires: Droopy Library v1.31.15 (compiled library not source) for some functions like the registry read and the iniwrite and IsUserAnAdmin()
For Windows XP with SP 3 and Windows Vista with SP 1 or greater.
Please note, this is a very first version, its rough i know, and I also know there are a few bugs in this posted version (nothing serious, just some information gathering formatting and maybe a few commands messed up a little - stuff like that). I'm refining and correcting it and adding some more stuff. Should be done before long, but in the mean while i think this will serve for a good base upon which to build your own using comate if your interested in the computer info stuff.
part 1 here. whole thing is too big to post so i split it up.
Code: Select all
XIncludeFile "COMate.pbi"
XIncludeFile "Utility.pbi"
XIncludeFile "VariantHelper_Include.pb"
#PF_FLOATING_POINT_PRECISION_ERRATA = 0
#PF_FLOATING_POINT_EMULATED = 1
#PF_COMPARE_EXCHANGE_DOUBLE = 2
#PF_MMX_INSTRUCTIONS_AVAILABLE = 3
#PF_XMMI_INSTRUCTIONS_AVAILABLE = 6
#PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7
#PF_RDTSC_INSTRUCTION_AVAILABLE = 8
#PF_PAE_ENABLED = 9
#PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10
#PF_NX_ENABLED = 12
#PF_SSE3_INSTRUCTIONS_AVAILABLE = 13
#PF_COMPARE_EXCHANGE128 = 14
#PF_COMPARE64_EXCHANGE128 = 15
#PF_CHANNELS_ENABLED = 16
#HW_PROFILE_GUIDLEN = $27
#MAX_PROFILE_LEN = $50
#DRIVE_TYPE_UNDTERMINED = 0
#DRIVE_ROOT_NOT_EXIST = 1
#DRIVE_REMOVABLE = 2
#DRIVE_FIXED = 3
#DRIVE_REMOTE = 4
#DRIVE_CDROM = 5
#DRIVE_RAMDISK = 6
Structure HW_PROFILE_INFO
DockInfo.l
szHWProfileGUID${#HW_PROFILE_GUIDLEN}
szHwProfileName${#MAX_PROFILE_LEN}
EndStructure
Global OS_SP_MajorVersion_Global$, OS_Caption_Global$, CPU_AddressWidth_Global$, File_Gen_date_time$, COMP_Status_Global$, Net_ConnectionID_Global$
Global Adapter_GUID_Name_Global$, Adapter_ConfigManagerErrorCode_Global$, Net_Con_Stat_Global$, Adapter_Manuf_Global$, VC_Description_Global$
;////////////////////////////////////////////
lpVersionInformation.OSVERSIONINFOEX
lpVersionInformation\dwOSVersionInfoSize = SizeOf(OSVERSIONINFOEX)
If GetVersionEx_(@lpVersionInformation)
vers_maj.l = lpVersionInformation\dwMajorVersion
vers_min.l = lpVersionInformation\dwMinorVersion
ver_sp.l = lpVersionInformation\wServicePackMajor
If vers_maj = 5 And vers_min = 1 And ver_sp = 3
WinXPSP3.l = 1
Else
WinXPSP3.l = 0
EndIf
If vers_maj = 6 And ver_sp => 1
WinVsta.l = 1
Else
WinVsta.l = 0
EndIf
If WinVsta = 1 Or WinXPSP3 = 1
ymd_x$ = FormatDate("%yyyy%mm%dd", Date())
Else
MessageRequester("Information", "Minimum Operating System Requirements : Microsoft Windows Vista ® With Service Pack 1 or greater or Windows XP ® With Service Pack 3.", #PB_MessageRequester_Ok)
End
EndIf
EndIf
If IsUserAnAdmin() = 0
MessageRequester("Information", "You must be logged on to the computer as a user with full administrative privilages to use this software.", #PB_MessageRequester_Ok)
End
EndIf
Procedure$ HardwareFingerprint() ; courtesy citystate - http://www.purebasic.fr/english/viewtopic.php?t=26950&highlight=hardwarefingerprint
Protected hwp.HW_PROFILE_INFO
GetCurrentHwProfile_(@hwp)
ProcedureReturn hwp\szHwProfileName$+" > "+hwp\szHWProfileGUID$
EndProcedure
Procedure.q GetVistaMemory()
Lib = OpenLibrary(#PB_Any, "kernel32.dll")
If Lib
*Mem_Func = GetFunction(Lib, "GetPhysicallyInstalledSystemMemory")
If *Mem_Func And CallFunctionFast(*Mem_Func, @gvmemx)
Result = gvmemx
EndIf
CloseLibrary(Lib)
EndIf
ProcedureReturn Result
EndProcedure
Procedure.q GetMemory()
Protected Library = OpenLibrary(#PB_Any, "kernel32.dll")
Protected mem.MEMORYSTATUS, memex.MEMORYSTATUSEX
Protected *Function, Result.q
If Library
memex\dwLength = SizeOf(MEMORYSTATUSEX)
*Function = GetFunction(Library, "GlobalMemoryStatusEx")
If *Function And CallFunctionFast(*Function, @memex)
Result = memex\ullTotalPhys
EndIf
CloseLibrary(Library)
EndIf
ProcedureReturn Result
EndProcedure
Procedure.s GetDEP()
Lib = OpenLibrary(#PB_Any, "kernel32.dll")
If Lib
*Mem_Func = GetFunction(Lib, "GetSystemDEPPolicy")
If *Mem_Func
Result_DEP = CallFunctionFast(*Mem_Func)
EndIf
Select Result_DEP
Case 0
DEP_Pol$ = "Always Off"
Case 1
DEP_Pol$ = "Always On"
Case 2
DEP_Pol$ = "Opt In"
Case 3
DEP_Pol$ = "Opt Out"
Default
DEP_Pol$ = "DEP Policy Unknown"
EndSelect
CloseLibrary(Lib)
EndIf
ProcedureReturn DEP_Pol$
EndProcedure
Procedure.s Base_cnvrt(string$,base,base2=10) ; from the PB forum, credit goes to original poster
Static table$="0123456789abcdef"
If base>1 And base<17 And base2>1 And base2<17
If base=base2
result$=string$
Else
If base>10
string$=LCase(string$)
EndIf
For loop=1 To Len(string$)
digit=FindString(table$,Mid(string$,loop,1),1)
If digit
number.q*base
number+(digit-1)
EndIf
Next
If base2=10
result$=Str(number)
Else
Repeat
remainder=number%base2
number=number/base2
result$=Mid(table$,remainder+1,1)+result$
Until number=0
EndIf
EndIf
EndIf
ProcedureReturn result$
EndProcedure
Procedure.s DriveOverviewType()
IniWrite("C:\systeminfo.txt","Drive_Overview_Info", "==================================", " [Drive_Overview_Info] ==============================================")
For x = 0 To 25
NextDrive$ = Chr(x + 65)
Drive$ = NextDrive$ + ":\"
Drive_typ.i = GetDriveType_(Drive$)
Select Drive_typ
Case #DRIVE_TYPE_UNDTERMINED
DriveType$ = " has not been recognized and its type is undetermined."
Case #DRIVE_ROOT_NOT_EXIST
DriveType$ = " specified drive doesn't exist."
Case #DRIVE_CDROM
DriveType$ = " is a CD-ROM Or DVD drive."
Case #DRIVE_FIXED
DriveType$ = " media cannot be removed i.e.. Hard Disk."
Case #DRIVE_RAMDISK
DriveType$ = " is a RAM disk/drive using system memory."
Case #DRIVE_REMOTE
DriveType$ = " is a remote drive (i.e..Network drive)."
Case #DRIVE_REMOVABLE
DriveType$ = " media can be removed (i.e.. Floppy Disk or tape drive) or other removable media or is a device software installed drive for that device use."
EndSelect
If (Drive_typ = #DRIVE_CDROM) Or (Drive_typ = #DRIVE_FIXED) Or (Drive_typ = #DRIVE_RAMDISK) Or (Drive_typ = #DRIVE_REMOTE) Or (Drive_typ = #DRIVE_REMOVABLE) Or (Drive_typ = #DRIVE_TYPE_UNDTERMINED)
IniWrite("C:\systeminfo.txt","Drive_Overview_Info", "Drive " + Drive$, " " + DriveType$)
EndIf
Next
IniWrite("C:\systeminfo.txt","Drive_Overview_Info", "============", "End [Drive_Overview_Info] ============" + #CRLF$)
EndProcedure
Procedure PHYMEM_Info()
Define.COMateObject objWMIService, PHYMEMInfo
colPHYMEMInfo.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
colPHYMEMInfo = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_PhysicalMemory')")
IniWrite("C:\systeminfo.txt","Memory_Info", "==================================", " [Memory_Info] ==============================================")
If colPHYMEMInfo
PHYMEMInfo = colPHYMEMInfo\GetNextObject()
While PHYMEMInfo
BankLabel$ = PHYMEMInfo\GetStringProperty("BankLabel")
MemBank.i = Val(PHYMEMInfo\GetStringProperty("Capacity")) / 1024 / 1024
PHYMEMInfo_Capacity$ = Str(MemBank) + " MB"
PHYMEMInfo_DataWidth$ = Str(PHYMEMInfo\GetIntegerProperty("DataWidth"))
PHYMEMInfo_DeviceLocator$ = PHYMEMInfo\GetStringProperty("DeviceLocator")
PHYMEMInfo_MemoryType$ = Mem_Type(PHYMEMInfo\GetIntegerProperty("MemoryType"))
PHYMEMInfo_Speed$ = Str(PHYMEMInfo\GetIntegerProperty("Speed"))
PHYMEMInfo_FormFactor$ = Mem_Form_Factor(PHYMEMInfo\GetIntegerProperty("FormFactor"))
PHYMEMInfo_Manufacturer$ = PHYMEMInfo\GetStringProperty("Manufacturer")
PHYMEMInfo_Model$ = PHYMEMInfo\GetStringProperty("Model")
PHYMEMInfo_Version$ = PHYMEMInfo\GetStringProperty("Version")
PHYMEMInfo_PositionInRow$ = Str(PHYMEMInfo\GetIntegerProperty("PositionInRow"))
PHYMEMInfo_TypeDetail$ = MemType_Detail(PHYMEMInfo\GetIntegerProperty("TypeDetail"))
PHYMEMInfo_TotalWidth$ = Str(PHYMEMInfo\GetIntegerProperty("TotalWidth"))
PHYMEMInfo_SerialNumber$ = PHYMEMInfo\GetStringProperty("SerialNumber")
PHYMEMInfo_PartNumber$ = PHYMEMInfo\GetStringProperty("PartNumber")
PHYMEMInfo_InterleaveDataDepth$ = Str(PHYMEMInfo\GetIntegerProperty("InterleaveDataDepth"))
Select PHYMEMInfo\GetIntegerProperty("InterleavePosition")
Case 0
PHYMEMInfo_InterleavePosition$ = "Non-interleaved"
Case 1
PHYMEMInfo_InterleavePosition$ = "First position"
Case 2
PHYMEMInfo_InterleavePosition$ = "Second position"
Default
PHYMEMInfo_InterleavePosition$ = "Unknown"
EndSelect
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + "Device Locator", " " + PHYMEMInfo_DeviceLocator$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Memory Type", " " + PHYMEMInfo_MemoryType$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Capacity", " " + PHYMEMInfo_Capacity$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Data Width", " " + PHYMEMInfo_DataWidth$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Total Width", " " + PHYMEMInfo_TotalWidth$ + " (should match Data Width if there are no error correction bits)")
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Position In Row", " " + PHYMEMInfo_PositionInRow$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Interleave Data Depth", " " + PHYMEMInfo_InterleaveDataDepth$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Interleave Position", " " + PHYMEMInfo_InterleavePosition$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Speed", " " + PHYMEMInfo_Speed$ + " nanoseconds")
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Type Detail", " " + PHYMEMInfo_TypeDetail$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Form Factor", " " + PHYMEMInfo_FormFactor$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Manufacturer", " " + PHYMEMInfo_Manufacturer$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Model", " " + PHYMEMInfo_Model$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Version", " " + PHYMEMInfo_Version$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Serial Number", " " + PHYMEMInfo_SerialNumber$)
IniWrite("C:\systeminfo.txt","Memory_Info", BankLabel$ + " " + PHYMEMInfo_DeviceLocator$ + " Part Number", " " + PHYMEMInfo_PartNumber$)
IniWrite("C:\systeminfo.txt","Memory_Info", "============", "============")
PHYMEMInfo\Release()
PHYMEMInfo = colPHYMEMInfo\GetNextObject()
Wend
colPHYMEMInfo\Release()
EndIf
objWMIService\Release()
Else
MessageRequester("Error", "PHYMEMInfo")
EndIf
If (FindString(OS_Caption_Global$, "Vista", 1) > 0) And (OS_SP_MajorVersion_Global$ => "1") And (CPU_AddressWidth_Global$ = "32")
PhyMem.s = StrD(GetVistaMemory() / 1024, 1) +" MB"
Else
PhyMem.s = StrD(GetMemory() / 1024, 1) +" MB"
EndIf
IniWrite("C:\systeminfo.txt","Memory_Info", "Operating System reports Physical Memory Installed", " " + PhyMem)
IniWrite("C:\systeminfo.txt","Memory_Info", "============", "End [Memory_Info] ============" + #CRLF$)
EndProcedure
Procedure VidControl_Info()
Define.COMateObject objWMIService, VidControl
colVidCont.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
colVidCont = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_VideoController')")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "==================================", " [Graphics_Card_Info] ==============================================")
If colVidCont
VidControl = colVidCont\GetNextObject()
While VidControl
x = x + 1
id$ = Str(x)
VC_Description_Global$ = VidControl\GetStringProperty("Description")
VC_AdapterCompatibility$ = VidControl\GetStringProperty("AdapterCompatibility")
VC_AdapterDACType$ = VidControl\GetStringProperty("AdapterDACType")
VC_CurrentNumberOfColors$ = VidControl\GetStringProperty("CurrentNumberOfColors")
VC_AdapterRAM_bytes$ = Str(VidControl\GetIntegerProperty("AdapterRAM"))
VC_AdapterRAM$ = Str((VidControl\GetIntegerProperty("AdapterRAM") / 1024) / 1024) + " Mb" + " (" + VC_AdapterRAM_bytes$ + " bytes)"
VC_CurrentBitsPerPixel$ = Str(VidControl\GetIntegerProperty("CurrentBitsPerPixel"))
VC_CurrentHorizontalResolution$ = Str(VidControl\GetIntegerProperty("CurrentHorizontalResolution"))
VC_CurrentVerticalResolution$ = Str(VidControl\GetIntegerProperty("CurrentVerticalResolution"))
VC_Resolution$ = VC_CurrentHorizontalResolution$ + " x " + VC_CurrentVerticalResolution$
VC_DriverDate$ = Dt_Time(VidControl\GetStringProperty("DriverDate"), 0)
VC_DriverVersion$ = VidControl\GetStringProperty("DriverVersion")
VC_InstalledDisplayDrivers$ = VidControl\GetStringProperty("InstalledDisplayDrivers")
VC_VideoModeDescription$ = VidControl\GetStringProperty("VideoModeDescription")
VC_InfFilename$ = VidControl\GetStringProperty("InfFilename")
VC_InfSection$ = VidControl\GetStringProperty("InfSection")
VC_CurrentRefreshRate$ = VidControl\GetStringProperty("CurrentRefreshRate") + " Hz"
VC_DeviceID$ = VidControl\GetStringProperty("DeviceID")
VC_MaxRefreshRate$ = Str(VidControl\GetIntegerProperty("MaxRefreshRate")) + " Hz"
VC_MinRefreshRate$ = Str(VidControl\GetIntegerProperty("MinRefreshRate")) + " Hz"
VC_VideoProcessor$ = VidControl\GetStringProperty("VideoProcessor")
VC_VideoModeDescription$ = VidControl\GetStringProperty("VideoModeDescription")
VC_ConfigManagerErrorCode$ = ConfigManager_ErrorCode(VidControl\GetIntegerProperty("ConfigManagerErrorCode"))
VC_Availability$ = Availibility_Info(VidControl\GetIntegerProperty("Availability"))
VC_CurrentNumberOfColumns$ = Str(VidControl\GetIntegerProperty("CurrentNumberOfColumns"))
VC_CurrentNumberOfRows$ = Str(VidControl\GetIntegerProperty("CurrentNumberOfRows"))
VC_VideoMemoryType$ = VC_RamType(VidControl\GetIntegerProperty("VideoMemoryType"))
VC_DeviceSpecificPens$ = Str(VidControl\GetIntegerProperty("DeviceSpecificPens"))
VC_ErrorDescription$ = VidControl\GetStringProperty("ErrorDescription")
VC_NumberOfColorPlanes$ = Str(VidControl\GetIntegerProperty("NumberOfColorPlanes"))
VC_NumberOfVideoPages$ = Str(VidControl\GetIntegerProperty("NumberOfVideoPages"))
VC_Status$ = VidControl\GetStringProperty("Status")
If VidControl\GetIntegerProperty("PowerManagementSupported") = 0
VC_PowerManagementSupported$ = "False"
Else
VC_PowerManagementSupported$ = "True"
EndIf
If VidControl\GetIntegerProperty("Monochrome") = 0
VC_Monochrome$ = "False"
Else
VC_Monochrome$ = "True"
EndIf
Select VidControl\GetIntegerProperty("CurrentScanMode")
Case 1
VC_CurrentScanMode$ = "Other"
Case 2
VC_CurrentScanMode$ = "Unknown"
Case 3
VC_CurrentScanMode$ = "Interlaced"
Case 4
VC_CurrentScanMode$ = "Non-Interlaced"
Default
VC_CurrentScanMode$ = "Unknown or Other"
EndSelect
Select VidControl\GetIntegerProperty("ICMIntent")
Case 1
VC_ICMIntent$ = "Saturation"
Case 2
VC_ICMIntent$ = "Contrast"
Case 3
VC_ICMIntent$ = "Exact Color"
Default
VC_ICMIntent$ = "Unknown or Other"
EndSelect
Select VidControl\GetIntegerProperty("ICMMethod")
Case 1
VC_ICMMethod$ = "Disabled"
Case 2
VC_ICMMethod$ = "Windows"
Case 3
VC_ICMMethod$ = "Device Driver"
Case 4
VC_ICMMethod$ = "Destination Device"
Default
VC_ICMMethod$ = "Unknown or Other"
EndSelect
Select VidControl\GetIntegerProperty("DitherType")
Case 1
VC_DitherType$ = "No dithering"
Case 2
VC_DitherType$ = "Dithering with a coarse brush"
Case 3
VC_DitherType$ = "Dithering with a fine brush"
Case 4
VC_DitherType$ = "Line art dithering"
Case 5
VC_DitherType$ = "Device does gray scaling"
Default
VC_DitherType$ = "Unknown or Other"
EndSelect
If VidControl\GetIntegerProperty("ConfigManagerUserConfig") = 0
VC_ConfigManagerUserConfig$ = "False"
Else
VC_ConfigManagerUserConfig$ = "True"
EndIf
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Description", " " + VC_Description_Global$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Device ID", " " + VC_DeviceID$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Availability", " " + VC_Availability$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " General Chip Set", " " + VC_AdapterCompatibility$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " DAC Type", " " + VC_AdapterDACType$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Video Processor Type", " " + VC_VideoProcessor$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " vRAM", " " + VC_AdapterRAM$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Memory Type", " " + VC_VideoMemoryType$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Resolution (H x V)", " " + VC_Resolution$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Scan Mode", " " + VC_CurrentScanMode$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Bits Per Pixel", " " + VC_CurrentBitsPerPixel$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Refresh Rate", " " + VC_CurrentRefreshRate$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Number Of Colors", " " + VC_CurrentNumberOfColors$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Number Of Columns", " " + VC_CurrentNumberOfColumns$ + " (valid if in character mode)")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Current Number Of Rows", " " + VC_CurrentNumberOfRows$ + " (valid if in character mode)")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " ICM Intent", " " + VC_ICMIntent$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " ICM Method", " " + VC_ICMMethod$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Dither Type", " " + VC_DitherType$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Device Specific Pens", " " + VC_DeviceSpecificPens$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Number Of Color Planes", " " + VC_NumberOfColorPlanes$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Number Of Video Pages", " " + VC_NumberOfVideoPages$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Monochrome", " " + VC_Monochrome$ + " (If True, gray scale is used to display images.)")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Video Mode Description", " " + VC_VideoModeDescription$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Max Refresh Rate", " " + VC_MaxRefreshRate$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Min Refresh Rate", " " + VC_MinRefreshRate$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Power Management Supported", " " + VC_PowerManagementSupported$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Driver Date", " " + VC_DriverDate$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Driver Version", " " + VC_DriverVersion$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " INF Name", " " + VC_InfFilename$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " INF Section", " " + VC_InfSection$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Driver Name", " " + VC_InstalledDisplayDrivers$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " User Config", " " + VC_ConfigManagerUserConfig$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Last Error Description", " " + VC_ErrorDescription$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Status", " " + VC_Status$)
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "Graphics Card " + id$ + " Error Code Info", " " + VC_ConfigManagerErrorCode$)
VidControl\Release()
VidControl = colVidCont\GetNextObject()
Wend
colVidCont\Release()
EndIf
objWMIService\Release()
Else
MessageRequester("Error", "VidControl")
EndIf
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "=============================NOTES FOR THIS SECTION", "=============================")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "NOTE 1 (for Refresh Rate)", " " + "Optimal Refresh Rate occurs at monitors natural resolution and refesh rate.")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "NOTE 2 (for Refresh Rate)", " " + "A value of 0 (zero) indicates the default rate is being used, While 4294967295 indicates the optimal rate is being used.")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "NOTE 3", " The monitor settings should match the Graphics Card settings, the Graphics Card controls the monitor.")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "NOTE 4", " Hardware that is not compatible With Windows Display Driver Model (WDDM) will return inaccurate values.")
IniWrite("C:\systeminfo.txt","Graphics_Card_Info", "============", "End [Graphics_Card_Info] ============" + #CRLF$)
EndProcedure