Developer: RhinoScript
Summary: Demonstrates how to save information about your system's video card to a text file.
There may be an occasion where you might find it useful to save information about your system's video card to a text file, such as when you are encountering display problems with Rhino. You could then send this text file to tech@mcneel.com, along with a detailed description of what you are seeing, to get assistance in diagnosing your problem. The following sample script demonstrates this.
If you want to run the following script, just download it here.
To run the .rvb script, just extract it from the zip file onto your desktop, then drag it on top of Rhino and drop it.
Then follow the on-screen instructions, which are to find the file RhinoVideoInfo.txt on your desktop and attach it to an email to tech@mcneel.com along with a description of the problem you are having. Also, screenshots of any screen problems help.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' SaveVideoInfo.rvb -- April 2008 ' If this code works, it was written by Dale Fugier. ' If not, I don't know who wrote it. ' Works with Rhino 4.0. Option Explicit Sub SaveVideoInfo() Dim objShell, objNetwork, objFSO, objFolder, objStream Dim strDesktop, strFile, strName, strMsg Set objShell = CreateObject("WScript.Shell") Set objNetwork = CreateObject("WScript.Network") Set objFSO = CreateObject("Scripting.FileSystemObject") strName = "RhinoVideoInfo.txt" strDesktop = objShell.SpecialFolders("Desktop") strFile = strDeskTop & "\" & strName On Error Resume Next Set objStream = objFSO.CreateTextFile(strFile, True) If Err Then MsgBox Err.Description Exit Sub End If objStream.WriteLine "**************************" objStream.WriteLine "Rhino Video Info" objStream.WriteLine objStream.WriteLine "Computer Name = " & objNetwork.ComputerName objStream.WriteLine "Date and Time = " & CStr(Now) objStream.WriteLine "Rhino Build Date = " & CStr(Rhino.BuildDate) objStream.WriteLine "Rhino SDK Version = " & CStr(Rhino.SdkVersion) objStream.WriteLine "**************************" objStream.WriteLine Call DisplayConfiguration(objStream) Call VideoAdapterInformation(objStream) Call VideoControllerProperties(objStream) Call MonitorProperties(objStream) ' Uncomment the following line if you want the report to include ' all possible video card resolutions. ' Call VideoResolutions(objStream) objStream.Close strMsg = "A file named " & Chr(34) & strName & Chr(34) & VbCrLf strMsg = strMsg & "has been saved to your desktop." & VbCrLf & VbCrLf strMsg = strMsg & "If you are experiencing problems with Rhino," & VbCrLf strMsg = strMsg & "email this file to " & Chr(34) & "tech@mcneel.com" & Chr(34) & VbCrLf strMsg = strMsg & "along with a detailed description" & VbCrLf strMsg = strMsg & "of your problem." MsgBox strMsg, 64, "Rhinoceros" End Sub ' Returns a list of all the possible video display resolutions. Sub VideoResolutions(ByRef objStream) Dim strComputer, objWMIService, colItems, objItem objStream.WriteLine "**************************" objStream.WriteLine "Video Resolutions" objStream.WriteLine "**************************" objStream.WriteLine On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery ("Select * from CIM_VideoControllerResolution") For Each objItem In colItems objStream.WriteLine "Horizontal Resolution: " & objItem.HorizontalResolution objStream.WriteLine "Number Of Colors: " & objItem.NumberOfColors objStream.WriteLine "Refresh Rate: " & objItem.RefreshRate objStream.WriteLine "Scan Mode: " & objItem.ScanMode objStream.WriteLine "Setting ID: " & objItem.SettingID objStream.WriteLine "Vertical Resolution: " & objItem.VerticalResolution objStream.WriteLine Next End Sub ' Returns information about the current display settings. Sub DisplayConfiguration(ByRef objStream) Dim strComputer, objWMIService, colItems, objItem objStream.WriteLine "**************************" objStream.WriteLine "Display Configuration" objStream.WriteLine "**************************" objStream.WriteLine On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery ("Select * from Win32_DisplayConfiguration") For Each objItem In colItems objStream.WriteLine "Bits Per Pel: " & objItem.BitsPerPel objStream.WriteLine "Device Name: " & objItem.DeviceName objStream.WriteLine "Display Flags: " & objItem.DisplayFlags objStream.WriteLine "Display Frequency: " & objItem.DisplayFrequency objStream.WriteLine "Driver Version: " & objItem.DriverVersion objStream.WriteLine "Log Pixels: " & objItem.LogPixels objStream.WriteLine "Pels Height: " & objItem.PelsHeight objStream.WriteLine "Pels Width: " & objItem.PelsWidth objStream.WriteLine "Setting ID: " & objItem.SettingID objStream.WriteLine "Specification Version: " & objItem.SpecificationVersion objStream.WriteLine Next End Sub ' Returns information about the desktop monitor. Sub MonitorProperties(ByRef objStream) Dim strComputer, objWMIService, colItems, objItem objStream.WriteLine "**************************" objStream.WriteLine "Monitor Properties" objStream.WriteLine "**************************" objStream.WriteLine strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_DesktopMonitor") For Each objItem In colItems objStream.WriteLine "Availability: " & objItem.Availability objStream.WriteLine "Bandwidth: " & objItem.Bandwidth objStream.WriteLine "Description: " & objItem.Description objStream.WriteLine "Device ID: " & objItem.DeviceID objStream.WriteLine "Display Type: " & objItem.DisplayType objStream.WriteLine "Is Locked: " & objItem.IsLocked objStream.WriteLine "Monitor Manufacturer: " & objItem.MonitorManufacturer objStream.WriteLine "Monitor Type: " & objItem.MonitorType objStream.WriteLine "Name: " & objItem.Name objStream.WriteLine "Pixels Per X Logical Inch: " & objItem.PixelsPerXLogicalInch objStream.WriteLine "Pixels Per Y Logical Inch: " & objItem.PixelsPerYLogicalInch objStream.WriteLine "PNP Device ID: " & objItem.PNPDeviceID objStream.WriteLine "Screen Height: " & objItem.ScreenHeight objStream.WriteLine "Screen Width: " & objItem.ScreenWidth objStream.WriteLine Next End Sub ' Returns information about the video adapters. Sub VideoAdapterInformation(ByRef objStream) Dim strComputer, objWMIService, colItems, objItem objStream.WriteLine "**************************" objStream.WriteLine "Video Adapter Information" objStream.WriteLine "**************************" objStream.WriteLine On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery ("Select * from Win32_DisplayControllerConfiguration") For Each objItem In colItems objStream.WriteLine "Bits Per Pixel: " & objItem.BitsPerPixel objStream.WriteLine "Color Planes: " & objItem.ColorPlanes objStream.WriteLine "Device Entries in a Color Table: " & objItem.DeviceEntriesInAColorTable objStream.WriteLine "Device Specific Pens: " & objItem.DeviceSpecificPens objStream.WriteLine "Horizontal Resolution: " & objItem.HorizontalResolution objStream.WriteLine "Name: " & objItem.Name objStream.WriteLine "Refresh Rate: " & objItem.RefreshRate objStream.WriteLine "Setting ID: " & objItem.SettingID objStream.WriteLine "Vertical Resolution: " & objItem.VerticalResolution objStream.WriteLine "Video Mode: " & objItem.VideoMode objStream.WriteLine Next End Sub ' Retrieves information about the video controller. Sub VideoControllerProperties(ByRef objStream) Dim strComputer, objWMIService, colItems, objItem, strCapability objStream.WriteLine "**************************" objStream.WriteLine "Video Controller Properties" objStream.WriteLine "**************************" objStream.WriteLine On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery ("Select * from Win32_VideoController") For Each objItem In colItems For Each strCapability In objItem.AcceleratorCapabilities objStream.WriteLine "Accelerator Capability: " & strCapability Next objStream.WriteLine "Adapter Compatibility: " & objItem.AdapterCompatibility objStream.WriteLine "Adapter DAC Type: " & objItem.AdapterDACType objStream.WriteLine "Adapter RAM: " & objItem.AdapterRAM objStream.WriteLine "Availability: " & objItem.Availability objStream.WriteLine "Color Table Entries: " & objItem.ColorTableEntries objStream.WriteLine "Current Bits Per Pixel: " & objItem.CurrentBitsPerPixel objStream.WriteLine "Current Horizontal Resolution: " & objItem.CurrentHorizontalResolution objStream.WriteLine "Current Number of Colors: " & objItem.CurrentNumberOfColors objStream.WriteLine "Current Number of Columns: " & objItem.CurrentNumberOfColumns objStream.WriteLine "Current Number of Rows: " & objItem.CurrentNumberOfRows objStream.WriteLine "Current Refresh Rate: " & objItem.CurrentRefreshRate objStream.WriteLine "Current Scan Mode: " & objItem.CurrentScanMode objStream.WriteLine "Current Vertical Resolution: " & objItem.CurrentVerticalResolution objStream.WriteLine "Description: " & objItem.Description objStream.WriteLine "Device ID: " & objItem.DeviceID objStream.WriteLine "Device Specific Pens: " & objItem.DeviceSpecificPens objStream.WriteLine "Dither Type: " & objItem.DitherType objStream.WriteLine "Driver Date: " & objItem.DriverDate objStream.WriteLine "Driver Version: " & objItem.DriverVersion objStream.WriteLine "ICM Intent: " & objItem.ICMIntent objStream.WriteLine "ICM Method: " & objItem.ICMMethod objStream.WriteLine "INF Filename: " & objItem.InfFilename objStream.WriteLine "INF Section: " & objItem.InfSection objStream.WriteLine "Installed Display Drivers: " & objItem.InstalledDisplayDrivers objStream.WriteLine "Maximum Memory Supported: " & objItem.MaxMemorySupported objStream.WriteLine "Maximum Number Controlled: " & objItem.MaxNumberControlled objStream.WriteLine "Maximum Refresh Rate: " & objItem.MaxRefreshRate objStream.WriteLine "Minimum Refresh Rate: " & objItem.MinRefreshRate objStream.WriteLine "Monochrome: " & objItem.Monochrome objStream.WriteLine "Name: " & objItem.Name objStream.WriteLine "Number of Color Planes: " & objItem.NumberOfColorPlanes objStream.WriteLine "Number of Video Pages: " & objItem.NumberOfVideoPages objStream.WriteLine "PNP Device ID: " & objItem.PNPDeviceID objStream.WriteLine "Reserved System Palette Entries: " & objItem.ReservedSystemPaletteEntries objStream.WriteLine "Specification Version: " & objItem.SpecificationVersion objStream.WriteLine "System Palette Entries: " & objItem.SystemPaletteEntries objStream.WriteLine "Video Architecture: " & objItem.VideoArchitecture objStream.WriteLine "Video Memory Type: " & objItem.VideoMemoryType objStream.WriteLine "Video Mode: " & objItem.VideoMode objStream.WriteLine "Video Mode Description: " & objItem.VideoModeDescription objStream.WriteLine "Video Processor: " & objItem.VideoProcessor objStream.WriteLine Next End Sub ' Rhino.AddStartUpScript Rhino.LastLoadedScriptFile ' Rhino.AddAlias "SavePlugInList", "_-RunScript (SaveVideoInfo)" ' Run it! Call SaveVideoInfo