home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 February / Chip_2004-02_cd1.bin / zkuste / konfig / download / msic / D7 / MSI_Overview.pas < prev    next >
Pascal/Delphi Source File  |  2003-10-21  |  74KB  |  2,441 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {         MiTeC System Information Component            }
  4. {                System Overview                        }
  5. {           version 8.5 for Delphi 5,6,7                }
  6. {                                                       }
  7. {       Copyright ⌐ 1997,2003 Michal Mutl               }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11.  
  12. {$INCLUDE MITEC_DEF.INC}
  13.  
  14. unit MSI_Overview;
  15.  
  16. interface
  17.  
  18. uses
  19.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  20.   MSI_GUI, ComCtrls, StdCtrls, ExtCtrls, CheckLst,
  21.   ImgList, Mask, Menus, Buttons, MSI_Storage, MSI_USB;
  22.  
  23. const
  24.   iiComputer      = 0;
  25.   iiSystem        = 1;
  26.   iiDisplay       = 2;
  27.   iiMonitor       = 3;
  28.   iiVolumes       = 4;
  29.   iiFDD           = 5;
  30.   iiHDD           = 6;
  31.   iiCDROM         = 7;
  32.   iiTape          = 8;
  33.   iiAPM           = 9;
  34.   iiImaging       = 10;
  35.   iiKeyboard      = 11;
  36.   iiMouse         = 12;
  37.   iiModem         = 13;
  38.   iiPort          = 14;
  39.   iiAdapter       = 15;
  40.   iiPackage       = 16;
  41.   iiSCSI          = 17;
  42.   iiDriver        = 18;
  43.   iiSound         = 19;
  44.   iiUSB           = 20;
  45.   iiGame          = 21;
  46.   iiNet           = 22;
  47.   iiProcess       = 23;
  48.   iiPCMCIA        = 24;
  49.   iiChanger       = 25;
  50.   iiHID           = 26;
  51.   iiGPS           = 27;
  52.   iiReader        = 28;
  53.   iiInfrared      = 29;
  54.   iiMIDI          = 30;
  55.   iiWave          = 31;
  56.   iiMixer         = 32;
  57.   iiAUX           = 33;
  58.   iiDirectX       = 34;
  59.   iiPrinter       = 35;
  60.   iiPrinterDef    = 36;
  61.   iiNetPrinter    = 37;
  62.   iiNetPrinterDef = 38;
  63.   iiController    = 39;
  64.   iiMemory        = 40;
  65.   iiCPU           = 41;
  66.  
  67. type
  68.   TfrmMSI_Overview = class(TForm)
  69.     Panel1: TPanel;
  70.     Panel2: TPanel;
  71.     bRefresh: TButton;
  72.     Panel3: TPanel;
  73.     pc: TPageControl;
  74.     tsWksta: TTabSheet;
  75.     tsOS: TTabSheet;
  76.     tsCPU: TTabSheet;
  77.     pNumLock: TPanel;
  78.     pCapsLock: TPanel;
  79.     pScrollLock: TPanel;
  80.     bOK: TButton;
  81.     Image2: TImage;
  82.     lVersion: TLabel;
  83.     lVerNo: TLabel;
  84.     Bevel1: TBevel;
  85.     bEnvironment: TButton;
  86.     Image3: TImage;
  87.     lCPU: TLabel;
  88.     tsMemory: TTabSheet;
  89.     tsDisplay: TTabSheet;
  90.     Image5: TImage;
  91.     cbDisplay: TEdit;
  92.     Label33: TLabel;
  93.     tsAPM: TTabSheet;
  94.     GroupBox13: TGroupBox;
  95.     Label38: TLabel;
  96.     Label39: TLabel;
  97.     eAC: TEdit;
  98.     eBat: TEdit;
  99.     Image6: TImage;
  100.     GroupBox14: TGroupBox;
  101.     Label40: TLabel;
  102.     Label41: TLabel;
  103.     eBatFull: TEdit;
  104.     eBatLife: TEdit;
  105.     tsMedia: TTabSheet;
  106.     Label42: TLabel;
  107.     Panel5: TPanel;
  108.     img: TImageList;
  109.     tsNetwork: TTabSheet;
  110.     tsDevices: TTabSheet;
  111.     psd: TPrinterSetupDialog;
  112.     tsPrinters: TTabSheet;
  113.     Label48: TLabel;
  114.     Panel7: TPanel;
  115.     lvPrinter: TListView;
  116.     bPrint: TButton;
  117.     tsEngines: TTabSheet;
  118.     GroupBox17: TGroupBox;
  119.     Image7: TImage;
  120.     lODBC: TLabel;
  121.     lBDE: TLabel;
  122.     tsDrives: TTabSheet;
  123.     Label54: TLabel;
  124.     cbDrive: TComboBox;
  125.     GroupBox19: TGroupBox;
  126.     imgDrive: TImage;
  127.     lDriveType: TLabel;
  128.     clbFlags: TCheckListBox;
  129.     Label55: TLabel;
  130.     Label56: TLabel;
  131.     eUNC: TEdit;
  132.     eDSN: TEdit;
  133.     Bevel3: TBevel;
  134.     lCapacity: TLabel;
  135.     lFree: TLabel;
  136.     lBPS: TLabel;
  137.     lSPC: TLabel;
  138.     lTC: TLabel;
  139.     lFC: TLabel;
  140.     Bevel4: TBevel;
  141.     bReport: TButton;
  142.     ReportMenu: TPopupMenu;
  143.     pmAll: TMenuItem;
  144.     pmSelected: TMenuItem;
  145.     gDisk: TProgressBar;
  146.     gAPM: TProgressBar;
  147.     tsTZ: TTabSheet;
  148.     Panel12: TPanel;
  149.     Image10: TImage;
  150.     gbStd: TGroupBox;
  151.     Label12: TLabel;
  152.     Label73: TLabel;
  153.     eStdStart: TEdit;
  154.     eStdBias: TEdit;
  155.     eTZ: TEdit;
  156.     Label74: TLabel;
  157.     gbDay: TGroupBox;
  158.     Label75: TLabel;
  159.     Label76: TLabel;
  160.     Label77: TLabel;
  161.     edayStart: TEdit;
  162.     eDayBias: TEdit;
  163.     pcCPU: TPageControl;
  164.     tsID: TTabSheet;
  165.     tsFeatures: TTabSheet;
  166.     GroupBox5: TGroupBox;
  167.     lFamily: TLabel;
  168.     lSerial: TLabel;
  169.     lVendor: TLabel;
  170.     GroupBox6: TGroupBox;
  171.     Panel4: TPanel;
  172.     clbCPU: TCheckListBox;
  173.     lDAO: TLabel;
  174.     tsAbout: TTabSheet;
  175.     FooterPanel: TPanel;
  176.     sbMail: TSpeedButton;
  177.     TitlePanel: TPanel;
  178.     imgIcon: TImage;
  179.     Panel16: TPanel;
  180.     Memo: TMemo;
  181.     tsStartup: TTabSheet;
  182.     tsSoftware: TTabSheet;
  183.     tcStartup: TTabControl;
  184.     bNTSpec: TButton;
  185.     lvMedia: TListView;
  186.     Panel18: TPanel;
  187.     lvSound: TListView;
  188.     Label14: TLabel;
  189.     Panel20: TPanel;
  190.     lvSW: TListView;
  191.     Panel21: TPanel;
  192.     lvStartup: TListView;
  193.     lTitle: TLabel;
  194.     lVer: TLabel;
  195.     lADO: TLabel;
  196.     lCSD: TLabel;
  197.     lDVD: TLabel;
  198.     pcOS: TPageControl;
  199.     tsGeneral: TTabSheet;
  200.     tsFolders: TTabSheet;
  201.     tsInternet: TTabSheet;
  202.     Label9: TLabel;
  203.     Label10: TLabel;
  204.     Label11: TLabel;
  205.     Label15: TLabel;
  206.     ePID: TEdit;
  207.     eRegUser: TEdit;
  208.     eRegOrg: TEdit;
  209.     ePKey: TEdit;
  210.     Panel15: TPanel;
  211.     FolderList: TListView;
  212.     Label43: TLabel;
  213.     Label44: TLabel;
  214.     Label45: TLabel;
  215.     Label46: TLabel;
  216.     eBrowser: TEdit;
  217.     eProxy: TEdit;
  218.     email: TEdit;
  219.     lCT: TLabel;
  220.     Bevel2: TBevel;
  221.     eMachine: TEdit;
  222.     pcEng: TPageControl;
  223.     tsDirectX: TTabSheet;
  224.     tsASPI: TTabSheet;
  225.     Panel19: TPanel;
  226.     lvDirectX: TListView;
  227.     ilEng: TImageList;
  228.     Panel22: TPanel;
  229.     lvASPI: TListView;
  230.     lASPI: TLabel;
  231.     Bevel5: TBevel;
  232.     lDirectX: TLabel;
  233.     Bevel6: TBevel;
  234.     tsLocale: TTabSheet;
  235.     Panel17: TPanel;
  236.     LocaleList: TListView;
  237.     Panel23: TPanel;
  238.     pcMem: TPageControl;
  239.     tsmemGen: TTabSheet;
  240.     GroupBox7: TGroupBox;
  241.     Image4: TImage;
  242.     Label16: TLabel;
  243.     Label17: TLabel;
  244.     Label18: TLabel;
  245.     Label19: TLabel;
  246.     Label20: TLabel;
  247.     Label21: TLabel;
  248.     Label22: TLabel;
  249.     Label23: TLabel;
  250.     Label24: TLabel;
  251.     Label25: TLabel;
  252.     Label26: TLabel;
  253.     Label27: TLabel;
  254.     ePT: TEdit;
  255.     ePF: TEdit;
  256.     eFT: TEdit;
  257.     eFF: TEdit;
  258.     eVT: TEdit;
  259.     eVF: TEdit;
  260.     GroupBox9: TGroupBox;
  261.     Label28: TLabel;
  262.     Label29: TLabel;
  263.     Label30: TLabel;
  264.     Label31: TLabel;
  265.     Label32: TLabel;
  266.     eAG: TEdit;
  267.     eAppAddr: TEdit;
  268.     ePS: TEdit;
  269.     tsmemMeas: TTabSheet;
  270.     GroupBox8: TGroupBox;
  271.     gMemory: TProgressBar;
  272.     GroupBox1: TGroupBox;
  273.     lGDI: TLabel;
  274.     lSystem: TLabel;
  275.     lUser: TLabel;
  276.     pbGDI: TProgressBar;
  277.     pbSystem: TProgressBar;
  278.     pbUser: TProgressBar;
  279.     Label13: TLabel;
  280.     Label50: TLabel;
  281.     gPhys: TProgressBar;
  282.     Label49: TLabel;
  283.     gPage: TProgressBar;
  284.     Label51: TLabel;
  285.     gVirt: TProgressBar;
  286.     Panel24: TPanel;
  287.     pcMachine: TPageControl;
  288.     tsMachineGeneral: TTabSheet;
  289.     tsMachineSMBIOS: TTabSheet;
  290.     gbMID: TGroupBox;
  291.     Label1: TLabel;
  292.     Label2: TLabel;
  293.     Image1: TImage;
  294.     eWksta: TEdit;
  295.     eUser: TEdit;
  296.     GroupBox2: TGroupBox;
  297.     GroupBox3: TGroupBox;
  298.     Label7: TLabel;
  299.     Label8: TLabel;
  300.     eLastBoot: TEdit;
  301.     eSysTime: TEdit;
  302.     Panel25: TPanel;
  303.     Label60: TLabel;
  304.     eSMVer: TEdit;
  305.     Bevel7: TBevel;
  306.     pcSM: TPageControl;
  307.     tsSMSystem: TTabSheet;
  308.     GroupBox4: TGroupBox;
  309.     Label61: TLabel;
  310.     Label62: TLabel;
  311.     lSysVer: TLabel;
  312.     lSysSer: TLabel;
  313.     lSysID: TLabel;
  314.     eSysMod: TEdit;
  315.     eSysMan: TEdit;
  316.     eSysVer: TEdit;
  317.     eSysSer: TEdit;
  318.     eSysID: TEdit;
  319.     tsSMMB: TTabSheet;
  320.     GroupBox15: TGroupBox;
  321.     Label67: TLabel;
  322.     Label68: TLabel;
  323.     Label70: TLabel;
  324.     Label71: TLabel;
  325.     eMBMod: TEdit;
  326.     eMBMan: TEdit;
  327.     eMBVer: TEdit;
  328.     eMBSer: TEdit;
  329.     tsSMCH: TTabSheet;
  330.     GroupBox18: TGroupBox;
  331.     Label78: TLabel;
  332.     Label79: TLabel;
  333.     Label80: TLabel;
  334.     Label81: TLabel;
  335.     eCHMod: TEdit;
  336.     eCHMan: TEdit;
  337.     eCHVer: TEdit;
  338.     eCHSer: TEdit;
  339.     tsSMCPU: TTabSheet;
  340.     tsSMMem: TTabSheet;
  341.     Panel26: TPanel;
  342.     lvMem: TListView;
  343.     tsSMPort: TTabSheet;
  344.     Panel27: TPanel;
  345.     lvPort: TListView;
  346.     tsSMSlot: TTabSheet;
  347.     Panel28: TPanel;
  348.     lvSlot: TListView;
  349.     tsSMTables: TTabSheet;
  350.     Panel29: TPanel;
  351.     lvTables: TListView;
  352.     Label66: TLabel;
  353.     eSMTables: TEdit;
  354.     SpeedButton1: TSpeedButton;
  355.     Panel6: TPanel;
  356.     pcNet: TPageControl;
  357.     tsNetGeneral: TTabSheet;
  358.     Label47: TLabel;
  359.     Panel13: TPanel;
  360.     lvNetwork: TListView;
  361.     GroupBox16: TGroupBox;
  362.     Panel14: TPanel;
  363.     Label69: TLabel;
  364.     lbMAC: TListBox;
  365.     Panel30: TPanel;
  366.     Label64: TLabel;
  367.     lbIP: TListBox;
  368.     bProto: TButton;
  369.     bServ: TButton;
  370.     bCli: TButton;
  371.     tsNetWinsock: TTabSheet;
  372.     Label57: TLabel;
  373.     Label58: TLabel;
  374.     Label59: TLabel;
  375.     eWSDesc: TEdit;
  376.     eWSVer: TEdit;
  377.     eWSStat: TEdit;
  378.     tsNetTCPIP: TTabSheet;
  379.     Label72: TLabel;
  380.     Label82: TLabel;
  381.     eHost: TEdit;
  382.     eDomain: TEdit;
  383.     Panel31: TPanel;
  384.     AdapterList: TListView;
  385.     Bevel8: TBevel;
  386.     cbxProxy: TCheckBox;
  387.     cbxRouting: TCheckBox;
  388.     cbxDNS: TCheckBox;
  389.     cbAdapters: TComboBox;
  390.     Label87: TLabel;
  391.     tsSMCaches: TTabSheet;
  392.     Panel32: TPanel;
  393.     lvCache: TListView;
  394.     ePA: TEdit;
  395.     Label91: TLabel;
  396.     cbxDHCP: TCheckBox;
  397.     cbxWINS: TCheckBox;
  398.     Label92: TLabel;
  399.     eNode: TEdit;
  400.     Label93: TLabel;
  401.     eDNS: TEdit;
  402.     Label94: TLabel;
  403.     eAT: TEdit;
  404.     DNSBox: TListBox;
  405.     Label95: TLabel;
  406.     Panel33: TPanel;
  407.     tsCache: TTabSheet;
  408.     GroupBox20: TGroupBox;
  409.     Panel34: TPanel;
  410.     lModel: TLabel;
  411.     lStepping: TLabel;
  412.     lnamestring: TLabel;
  413.     lFriendlyname: TLabel;
  414.     lType: TLabel;
  415.     lLevel1: TLabel;
  416.     lLevel2: TLabel;
  417.     lLevel3: TLabel;
  418.     CacheBox: TListBox;
  419.     Label63: TLabel;
  420.     lFreq: TLabel;
  421.     sd: TSaveDialog;
  422.     Image8: TImage;
  423.     Image9: TImage;
  424.     lCodename: TLabel;
  425.     pcDisplay: TPageControl;
  426.     tsDisplay1: TTabSheet;
  427.     tsDisplay2: TTabSheet;
  428.     GroupBox10: TGroupBox;
  429.     Label34: TLabel;
  430.     Label35: TLabel;
  431.     Label36: TLabel;
  432.     Label37: TLabel;
  433.     Label65: TLabel;
  434.     eChip: TEdit;
  435.     eDAC: TEdit;
  436.     eMem: TEdit;
  437.     bModes: TButton;
  438.     eBIOSString: TEdit;
  439.     GroupBox12: TGroupBox;
  440.     eBIOS: TEdit;
  441.     Panel35: TPanel;
  442.     lvDisp: TListView;
  443.     GroupBox11: TPanel;
  444.     bCurve: TButton;
  445.     bLine: TButton;
  446.     bPoly: TButton;
  447.     bRaster: TButton;
  448.     bText: TButton;
  449.     Button1: TButton;
  450.     Button2: TButton;
  451.     tsStorage: TTabSheet;
  452.     tsBIOS: TTabSheet;
  453.     GroupBox21: TGroupBox;
  454.     Label3: TLabel;
  455.     Label4: TLabel;
  456.     Label5: TLabel;
  457.     Label6: TLabel;
  458.     Label53: TLabel;
  459.     eBIOSVendor: TEdit;
  460.     eBIOSVer: TEdit;
  461.     eBIOSDate: TEdit;
  462.     eBIOSSize: TEdit;
  463.     Label97: TLabel;
  464.     Label98: TLabel;
  465.     Label99: TLabel;
  466.     eSBCopy: TEdit;
  467.     eSBName: TEdit;
  468.     eSBDate: TEdit;
  469.     Label100: TLabel;
  470.     eSBExt: TEdit;
  471.     Label101: TLabel;
  472.     edate: TEdit;
  473.     Label102: TLabel;
  474.     Panel36: TPanel;
  475.     pcDev: TPageControl;
  476.     tsDevTree: TTabSheet;
  477.     tsDevRes: TTabSheet;
  478.     Panel8: TPanel;
  479.     Tree: TTreeView;
  480.     Panel9: TPanel;
  481.     bProps: TButton;
  482.     bRes: TButton;
  483.     Panel37: TPanel;
  484.     ResList: TListView;
  485.     tsSMMC: TTabSheet;
  486.     GroupBox22: TGroupBox;
  487.     Label103: TLabel;
  488.     Label104: TLabel;
  489.     Label105: TLabel;
  490.     Label106: TLabel;
  491.     Label107: TLabel;
  492.     eMCI: TEdit;
  493.     eMCSS: TEdit;
  494.     eMCST: TEdit;
  495.     eMCSV: TEdit;
  496.     eMCMS: TEdit;
  497.     Label108: TLabel;
  498.     Label109: TLabel;
  499.     eMCSC: TEdit;
  500.     tsUSB: TTabSheet;
  501.     ilUSB: TImageList;
  502.     Panel38: TPanel;
  503.     USBTree: TTreeView;
  504.     Panel10: TPanel;
  505.     StorageTree: TTreeView;
  506.     ilStorage: TImageList;
  507.     tsProcesses: TTabSheet;
  508.     Panel11: TPanel;
  509.     ProcList: TListView;
  510.     Label83: TLabel;
  511.     eCHAT: TEdit;
  512.     Label84: TLabel;
  513.     eMBAT: TEdit;
  514.     Label85: TLabel;
  515.     eMBLIC: TEdit;
  516.     lvProcs: TListView;
  517.     tsOBD: TTabSheet;
  518.     Panel39: TPanel;
  519.     lvOBD: TListView;
  520.     lHF: TLabel;
  521.     bES: TButton;
  522.     tsMemDev: TTabSheet;
  523.     Panel40: TPanel;
  524.     lvMemDev: TListView;
  525.     tsMonitor: TTabSheet;
  526.     cbMon: TComboBox;
  527.     Image11: TImage;
  528.     GroupBox23: TGroupBox;
  529.     Label52: TLabel;
  530.     Label86: TLabel;
  531.     Label90: TLabel;
  532.     eMonName: TEdit;
  533.     eMonSize: TEdit;
  534.     eMonSN: TEdit;
  535.     Label88: TLabel;
  536.     eMonMan: TEdit;
  537.     Label89: TLabel;
  538.     eGamma: TEdit;
  539.     Label96: TLabel;
  540.     eMonDate: TEdit;
  541.     Label110: TLabel;
  542.     eEDID: TEdit;
  543.     Label111: TLabel;
  544.     eMonMod: TEdit;
  545.     procedure FormCreate(Sender: TObject);
  546.     procedure cmRefresh(Sender: TObject);
  547.     procedure cmClose(Sender: TObject);
  548.     procedure cmEnvironment(Sender: TObject);
  549.     procedure cmCaps(Sender: TObject);
  550.     procedure cmPrintSetup(Sender: TObject);
  551.     procedure cbDriveChange(Sender: TObject);
  552.     procedure cmReportClick(Sender: TObject);
  553.     procedure cmReportAll(Sender: TObject);
  554.     procedure cmReportCurrent(Sender: TObject);
  555.     procedure clbClickCheck(Sender: TObject);
  556.     procedure cmModes(Sender: TObject);
  557.     procedure cmProto(Sender: TObject);
  558.     procedure cmServ(Sender: TObject);
  559.     procedure cmCli(Sender: TObject);
  560.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  561.     procedure TreeChange(Sender: TObject; Node: TTreeNode);
  562.     procedure cmProps(Sender: TObject);
  563.     procedure cmMail(Sender: TObject);
  564.     procedure tcStartupChange(Sender: TObject);
  565.     procedure cmNTSpec(Sender: TObject);
  566.     procedure cmWeb(Sender: TObject);
  567.     procedure cbAdaptersChange(Sender: TObject);
  568.     procedure cbxClick(Sender: TObject);
  569.     procedure FormDestroy(Sender: TObject);
  570.     procedure cmRes(Sender: TObject);
  571.     procedure USBTreeCustomDrawItem(Sender: TCustomTreeView;
  572.       Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  573.     procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
  574.     procedure StorageTreeCustomDrawItem(Sender: TCustomTreeView;
  575.       Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  576.     procedure bESClick(Sender: TObject);
  577.     procedure cbMonChange(Sender: TObject);
  578.   private
  579.     FPages: TInfoPages;
  580.     FSysInfo: TMSystemInfo;
  581.     FShowRepBut: Boolean;
  582.     procedure SeTInfoPages(const Value: TInfoPages);
  583.     procedure SetShowRepBut(const Value: Boolean);
  584.     procedure SetCaptionText(const Value: string);
  585.     function FindUSBNode(AIndex: Integer): TTreeNode;
  586.   public
  587.     Report :TStringList;
  588.  
  589.     property DisplayedPages: TInfoPages read FPages write SeTInfoPages;
  590.     property SysInfo: TMSystemInfo read FSysInfo write FSysInfo;
  591.     property ShowReportButton: Boolean read FShowRepBut write SetShowRepBut;
  592.     property CaptionText: string Write SetCaptionText;
  593.  
  594.     procedure RefreshOverview(ForceRefresh: Boolean);
  595.     procedure GetInfo;
  596.  
  597.     procedure GetWkstaInfo;
  598.     procedure GetOSInfo;
  599.     procedure GetCPUInfo;
  600.     procedure GetMemoryInfo;
  601.     procedure GetDisplayInfo;
  602.     procedure GetMonitorInfo;
  603.     procedure GetAPMInfo;
  604.     procedure GetMediaInfo;
  605.     procedure GetNetInfo;
  606.     procedure GetDeviceInfo;
  607.     procedure GetEngInfo;
  608.     procedure GetDriveInfo;
  609.     procedure GetTZInfo;
  610.     procedure GetPrintInfo;
  611.     procedure GetStartupInfo;
  612.     procedure GetSWInfo;
  613.     procedure GetStorageInfo;
  614.     procedure GetUSBInfo;
  615.     procedure GetProcessesInfo;
  616.   end;
  617.  
  618. var
  619.   frmMSI_Overview: TfrmMSI_Overview;
  620.  
  621. implementation
  622.  
  623. uses ShellAPI, ShlObj, MiTeC_Routines, MSI_Devices, MSI_DetailDlg, MSI_OS, MSI_APM,
  624.   MSI_Startup, MSI_Common, MiTeC_Datetime, MSI_SMBIOS,
  625.   MSI_Network, MSI_CPU, MiTeC_StrUtils, MSI_Machine, MSI_ResourcesDlg, MiTeC_NTDDK,
  626.   MiTeC_USB, MiTeC_WinIOCTL, MSI_Display;
  627.  
  628. {$R *.DFM}
  629.  
  630. const
  631.   cDeviceImageIndex: array[TDeviceClass] of integer =
  632.                       (iiAPM, iiSystem, iiVolumes, iiDisplay, iiCDROM, iiVolumes,
  633.                        iiFDD, iiGPS, iiHID, iiVolumes, iiDriver, iiImaging,
  634.                        iiInfrared, iiKeyboard, iiChanger, iiDriver, iiMouse, iiModem,
  635.                        iiMonitor, iiReader, iiPort, iiAdapter, iiDriver,
  636.                        iiPackage, iiDriver, iiAdapter, iiPort, iiPrinter, iiSCSI,
  637.                        iiReader, iiSound, iiHDD, iiSystem, iiTape, iiController,
  638.                        iiTape, iiUSB, iiCPU);
  639.  
  640. { TfrmMSI_Overview }
  641.  
  642. procedure TfrmMSI_Overview.GetWkstaInfo;
  643. var
  644.   i: Integer;
  645. begin
  646.   with SysInfo.Machine do begin
  647.     if Trim(Computer)<>'' then
  648.       eMachine.Text:=' '+Computer+' ';
  649.     eWksta.text:=Name;
  650.     eUser.text:=User;
  651.     eSBCopy.Text:=BIOS.Copyright;
  652.     eSBName.Text:=BIOS.Name;
  653.     eSBDate.Text:=BIOS.Date;
  654.     eSBExt.Text:=BIOS.ExtendedInfo;
  655.     eLastBoot.text:=datetimetostr(LastBoot);
  656.     eSysTime.text:=formatseconds(SystemUpTime,true,false,false);
  657.     if NumLock then
  658.       pNumLock.color:=clLime
  659.     else
  660.       pNumLock.color:=clSilver;
  661.     if CapsLock then
  662.       pCapsLock.color:=clLime
  663.     else
  664.       pCapsLock.color:=clSilver;
  665.     if ScrollLock then
  666.       pScrollLock.color:=clLime
  667.     else
  668.       pScrollLock.color:=clSilver;
  669.  
  670.     with SMBIOS do begin
  671.       eSMVer.Text:=Version;
  672.       eSMTables.Text:=Format('%d',[Length(StructTables)]);
  673.  
  674.       if BIOSVendor='' then
  675.         eBIOSVendor.Text:=BIOS.Copyright
  676.       else
  677.         eBIOSVendor.Text:=BIOSVendor;
  678.       if BIOSVersion='' then
  679.         eBIOSVer.Text:=BIOS.Name+' '+BIOS.ExtendedInfo
  680.       else
  681.         eBIOSVer.Text:=BIOSVersion;
  682.       if BIOSDate='' then
  683.         eBIOSDate.Text:=BIOS.Date
  684.       else
  685.         eBIOSDate.Text:=BIOSDate;
  686.       eBIOSSize.Text:=Format('%d',[BIOSSize]);
  687.  
  688.       eSysMod.Text:=SystemModel;
  689.       eSysMan.Text:=SystemManufacturer;
  690.       eSysVer.Text:=SystemVersion;
  691.       eSysSer.Text:=SystemSerial;
  692.       eSysID.Text:=SystemUUID;
  693.  
  694.       eMBMod.Text:=MainBoardModel;
  695.       eMBMan.Text:=MainBoardManufacturer;
  696.       eMBVer.Text:=MainBoardVersion;
  697.       eMBSer.Text:=MainBoardSerial;
  698.       eMBAT.Text:=MainBoardAssetTag;
  699.       eMBLIC.Text:=MainBoardLocationInChassis;
  700.  
  701.       eCHMod.Text:=ChassisTypes[ChassisModel];
  702.       eCHMan.Text:=ChassisManufacturer;
  703.       eCHVer.Text:=ChassisVersion;
  704.       eCHSer.Text:=ChassisSerial;
  705.       eCHAT.Text:=ChassisAssetTag;
  706.  
  707.       eMCI.Text:=Format('%s / %s',[InterleaveSupports[MemCtrlCurrentInterleave],
  708.                                    InterleaveSupports[MemCtrlSupportedInterleave]]);
  709.       eMCSS.Text:=GetMemorySpeedStr(MemCtrlSupportedSpeeds);
  710.       eMCST.Text:=GetMemoryTypeStr(MemCtrlSupportedTypes);
  711.       eMCSV.Text:=GetMemoryVoltageStr(MemCtrlSupportedVoltages);
  712.       eMCMS.Text:=Format('%d',[MemCtrlMaxSize]);
  713.       eMCSC.Text:=Format('%d',[MemCtrlSlotCount]);
  714.  
  715.       lvProcs.Items.Clear;
  716.       for i:=0 to ProcessorCount-1 do
  717.         with lvProcs.Items.Add do begin
  718.           Caption:=Processor[i].Manufacturer;
  719.           SubItems.Add(Processor[i].Version);
  720.           SubItems.Add(Processor[i].Socket);
  721.           SubItems.Add(Upgrades[Processor[i].Upgrade]);
  722.           SubItems.Add(Format('%1.1f V',[Processor[i].Voltage]));
  723.           SubItems.Add(Format('%d MHz',[Processor[i].Frequency]));
  724.           SubItems.Add(Format('%d MHz',[Processor[i].ExternalClock]));
  725.           SubItems.Add(Processor[i].SerialNumber);
  726.           SubItems.Add(Processor[i].AssetTag);
  727.           SubItems.Add(Processor[i].PartNumber);
  728.           ImageIndex:=iiCPU;
  729.         end;
  730.  
  731.       lvCache.Items.Clear;
  732.       for i:=0 to CacheCount-1 do
  733.         with lvCache.Items.Add do begin
  734.           Caption:=Cache[i].Designation;
  735.           SubItems.Add(CacheTypes[Cache[i].Typ]);
  736.           SubItems.Add(CacheAssociativities[Cache[i].Associativity]);
  737.           SubItems.Add(SRAMTypes[Cache[i].SRAMType]);
  738.           SubItems.Add(Format('%d KB',[Cache[i].InstalledSize]));
  739.           SubItems.Add(Format('%d KB',[Cache[i].MaxSize]));
  740.           SubItems.Add(Format('%d ns',[Cache[i].Speed]));
  741.           ImageIndex:=iiMemory;
  742.         end;
  743.  
  744.       lvMem.Items.Clear;
  745.       for i:=0 to MemoryModuleCount-1 do
  746.         with lvMem.Items.Add do begin
  747.           Caption:=MemoryModule[i].Socket;
  748.           SubItems.Add(GetMemoryTypeStr(MemoryModule[i].Types));
  749.           SubItems.Add(Format('%d MB',[MemoryModule[i].Size]));
  750.           SubItems.Add(Format('%d ns',[MemoryModule[i].Speed]));
  751.           ImageIndex:=iiMemory;
  752.         end;
  753.  
  754.       lvMemDev.Items.Clear;
  755.       for i:=0 to MemoryDeviceCount-1 do
  756.         with lvMemDev.Items.Add do begin
  757.           Caption:=MemoryDevice[i].DeviceLocator;
  758.           SubItems.Add(MemoryDevice[i].BankLocator);
  759.           SubItems.Add(MemoryDeviceTypes[MemoryDevice[i].Device]);
  760.           SubItems.Add(GetMemoryTypeDetailsStr(MemoryDevice[i].TypeDetails));
  761.           SubItems.Add(MemoryFormFactors[MemoryDevice[i].FormFactor]);
  762.           SubItems.Add(Format('%d MB',[MemoryDevice[i].Size]));
  763.           SubItems.Add(Format('%d MHz',[MemoryDevice[i].Speed]));
  764.           SubItems.Add(Format('%d b',[MemoryDevice[i].TotalWidth]));
  765.           SubItems.Add(Format('%d b',[MemoryDevice[i].DataWidth]));
  766.           SubItems.Add(MemoryDevice[i].Manufacturer);
  767.           SubItems.Add(MemoryDevice[i].SerialNumber);
  768.           SubItems.Add(MemoryDevice[i].AssetTag);
  769.           SubItems.Add(MemoryDevice[i].PartNumber);
  770.           ImageIndex:=iiMemory;
  771.         end;
  772.  
  773.       lvPort.Items.Clear;
  774.       for i:=0 to PortCount-1 do
  775.         with lvPort.Items.Add do begin
  776.           Caption:=PortTypes[Port[i].Typ];
  777.           SubItems.Add(Port[i].InternalDesignator);
  778.           SubItems.Add(ConnectorTypes[Port[i].InternalConnector]);
  779.           SubItems.Add(Port[i].ExternalDesignator);
  780.           SubItems.Add(ConnectorTypes[Port[i].ExternalConnector]);
  781.           ImageIndex:=iiPort;
  782.         end;
  783.  
  784.       lvSlot.Items.Clear;
  785.       for i:=0 to SystemSlotCount-1 do
  786.         with lvSlot.Items.Add do begin
  787.           Caption:=SlotTypes[SystemSlot[i].Typ];
  788.           SubItems.Add(DataBusTypes[SystemSlot[i].DataBus]);
  789.           SubItems.Add(SlotUsages[SystemSlot[i].Usage]);
  790.           SubItems.Add(SlotLengths[SystemSlot[i].Length]);
  791.           ImageIndex:=iiAdapter;
  792.         end;
  793.  
  794.       lvOBD.Items.Clear;
  795.       for i:=0 to OnBoardDeviceCount-1 do
  796.         with lvOBD.Items.Add do begin
  797.           Caption:=OnBoardDevice[i].DeviceName;
  798.           SubItems.Add(OnBoardDeviceTypes[OnBoardDevice[i].Typ]);
  799.           if OnBoardDevice[i].Status then
  800.             SubItems.Add('Enabled')
  801.           else
  802.             SubItems.Add('Disabled');
  803.           ImageIndex:=iiAdapter;
  804.         end;
  805.  
  806.       lvTables.Items.Clear;
  807.       for i:=0 to High(StructTables) do
  808.         with lvTables.Items.Add do begin
  809.           Caption:=Format('Type %d: %s',[StructTables[i].Indicator,StructTables[i].Name]);
  810.           SubItems.Add(Format('%d',[StructTables[i].Length]));
  811.           SubItems.Add(Format('%4.4x',[StructTables[i].Handle]));
  812.           ImageIndex:=-1;
  813.         end;
  814.     end;
  815.   end;
  816. end;
  817.  
  818. procedure TfrmMSI_Overview.GetOSInfo;
  819. var
  820.   i: integer;
  821.   s: string;
  822. begin
  823.   with SysInfo.OS do begin
  824.     if IsNT then
  825.       s:=OSVersion
  826.     else
  827.       s:=OSVersionEx;
  828.     case Platform of
  829.       opWin31: tsOS.Caption:='Windows 3.1x';
  830.       opWin9x: tsOS.Caption:='Windows 9x';
  831.       opWinNT: tsOS.Caption:='Windows NT';
  832.     end;
  833.     if IsNT then begin
  834.       s:=s+' '+NTSpecific.GetProductTypeStr(NTSpecific.ProductType);
  835.       lCSD.caption:=CSD;
  836.       lHF.Caption:='Hot Fixes: '+NTSpecific.HotFixes;
  837.     end;
  838.  
  839.     lVersion.caption:=s;
  840.     if IsNT then
  841.       lVerNo.caption:=format('Version: %d.%d.%d (%s)',[MajorVersion,MinorVersion,BuildNumber,Version])
  842.     else
  843.       lVerNo.caption:=format('Version: %d.%d.%d',[MajorVersion,MinorVersion,BuildNumber]);
  844.  
  845.     bNTSpec.Enabled:=Is2K or IsXP or IsNET;
  846.     ePID.text:=ProductID;
  847.     ePKey.text:=ProductKey;
  848.     eRegUser.text:=RegisteredUser;
  849.     eRegOrg.text:=RegisteredOrg;
  850.     if DVDRegion<>'' then
  851.       lDVD.Caption:='DVD Region: '+DVDRegion;
  852.  
  853.     FolderList.Items.Clear;
  854.     for i:=0 to Folders.Count-1 do
  855.       if Folders.Values[Folders.Names[i]]<>'' then
  856.         with FolderList.Items.Add do begin
  857.           Caption:=Folders.Names[i];
  858.           SubItems.Add(Folders.Values[Folders.Names[i]]);
  859.         end;
  860.  
  861.     LocaleList.Items.Clear;
  862.     with LocaleList.Items.Add do begin
  863.       Caption:='Abbreviate Country Code';
  864.       SubItems.Add(LocaleInfo.AbbreviateCountryCode);
  865.     end;
  866.     with LocaleList.Items.Add do begin
  867.       Caption:='Abbreviate Language Code';
  868.       SubItems.Add(LocaleInfo.AbbreviateLanguageName);
  869.     end;
  870.     with LocaleList.Items.Add do begin
  871.       Caption:='Country Code';
  872.       SubItems.Add(LocaleInfo.CountryCode);
  873.     end;
  874.     with LocaleList.Items.Add do begin
  875.       Caption:='Currency Decimal Digits';
  876.       SubItems.Add(LocaleInfo.CurrencyDecimalDigits);
  877.     end;
  878.  
  879.     with LocaleList.Items.Add do begin
  880.       Caption:='Full Country Code';
  881.       SubItems.Add(LocaleInfo.FullCountryCode);
  882.     end;
  883.     with LocaleList.Items.Add do begin
  884.       Caption:='Full English Language Name';
  885.       SubItems.Add(LocaleInfo.FullLanguageEnglishName);
  886.     end;
  887.     with LocaleList.Items.Add do begin
  888.       Caption:='Full Localize Language Name';
  889.       SubItems.Add(LocaleInfo.FullLocalizeLanguage);
  890.     end;
  891.     with LocaleList.Items.Add do begin
  892.       Caption:='Intl. Monetary Symbol';
  893.       SubItems.Add(LocaleInfo.InternationalMonetarySymbol);
  894.     end;
  895.     with LocaleList.Items.Add do begin
  896.       Caption:='Local Monetary Symbol';
  897.       SubItems.Add(LocaleInfo.LocalMonetarySymbol);
  898.     end;
  899.     with LocaleList.Items.Add do begin
  900.       Caption:='Positive Currency Mode';
  901.       case LocaleInfo.PositiveCurrencyMode of
  902.         Prefix_No_Separation: SubItems.Add('Prefix_No_Separation');
  903.         Suffix_No_Separation: SubItems.Add('Suffix_No_Separation');
  904.         Prefix_One_Char_Separation: SubItems.Add('Prefix_One_Char_Separation');
  905.         Suffix_One_Char_Separation: SubItems.Add('Suffix_One_Char_Separation');
  906.       end;
  907.     end;
  908.     with LocaleList.Items.Add do begin
  909.       Caption:='Negative Currency Mode';
  910.       SubItems.Add(LocaleInfo.NegativeCurrencyMode);
  911.     end;
  912.     with LocaleList.Items.Add do begin
  913.       Caption:='Currency Decimal Separator';
  914.       SubItems.Add(LocaleInfo.CurrencyDecimalSeparator);
  915.     end;
  916.     with LocaleList.Items.Add do begin
  917.       Caption:='Currency Thousand Separator';
  918.       SubItems.Add(LocaleInfo.CurrencyThousandSeparator);
  919.     end;
  920.     with LocaleList.Items.Add do begin
  921.       Caption:='Decimal Separator';
  922.       SubItems.Add(LocaleInfo.DecimalSeparator);
  923.     end;
  924.     with LocaleList.Items.Add do begin
  925.       Caption:='Number Of Decimal Digits';
  926.       SubItems.Add(LocaleInfo.NumberOfDecimalDigits);
  927.     end;
  928.     with LocaleList.Items.Add do begin
  929.       Caption:='List Separator';
  930.       SubItems.Add(LocaleInfo.ListSeparator);
  931.     end;
  932.     with LocaleList.Items.Add do begin
  933.       Caption:='Date Separator';
  934.       SubItems.Add(LocaleInfo.DateSeparator);
  935.     end;
  936.     with LocaleList.Items.Add do begin
  937.       Caption:='Long Date Order';
  938.       case LocaleInfo.LongDateOrder of
  939.         MDY: SubItems.Add('M-D-Y');
  940.         DMY: SubItems.Add('D-M-Y');
  941.         YMD: SubItems.Add('Y-M-D');
  942.       end;
  943.     end;
  944.     with LocaleList.Items.Add do begin
  945.       Caption:='Short Date Order';
  946.       case LocaleInfo.ShortDateOrder of
  947.         MDY: SubItems.Add('M-D-Y');
  948.         DMY: SubItems.Add('D-M-Y');
  949.         YMD: SubItems.Add('Y-M-D');
  950.       end;
  951.     end;
  952.     with LocaleList.Items.Add do begin
  953.       Caption:='Short Date Format';
  954.       SubItems.Add(LocaleInfo.ShortDateFormat);
  955.     end;
  956.     with LocaleList.Items.Add do begin
  957.       Caption:='Time Format';
  958.       SubItems.Add(LocaleInfo.TimeFormat);
  959.     end;
  960.     with LocaleList.Items.Add do begin
  961.       Caption:='Time Format Specifier';
  962.       case LocaleInfo.TimeFormatSpecifier of
  963.         H12: SubItems.Add('12H');
  964.         H24: SubItems.Add('24H');
  965.       end;
  966.     end;
  967.     with LocaleList.Items.Add do begin
  968.       Caption:='Year Format';
  969.       case LocaleInfo.YearFormat of
  970.         TwoDigit: SubItems.Add('Two Digit');
  971.         FourDigit: SubItems.Add('Four Digit');
  972.       end;
  973.     end;
  974.     with LocaleList.Items.Add do begin
  975.       Caption:='Measurement System';
  976.       case LocaleInfo.MeasurementSystem of
  977.         Metric: SubItems.Add('Metric');
  978.         US: SubItems.Add('U.S.');
  979.       end;
  980.     end;
  981.  
  982.     eBrowser.Text:=Internet.DefaultBrowser;
  983.     eMail.Text:=Internet.DefaultMailClient;
  984.     eProxy.Text:=Internet.ProxyServer;
  985.     lCT.Caption:=Internet.GetConnTypeStr(Internet.ConnectionType);
  986.   end;
  987. end;
  988.  
  989. procedure TfrmMSI_Overview.GetCPUInfo;
  990. var
  991.   sl :TStringList;
  992.   i :Longint;
  993. begin
  994.   with SysInfo.CPU do begin
  995.     //if Trim(CPUIDNameString)='' then
  996.       lCPU.caption:=format('%d x %s %s - %d MHz',[Count,CPUVendors[VendorType],FriendlyName,Frequency]);
  997.     {else
  998.       lCPU.caption:=format('%d x %s - %d MHz',[Count,Trim(CPUIDNameString),Frequency]);}
  999.     lFamily.caption:=format(  'Family: %d (%d)',[Family,ExtendedFamily]);
  1000.     lModel.caption:=format(   'Model: %d (%d)',[Model,ExtendedModel]);
  1001.     lStepping.caption:=format('Stepping: %d (%d)',[Stepping,ExtendedStepping]);
  1002.     lType.Caption:=Format('Type: %s',[CPUTypes[CPUType]]);
  1003.     lFreq.Caption:=Format('Frequency: %d MHz',[Frequency]);
  1004.     lVendor.Caption:='Vendor: '+Vendor;
  1005.     lnamestring.Caption:='Name String: '+CPUIDNameString;
  1006.     lFriendlyname.Caption:='Friendly Name: '+FriendlyName;
  1007.     lCodename.Caption:='Code Name: '+CodeName;
  1008.     if Features.PSN then
  1009.       lSerial.caption:='Serial Number: '+SerialNumber
  1010.     else
  1011.       lSerial.caption:='Serial Number is not supported.';
  1012.     sl:=TStringList.Create;
  1013.     Features.GetFeaturesStr(sl);
  1014.     sl.Add(Format('FDIV Bug=%d',[integer(FDIVBug)]));
  1015.     clbCPU.items.Clear;
  1016.     for i:=1 to sl.count-1 do begin
  1017.       clbCPU.items.Add(sl.Names[i]);
  1018.       clbCPU.Checked[clbCPU.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  1019.     end;
  1020.     sl.Free;
  1021.     lLevel1.Caption:=Format('Level 1: %d KB (%d KB Data + %d KB Instruction)',[Cache.Level1,Cache.L1data,cache.L1Code]);
  1022.     lLevel2.Caption:=Format('Level 2: %d KB',[Cache.Level2]);
  1023.     lLevel3.Caption:=Format('Level 3: %d KB',[Cache.Level3]);
  1024.     CacheBox.Items.Clear;
  1025.     CacheBox.Items.AddStrings(Cache.Descriptions);
  1026.   end;
  1027. end;
  1028.  
  1029. procedure TfrmMSI_Overview.GetMemoryInfo;
  1030. begin
  1031.   pcMem.ActivePage:=tsmemGen;
  1032.   with SysInfo.Memory do begin
  1033.     eAG.text:=formatfloat('#,##',AllocGranularity);
  1034.     eAppAddr.text:=format('%s - %s',[inttohex(MinAppAddress,8),inttohex(MaxAppAddress,8)]);
  1035.     ePS.text:=formatfloat('#,##',PageSize);
  1036.  
  1037.     ePT.text:=formatfloat('#,##',PhysicalTotal);
  1038.     ePF.text:=formatfloat('#,#0',PhysicalFree);
  1039.     eFT.text:=formatfloat('#,##',PageFileTotal);
  1040.     eFF.text:=formatfloat('#,#0',PageFileFree);
  1041.     eVT.text:=formatfloat('#,##',VirtualTotal);
  1042.     eVF.text:=formatfloat('#,#0',VirtualFree);
  1043.     try
  1044.       gMemory.Position:=MemoryLoad;
  1045.       gPhys.Max:=PhysicalTotal;
  1046.       gPhys.Position:=PhysicalFree;
  1047.       gPage.Max:=PageFileTotal;
  1048.       gPage.Position:=PageFileFree;
  1049.       gVirt.Max:=VirtualTotal;
  1050.       gVirt.Position:=VirtualFree;
  1051.     except
  1052.     end;
  1053.     try
  1054.       pbGDI.Position:=Resources.GDI;
  1055.       pbUser.Position:=Resources.User;
  1056.       pbSystem.Position:=Resources.System;
  1057.       lGDI.Caption:=Format('GDI - %d%% free',[pbGDI.Position]);
  1058.       lUser.Caption:=Format('User - %d%% free',[pbUser.Position]);
  1059.       lSystem.Caption:=Format('System - %d%% free',[pbSystem.Position]);
  1060.     except
  1061.     end;
  1062.   end;
  1063. end;
  1064.  
  1065. procedure TfrmMSI_Overview.GetDisplayInfo;
  1066. begin
  1067.   pcDisplay.ActivePage:=tsDisplay1;
  1068.   with SysInfo, Display do begin
  1069.     cbDisplay.Text:=Adapter;
  1070.     eChip.text:=Chipset;
  1071.     eDAC.text:=DAC;
  1072.     eBIOSString.text:=BIOSString;
  1073.     eMem.text:=IntToStr(Memory);
  1074.     eBIOS.text:=format('%s',[BIOSVersion]);
  1075.     edate.text:=format('%s',[BIOSDate]);
  1076.     with lvDisp, Items do begin
  1077.       Clear;
  1078.       with Add do begin
  1079.         Caption:='Technology';
  1080.         SubItems.Add(Technology);
  1081.       end;
  1082.       with Add do begin
  1083.         Caption:='Device Driver Version';
  1084.         SubItems.Add(format('%d',[DeviceDriverVersion]));
  1085.       end;
  1086.       with Add do begin
  1087.         Caption:='Resolution';
  1088.         SubItems.Add(Format('%d x %d - %d bit',[HorzRes,VertRes,ColorDepth]));
  1089.       end;
  1090.       with Add do begin
  1091.         Caption:='Physical Size';
  1092.         SubItems.Add(Format('(%d x %d) mm',[HorzSize,VertSize]));
  1093.       end;
  1094.       with Add do begin
  1095.         Caption:='Pixel Width';
  1096.         SubItems.Add(format('%d',[PixelWidth]));
  1097.       end;
  1098.       with Add do begin
  1099.         Caption:='Pixel Height';
  1100.         SubItems.Add(format('%d',[PixelHeight]));
  1101.       end;
  1102.       with Add do begin
  1103.         Caption:='Pixel Diagonal';
  1104.         SubItems.Add(format('%d',[PixelDiagonal]));
  1105.       end;
  1106.       with Add do begin
  1107.         Caption:='Font Resolution';
  1108.         SubItems.Add(format('%d dpi',[FontResolution]));
  1109.       end;
  1110.       if IsNT then
  1111.         with Add do begin
  1112.           Caption:='Vertical Refresh Rate';
  1113.           SubItems.Add(format('%d Hz',[VerticalRefreshRate]));
  1114.         end;
  1115.     end;
  1116.   end;
  1117. end;
  1118.  
  1119. procedure TfrmMSI_Overview.GetAPMInfo;
  1120. begin
  1121.   with SysInfo.APM do begin
  1122.     eAC.text:=GetACPSStr(ACPowerStatus);
  1123.     eBat.text:=GetBSStr(BatteryChargeStatus);
  1124.     if BatteryLifePercent<=100 then begin
  1125.       eBatFull.text:=formatseconds(BatteryLifeFullTime,true,false,false);
  1126.       eBatLife.text:=formatseconds(BatteryLifeTime,true,false,false);
  1127.       gAPM.Position:=BatteryLifePercent;
  1128.     end else begin
  1129.       eBatFull.text:='<info not available>';
  1130.       eBatLife.text:='<info not available>';
  1131.     end;
  1132.   end;
  1133. end;
  1134.  
  1135. procedure TfrmMSI_Overview.GetMediaInfo;
  1136. var
  1137.   i :integer;
  1138. begin
  1139.   with SysInfo.Media do begin
  1140.     lvMedia.Items.beginUpdate;
  1141.     lvMedia.items.clear;
  1142.     for i:=0 to Devices.count-1 do
  1143.       with lvMedia.items.add do begin
  1144.         caption:=Devices[i];
  1145.         if i=GamePortIndex then
  1146.           imageindex:=iiGame
  1147.         else
  1148.           if i=SoundCardIndex then
  1149.             imageindex:=iiAdapter
  1150.           else
  1151.             imageindex:=iiSound;
  1152.       end;
  1153.     lvMedia.Items.EndUpdate;
  1154.     lvSound.Items.beginUpdate;
  1155.     lvSound.items.clear;
  1156.     for i:=0 to WaveIn.count-1 do
  1157.       with lvSound.items.add do begin
  1158.         caption:=WaveIn[i];
  1159.         SubItems.Add('Wave In');
  1160.         ImageIndex:=iiWave;
  1161.       end;
  1162.     for i:=0 to WaveOut.count-1 do
  1163.       with lvSound.items.add do begin
  1164.         caption:=WaveOut[i];
  1165.         SubItems.Add('Wave Out');
  1166.         ImageIndex:=iiWave;
  1167.       end;
  1168.     for i:=0 to MIDIIn.count-1 do
  1169.       with lvSound.items.add do begin
  1170.         caption:=MIDIIn[i];
  1171.         SubItems.Add('MIDI In');
  1172.         ImageIndex:=iiMIDI;
  1173.       end;
  1174.     for i:=0 to MIDIOut.count-1 do
  1175.       with lvSound.items.add do begin
  1176.         caption:=MIDIOut[i];
  1177.         SubItems.Add('MIDI Out');
  1178.         ImageIndex:=iiMIDI;
  1179.       end;
  1180.     for i:=0 to AUX.count-1 do
  1181.       with lvSound.items.add do begin
  1182.         caption:=AUX[i];
  1183.         SubItems.Add('AUX');
  1184.         ImageIndex:=iiAUX;
  1185.       end;
  1186.     for i:=0 to Mixer.count-1 do
  1187.       with lvSound.items.add do begin
  1188.         caption:=Mixer[i];
  1189.         SubItems.Add('Mixer');
  1190.         ImageIndex:=iiMixer;
  1191.       end;
  1192.   end;
  1193.   lvSound.Items.endUpdate;
  1194. end;
  1195.  
  1196. procedure TfrmMSI_Overview.GetNetInfo;
  1197. var
  1198.   i :integer;
  1199. begin
  1200.   with SysInfo.Network do begin
  1201.     pcNet.ActivePage:=tsNetGeneral;
  1202.     lvNetwork.items.clear;
  1203.     for i:=0 to Adapters.count-1 do
  1204.       with lvNetwork.items.add do begin
  1205.         caption:=Adapters[i];
  1206.         if CardAdapterIndex=i then
  1207.           imageindex:=iiAdapter
  1208.         else
  1209.           imageindex:=iiNet;
  1210.       end;
  1211.     lbIP.Items.Text:=IPAddresses.Text;
  1212.     lbMAC.Items.Text:=MACAddresses.Text;
  1213.     eWSDesc.Text:=Winsock.Description;
  1214.     eWSVer.Text:=Format('%d.%d',[Winsock.MajorVersion,Winsock.MinorVersion]);
  1215.     eWSStat.Text:=Winsock.Status;
  1216.     with TCPIP do begin
  1217.       eDomain.Text:=DomainName;
  1218.       eHost.Text:=HostName;
  1219.       eNode.Text:=NodeTypes[NodeType];
  1220.       eDNS.Text:=PrimaryDNSSuffix;
  1221.       cbxProxy.Checked:=EnableProxy;
  1222.       cbxRouting.Checked:=EnableRouting;
  1223.       cbxDNS.Checked:=EnableDNS;
  1224.       cbAdapters.Items.Clear;
  1225.       for i:=0 to AdapterCount-1 do
  1226.         cbAdapters.Items.Add(Adapter[i].Name);
  1227.       DNSBox.Items.Clear;
  1228.       for i:=0 to DNSServers.Count-1 do begin
  1229.         DNSBox.Items.Add(DNSServers[i]);
  1230.         if DNSSuffixes.Count>i then
  1231.           DNSBox.Items[DNSBox.Items.Count-1]:=DNSBox.Items[DNSBox.Items.Count-1]+' '+DNSSuffixes[i];
  1232.       end;
  1233.       if cbAdapters.Items.Count>0 then begin
  1234.         cbAdapters.ItemIndex:=0;
  1235.         cbAdaptersChange(nil);
  1236.       end;
  1237.     end;
  1238.   end;
  1239. end;
  1240.  
  1241. procedure TfrmMSI_Overview.GetDeviceInfo;
  1242. var
  1243.   i,c: integer;
  1244.   r,n: TTreeNode;
  1245.   cn,dn: string;
  1246.   pi: PInteger;
  1247.   ldc: TDeviceClass;
  1248.   RL: TResourceList;
  1249. begin
  1250.   ldc:=dcUnknown;
  1251.   with SysInfo, Devices, Tree,Items do begin
  1252.     c:=DeviceCount-1;
  1253.     BeginUpdate;
  1254.     while Count>0 do begin
  1255.       if Assigned(Items[Count-1].Data) then
  1256.         FreeMem(Items[Count-1].Data);
  1257.       Delete(Items[Count-1]);
  1258.     end;
  1259.     r:=Add(nil,GetMachine);
  1260.     r.ImageIndex:=0;
  1261.     r.SelectedIndex:=r.ImageIndex;
  1262.     n:=nil;
  1263.     for i:=0 to c do begin
  1264.       if Trim(Devices[i].ClassDesc)<>'' then
  1265.         cn:=Devices[i].ClassDesc
  1266.       else
  1267.         cn:=Devices[i].ClassName;
  1268.       if not Assigned(n) or (Devices[i].DeviceClass<>ldc) then begin
  1269.         ldc:=Devices[i].DeviceClass;
  1270.         n:=AddChild(r,cn);
  1271.         n.ImageIndex:=cDeviceImageIndex[Devices[i].DeviceClass];
  1272.         n.SelectedIndex:=n.ImageIndex;
  1273.       end;
  1274.       if Trim(Devices[i].FriendlyName)='' then
  1275.         dn:=Devices[i].Description
  1276.       else
  1277.         dn:=Devices[i].FriendlyName;
  1278.       with AddChild(n,dn) do begin
  1279.         ImageIndex:=n.ImageIndex;
  1280.         SelectedIndex:=ImageIndex;
  1281.         new(pi);
  1282.         pi^:=i;
  1283.         Data:=pi;
  1284.       end;
  1285.       n.AlphaSort;
  1286.     end;
  1287.     r.AlphaSort;
  1288.     r.Expand(False);
  1289.     EndUpdate;
  1290.   end;
  1291.  
  1292.   with SysInfo, Devices, ResList, Items do begin
  1293.     GetResourceList(RL);
  1294.     BeginUpdate;
  1295.     try
  1296.       Clear;
  1297.       for i:=0 to High(RL) do
  1298.         with Add do begin
  1299.           Caption:=RL[i].Resource;
  1300.           SubItems.Add(ResourceShareStr(RL[i].Share));
  1301.           SubItems.Add(RL[i].Device);
  1302.           ImageIndex:=cDeviceImageIndex[RL[i].DeviceClass];
  1303.         end;
  1304.     finally
  1305.       EndUpdate;
  1306.     end;
  1307.   end;
  1308. end;
  1309.  
  1310. procedure TfrmMSI_Overview.GetEngInfo;
  1311. var
  1312.   i: integer;
  1313. begin
  1314.   with SysInfo.Engines do begin
  1315.     if ODBC<>'' then
  1316.       lODBC.caption:='Open Database Connectivity '+ODBC
  1317.     else
  1318.       lODBC.caption:='Open Database Connectivity not found';
  1319.     if BDE<>'' then
  1320.       lBDE.caption:='Borland Database Engine '+BDE
  1321.     else
  1322.       lBDE.caption:='Borland Database Engine not found';
  1323.     if DAO<>'' then
  1324.       lDAO.caption:='Microsoft Data Access Objects '+DAO
  1325.     else
  1326.       lDAO.caption:='Microsoft Data Access Objects not found';
  1327.     if ADO<>'' then
  1328.       lADO.caption:='Microsoft ActiveX Data Objects '+ADO
  1329.     else
  1330.       lADO.caption:='Microsoft ActiveX Data Objects not found';
  1331.   end;
  1332.   with SysInfo.Engines.DirectX do begin
  1333.     if Version<>'' then begin
  1334.       lDirectX.caption:='Installed version: '+Version;
  1335.       lvDirectX.Items.beginUpdate;
  1336.       lvDirectX.items.clear;
  1337.       for i:=0 to Direct3D.count-1 do
  1338.         with lvDirectX.items.add do begin
  1339.           caption:=Direct3D[i];
  1340.           SubItems.Add('Direct3D');
  1341.           ImageIndex:=iiDirectX;
  1342.         end;
  1343.       for i:=0 to DirectMusic.count-1 do
  1344.         with lvDirectX.items.add do begin
  1345.           caption:=DirectMusic[i];
  1346.           SubItems.Add('DirectMusic');
  1347.           ImageIndex:=iiDirectX;
  1348.         end;
  1349.       for i:=0 to DirectPlay.count-1 do
  1350.         with lvDirectX.items.add do begin
  1351.           caption:=DirectPlay[i];
  1352.           SubItems.Add('DirectPlay');
  1353.           ImageIndex:=iiDirectX;
  1354.         end;
  1355.       lvDirectX.Items.endUpdate;
  1356.     end else
  1357.       lDirectX.caption:='Not installed.';
  1358.   end;
  1359.   with SysInfo.Engines.ASPI32 do begin
  1360.     if ASPI<>'' then
  1361.       lASPI.caption:='Adaptec ASPI '+ASPI
  1362.     else
  1363.       lASPI.caption:='Adaptec ASPI not found';
  1364.     //lvASPI.Items.beginUpdate;
  1365.     lvASPI.items.Clear;
  1366.     for i:=0 to Configuration.Adapter.Count-1 do
  1367.       with lvASPI.items.add do begin
  1368.         caption:=Configuration.Vendor[i]+Configuration.Product[i];
  1369.         SubItems.Add(Configuration.Revision[i]);
  1370.         SubItems.Add(Configuration.Adapter[i]);
  1371.         SubItems.Add(Configuration.ID[i]);
  1372.         SubItems.Add(Configuration.Typ[i]);
  1373.         SubItems.Add(Configuration.Spec[i]);
  1374.         ImageIndex:=-1;
  1375.       end;
  1376.     //lvASPI.Items.beginUpdate;
  1377.   end;
  1378. end;
  1379.  
  1380. procedure TfrmMSI_Overview.GetDriveInfo;
  1381. var
  1382.   i,j :integer;
  1383.   s :string;
  1384. begin
  1385.   j:=0;
  1386.   with SysInfo.Disk do begin
  1387.     cbDrive.items.clear;
  1388.     for i:=1 to length(AvailableDisks) do begin
  1389.       s:=uppercase(copy(AvailableDisks,i,1));
  1390.       cbDrive.items.add(s+':');
  1391.       if s=uppercase(copy(SysInfo.OS.Folders.Values['Windows'],1,1)) then
  1392.         j:=i-1;
  1393.     end;
  1394.     cbDrive.itemindex:=j;
  1395.     cbDriveChange(nil);
  1396.   end;
  1397. end;
  1398.  
  1399. procedure TfrmMSI_Overview.GetInfo;
  1400. begin
  1401.   screen.cursor:=crhourglass;
  1402.   try
  1403.     if pgWksta in DisplayedPages then
  1404.       GetWkstaInfo;
  1405.     if pgOS in DisplayedPages then
  1406.       GetOSInfo;
  1407.     if pgCPU in DisplayedPages then
  1408.       GetCPUInfo;
  1409.     if pgMem in DisplayedPages then
  1410.       GetMemoryInfo;
  1411.     if pgDisplay in DisplayedPages then
  1412.       GetDisplayInfo;
  1413.     if pgMonitor in DisplayedPages then
  1414.       GetMonitorInfo;
  1415.     if pgAPM in DisplayedPages then
  1416.       GetAPMInfo;
  1417.     if pgMedia in DisplayedPages then
  1418.       GetMediaInfo;
  1419.     if pgNet in DisplayedPages then
  1420.       GetNetInfo;
  1421.     if pgDev in DisplayedPages then
  1422.       GetDeviceInfo;
  1423.     if pgEng in DisplayedPages then
  1424.       GetEngInfo;
  1425.     if pgDisk in DisplayedPages then
  1426.       GetDriveInfo;
  1427.     if pgTZ in DisplayedPages then
  1428.       GetTZInfo;
  1429.     if pgPrn in DisplayedPages then
  1430.       GetPrintInfo;
  1431.     if pgStartup in DisplayedPages then
  1432.       GetStartupInfo;
  1433.     if pgSoftware in DisplayedPages then
  1434.       GetSWInfo;
  1435.     if pgStorage in DisplayedPages then
  1436.       GetStorageInfo;
  1437.     if pgUSB in DisplayedPages then
  1438.       GetUSBInfo;
  1439.     if pgProcesses in DisplayedPages then
  1440.       GetProcessesInfo;
  1441.   finally
  1442.     screen.cursor:=crdefault;
  1443.   end;
  1444. end;
  1445.  
  1446. procedure TfrmMSI_Overview.FormCreate(Sender: TObject);
  1447. begin
  1448.   Report:=TStringList.Create;
  1449.   DisplayedPages:=pgAll;
  1450.   pc.activepage:=tsWksta;
  1451.   pcCPU.ActivePage:=tsID;
  1452.   pcMachine.ActivePage:=tsMachineGeneral;
  1453.   pcSM.ActivePage:=tsBIOS;
  1454.   lTitle.Caption:=cCompName;
  1455.   lVer.Caption:='Version '+cVersion;
  1456.   FooterPanel.Caption:=cCopyright;
  1457.   pcOS.ActivePage:=tsGeneral;
  1458.   pcEng.ActivePage:=tsDirectX;
  1459.   pcDev.ActivePage:=tsDevTree;
  1460.   bRes.Visible:=IsNT;
  1461.   tsDevRes.TabVisible:=IsNT;
  1462.   {$IFNDEF ERROR_INTERCEPT}
  1463.   bES.Hide;
  1464.   {$ENDIF}
  1465. end;
  1466.  
  1467. procedure TfrmMSI_Overview.cmRefresh(Sender: TObject);
  1468. begin
  1469.   RefreshOverview(True);
  1470. end;
  1471.  
  1472. procedure TfrmMSI_Overview.cmClose(Sender: TObject);
  1473. begin
  1474.   close;
  1475. end;
  1476.  
  1477. procedure TfrmMSI_Overview.cmEnvironment(Sender: TObject);
  1478. var
  1479.   i: integer;
  1480. begin
  1481.   with TdlgMSI_Detail.Create(Self) do begin
  1482.     Notebook.pageindex:=3;
  1483.     TabSheet1.Caption:='Environment';
  1484.     for i:=0 to SysInfo.OS.Environment.Count-1 do
  1485.       with lv.Items.Add do begin
  1486.         Caption:=SysInfo.OS.Environment.Names[i];
  1487.         SubItems.Add(SysInfo.OS.Environment.Values[SysInfo.OS.Environment.Names[i]]);
  1488.       end;
  1489.     showmodal;
  1490.     free;
  1491.   end;
  1492. end;
  1493.  
  1494. procedure TfrmMSI_Overview.cmCaps(Sender: TObject);
  1495. var
  1496.   i :integer;
  1497.   sl :TStringList;
  1498. begin
  1499.   with TdlgMSI_Detail.Create(self) do begin
  1500.     Notebook.pageindex:=1;
  1501.     sl:=TStringList.Create;
  1502.     case TComponent(sender).tag of
  1503.       0: begin
  1504.         TabSheet1.Caption:='Curve Capabilities';
  1505.         GetCurveCapsStr(SysInfo.Display.CurveCaps,sl);
  1506.       end;
  1507.       1: begin
  1508.         TabSheet1.Caption:='Line Capabilities';
  1509.         GetLineCapsStr(SysInfo.Display.LineCaps,sl);
  1510.       end;
  1511.       2: begin
  1512.         TabSheet1.Caption:='Polygonal Capabilities';
  1513.         GetPolygonCapsStr(SysInfo.Display.PolygonCaps,sl);
  1514.       end;
  1515.       3: begin
  1516.         TabSheet1.Caption:='Raster Capabilities';
  1517.         GetRasterCapsStr(SysInfo.Display.RasterCaps,sl);
  1518.       end;
  1519.       4: begin
  1520.         TabSheet1.Caption:='Text Capabilities';
  1521.         GetTextCapsStr(SysInfo.Display.TextCaps,sl);
  1522.       end;
  1523.       5: begin
  1524.         TabSheet1.Caption:='Shade Blend Capabilities';
  1525.         GetShadeBlendCapsStr(SysInfo.Display.ShadeBlendCaps,sl);
  1526.       end;
  1527.       6: begin
  1528.         TabSheet1.Caption:='Color Management Capabilities';
  1529.         GetColorMgmtCapsStr(SysInfo.Display.ColorMgmtCaps,sl);
  1530.       end;
  1531.     end;
  1532.     clb.items.clear;
  1533.     for i:=0 to sl.count-1 do begin
  1534.       clb.items.Add(sl.Names[i]);
  1535.       clb.Checked[clb.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  1536.     end;
  1537.     sl.free;
  1538.     showmodal;
  1539.     free;
  1540.   end;
  1541. end;
  1542.  
  1543. procedure TfrmMSI_Overview.cmPrintSetup(Sender: TObject);
  1544. begin
  1545.   psd.execute;
  1546. end;
  1547.  
  1548. procedure TfrmMSI_Overview.cbDriveChange(Sender: TObject);
  1549. var
  1550.   p,i :Word;
  1551.   b :pchar;
  1552.   sl :TStringList;
  1553. begin
  1554.   with SysInfo.Disk do begin
  1555.     gdisk.Position:=0;
  1556.     b:=stralloc(255);
  1557.     p:=0;
  1558.     if cbDrive.Text='' then
  1559.       Exit;
  1560.     Drive:=copy(cbDrive.text,1,2);
  1561.     strpcopy(b,Drive+'\');
  1562.     lDriveType.caption:=GetMediaTypeStr(MediaType)+' - '+FileSystem;
  1563.     if MediaPresent then
  1564.       imgDrive.picture.icon.handle:=extractassociatedicon(hinstance,b,p)
  1565.     else
  1566.       imgDrive.picture.icon.handle:=0;
  1567.     strdispose(b);
  1568.     eUNC.text:=expanduncfilename(Drive);
  1569.     eDSN.text:=SerialNumber;
  1570.     if pos('[',cbdrive.items[cbdrive.itemindex])=0 then begin
  1571.       i:=cbdrive.itemindex;
  1572.       cbdrive.items[i]:=cbdrive.items[i]+' ['+VolumeLabel+']';
  1573.       cbdrive.itemindex:=i;
  1574.     end;
  1575.     lCapacity.caption:=formatfloat('Capacity: #,#0 B',Capacity);
  1576.     lFree.caption:=formatfloat('Free space: #,#0 B',FreeSpace);
  1577.     try
  1578.       gDisk.Position:=round((Capacity-FreeSpace)/Capacity*100);
  1579.     except
  1580.     end;
  1581.     lBPS.caption:=formatfloat('Bytes/sector: 0',BytesPerSector);
  1582.     lSPC.caption:=formatfloat('Sector/cluster: 0',SectorsPerCluster);
  1583.     lFC.caption:=formatfloat('Free clusters: #,#0',FreeClusters);
  1584.     lTC.caption:=formatfloat('Total clusters: #,#0',TotalClusters);
  1585.     sl:=TStringList.Create;
  1586.     GetFileFlagsStr(sl);
  1587.     clbFlags.items.Clear;
  1588.     for i:=1 to sl.count-1 do begin
  1589.       clbFlags.items.Add(sl.Names[i]);
  1590.       clbFlags.Checked[clbFlags.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  1591.     end;
  1592.     sl.Free;
  1593.   end;
  1594. end;
  1595.  
  1596. procedure TfrmMSI_Overview.cmReportClick(Sender: TObject);
  1597. var
  1598.   p :tpoint;
  1599. begin
  1600.   p.y:=twincontrol(sender).top+twincontrol(sender).height;
  1601.   p.x:=twincontrol(sender).left;
  1602.   p:=twincontrol(sender).parent.clienttoscreen(p);
  1603.   ReportMenu.Popup(p.x,p.y);
  1604. end;
  1605.  
  1606. procedure TfrmMSI_Overview.cmReportAll(Sender: TObject);
  1607. begin
  1608.   Report.Clear;
  1609.   sd.Filename:=MachineName+'_SystemInfo.xml';
  1610.   if sd.Execute then begin
  1611.     Screen.Cursor:=crHourGlass;
  1612.     try
  1613.       SysInfo.Report(Report);
  1614.       Report.SaveToFile(sd.Filename);
  1615.     finally
  1616.       Screen.Cursor:=crDefault;
  1617.     end;
  1618.   end;
  1619. end;
  1620.  
  1621. procedure TfrmMSI_Overview.cmReportCurrent(Sender: TObject);
  1622. begin
  1623.   Report.Clear;
  1624.   sd.Filename:=MachineName+'_'+Trim(pc.ActivePage.Caption)+'.xml';
  1625.   if sd.Execute then begin
  1626.     Screen.Cursor:=crHourGlass;
  1627.     try
  1628.     case pc.activepage.pageindex of
  1629.       0: SysInfo.Machine.Report(Report);
  1630.       1: SysInfo.OS.Report(Report);
  1631.       2: SysInfo.CPU.Report(Report);
  1632.       3: SysInfo.Memory.Report(Report);
  1633.       4: SysInfo.Display.Report(Report);
  1634.       5: SysInfo.APM.Report(Report);
  1635.       6: SysInfo.Media.Report(Report);
  1636.       7: SysInfo.Network.Report(Report);
  1637.       8: SysInfo.Devices.Report(Report);
  1638.       9: SysInfo.Printers.Report(Report);
  1639.       10: SysInfo.Storage.Report(Report);
  1640.       11: SysInfo.USB.Report(Report);
  1641.       12: SysInfo.Engines.Report(Report);
  1642.       13: SysInfo.Disk.Report(Report);
  1643.       14: SysInfo.OS.TimeZone.Report(Report);
  1644.       15: SysInfo.Startup.Report(Report);
  1645.       16: SysInfo.Software.Report(Report);
  1646.       17: SysInfo.ProcessList.Report(Report);
  1647.     end;
  1648.     Report.SaveToFile(sd.filename);
  1649.     finally
  1650.       Screen.Cursor:=crDefault;
  1651.     end;
  1652.   end;
  1653. end;
  1654.  
  1655. procedure TfrmMSI_Overview.clbClickCheck(Sender: TObject);
  1656. var
  1657.   OCC: TNotifyEvent;
  1658.   idx: integer;
  1659.   p: TPoint;
  1660. begin
  1661.   with TCheckListBox(Sender) do begin
  1662.     OCC:=OnClickCheck;
  1663.     OnClickCheck:=nil;
  1664.     GetCursorPos(p);
  1665.     p:=ScreenToClient(p);
  1666.     idx:=ItemAtPos(p,True);
  1667.     if idx>-1 then
  1668.       Checked[idx]:=not Checked[idx];
  1669.     OnClickCheck:=OCC;
  1670.   end;
  1671. end;
  1672.  
  1673. procedure TfrmMSI_Overview.SeTInfoPages(const Value: TInfoPages);
  1674. var
  1675.   i: integer;
  1676. begin
  1677.   FPages:=Value;
  1678.   for i:=pc.PageCount-1 downto 0 do begin
  1679.     pc.Pages[i].TabVisible:=TInfoPage(i) in DisplayedPages;
  1680.     if pc.Pages[i].TabVisible then
  1681.       pc.ActivePage:=pc.Pages[i];
  1682.   end;
  1683. end;
  1684.  
  1685. procedure TfrmMSI_Overview.SetShowRepBut(const Value: Boolean);
  1686. begin
  1687.   FShowRepBut:=Value;
  1688.   bReport.Visible:=FShowRepBut;
  1689. end;
  1690.  
  1691. procedure TfrmMSI_Overview.cmModes(Sender: TObject);
  1692. var
  1693.   i: integer;
  1694. begin
  1695.   with TdlgMSI_Detail.Create(self) do begin
  1696.     Notebook.pageindex:=1;
  1697.     clb.items.clear;
  1698.     clb.Items.AddStrings(SysInfo.Display.Modes);
  1699.     for i:=0 to clb.Items.Count-1 do
  1700.       clb.Checked[i]:=True;
  1701.     TabSheet1.Caption:='Supported Video Modes';
  1702.     showmodal;
  1703.     free;
  1704.   end;
  1705. end;
  1706.  
  1707. procedure TfrmMSI_Overview.GetTZInfo;
  1708. begin
  1709.   with SysInfo.OS.TimeZone do begin
  1710.     eTZ.Text:=DisplayName;
  1711.     gbStd.Caption:=' '+StandardName+' ';
  1712.     gbDay.Caption:=' '+DaylightName+' ';
  1713.     eStdStart.Text:=DateTimeToStr(StandardStart);
  1714.     eStdBias.Text:=IntToStr(StandardBias);
  1715.     eDayStart.Text:=DateTimeToStr(DaylightStart);
  1716.     eDayBias.Text:=IntToStr(DaylightBias);
  1717.   end;
  1718. end;
  1719.  
  1720. procedure TfrmMSI_Overview.cmProto(Sender: TObject);
  1721. var
  1722.   i: integer;
  1723. begin
  1724.   with TdlgMSI_Detail.Create(self) do begin
  1725.     Notebook.pageindex:=1;
  1726.     clb.items.clear;
  1727.     clb.Items.AddStrings(SysInfo.Network.Protocols);
  1728.     for i:=0 to clb.Items.Count-1 do
  1729.       clb.Checked[i]:=True;
  1730.     TabSheet1.Caption:='Protocols';
  1731.     showmodal;
  1732.     free;
  1733.   end;
  1734. end;
  1735.  
  1736. procedure TfrmMSI_Overview.cmServ(Sender: TObject);
  1737. var
  1738.   i: integer;
  1739. begin
  1740.   with TdlgMSI_Detail.Create(self) do begin
  1741.     Notebook.pageindex:=1;
  1742.     clb.items.clear;
  1743.     clb.Items.AddStrings(SysInfo.Network.Services);
  1744.     for i:=0 to clb.Items.Count-1 do
  1745.       clb.Checked[i]:=True;
  1746.     TabSheet1.Caption:='Services';
  1747.     showmodal;
  1748.     free;
  1749.   end;
  1750. end;
  1751.  
  1752. procedure TfrmMSI_Overview.cmCli(Sender: TObject);
  1753. var
  1754.   i: integer;
  1755. begin
  1756.   with TdlgMSI_Detail.Create(self) do begin
  1757.     Notebook.pageindex:=1;
  1758.     clb.items.clear;
  1759.     clb.Items.AddStrings(SysInfo.Network.Clients);
  1760.     for i:=0 to clb.Items.Count-1 do
  1761.       clb.Checked[i]:=True;
  1762.     TabSheet1.Caption:='Clients';
  1763.     showmodal;
  1764.     free;
  1765.   end;
  1766. end;
  1767.  
  1768. procedure TfrmMSI_Overview.SetCaptionText(const Value: string);
  1769. begin
  1770.   Caption:=Value;
  1771. end;
  1772.  
  1773. procedure TfrmMSI_Overview.FormClose(Sender: TObject; var Action: TCloseAction);
  1774. begin
  1775.   Action:=caFree;
  1776. end;
  1777.  
  1778. procedure TfrmMSI_Overview.TreeChange(Sender: TObject; Node: TTreeNode);
  1779. begin
  1780.   bProps.Enabled:=Assigned(Node) and (Node.Level=2);
  1781.   bRes.Enabled:=bProps.Enabled;
  1782. end;
  1783.  
  1784. procedure TfrmMSI_Overview.cmProps(Sender: TObject);
  1785. var
  1786.   dr: TDevice;
  1787.   i: integer;
  1788. begin
  1789.   if Assigned(Tree.Selected) and (Tree.Selected.Level=2) then
  1790.     with TdlgMSI_Detail.Create(self) do begin
  1791.       Notebook.pageindex:=3;
  1792.       lv.items.clear;
  1793.       i:=PInteger(Tree.Selected.Data)^;
  1794.       dr:=SysInfo.Devices.Devices[i];
  1795.       with lv.Items.Add do begin
  1796.         Caption:='Device Name';
  1797.         Subitems.Add(Tree.Selected.Text);
  1798.         ImageIndex:=-3;
  1799.       end;
  1800.       with lv.Items.Add do begin
  1801.         Caption:='Class Name';
  1802.         Subitems.Add(dr.ClassName);
  1803.       end;
  1804.       with lv.Items.Add do begin
  1805.         Caption:='Class Description';
  1806.         Subitems.Add(Tree.Selected.Parent.Text);
  1807.       end;
  1808.       {with lv.Items.Add do begin
  1809.         Caption:='Class GUID';
  1810.         Subitems.Add(dr.GUID);
  1811.       end;}
  1812.       with lv.Items.Add do begin
  1813.         Caption:='Manufacturer';
  1814.         Subitems.Add(dr.Manufacturer);
  1815.       end;
  1816.       {with lv.Items.Add do begin
  1817.         Caption:='Location';
  1818.         SubItems.Add(dr.Location);
  1819.       end;}
  1820.       with lv.Items.Add do begin
  1821.         Caption:='PCI Number';
  1822.         Subitems.Add(Format('%d',[dr.PCINumber]));
  1823.       end;
  1824.       with lv.Items.Add do begin
  1825.         Caption:='Device Number';
  1826.         Subitems.Add(Format('%d',[dr.DeviceNumber]));
  1827.       end;
  1828.       with lv.Items.Add do begin
  1829.         Caption:='Function Number';
  1830.         Subitems.Add(Format('%d',[dr.FunctionNumber]));
  1831.       end;
  1832.       with lv.Items.Add do begin
  1833.         Caption:='Vendor ID';
  1834.         Subitems.Add(Format('%4.4x',[dr.VendorID]));
  1835.       end;
  1836.       with lv.Items.Add do begin
  1837.         Caption:='Device ID';
  1838.         Subitems.Add(Format('%4.4x',[dr.DeviceID]));
  1839.       end;
  1840.       with lv.Items.Add do begin
  1841.         Caption:='SubSystem';
  1842.         Subitems.Add(Format('%8.8x',[dr.SubSysID]));
  1843.       end;
  1844.       with lv.Items.Add do begin
  1845.         Caption:='Revision';
  1846.         Subitems.Add(Format('%2.2x',[dr.Revision]));
  1847.       end;
  1848.       with lv.Items.Add do begin
  1849.         Caption:='';
  1850.         ImageIndex:=-2;
  1851.       end;
  1852.       with lv.Items.Add do begin
  1853.         Caption:='Driver Version';
  1854.         SubItems.Add(dr.DriverVersion);
  1855.         ImageIndex:=-3;
  1856.       end;
  1857.       with lv.Items.Add do begin
  1858.         Caption:='Driver Date';
  1859.         SubItems.Add(dr.DriverDate);
  1860.       end;
  1861.       with lv.Items.Add do begin
  1862.         Caption:='Driver Provider';
  1863.         SubItems.Add(dr.DriverProvider);
  1864.       end;
  1865.       with lv.Items.Add do begin
  1866.         Caption:='';
  1867.         ImageIndex:=-2;
  1868.       end;
  1869.       with lv.Items.Add do begin
  1870.         Caption:='Service Name';
  1871.         if dr.ServiceName='' then
  1872.           SubItems.Add(dr.Service)
  1873.         else
  1874.           SubItems.Add(dr.ServiceName);
  1875.         ImageIndex:=-3;
  1876.       end;
  1877.       with lv.Items.Add do begin
  1878.         Caption:='Service Group';
  1879.         SubItems.Add(dr.ServiceGroup);
  1880.       end;
  1881.       TabSheet1.Caption:='Device Properties';
  1882.       showmodal;
  1883.       free;
  1884.     end;
  1885. end;
  1886.  
  1887. procedure TfrmMSI_Overview.cmMail(Sender: TObject);
  1888. begin
  1889.   ShellExecute(handle,'open',
  1890.                cEmail+'?subject='+cCompName,
  1891.                nil,nil,SW_NORMAL);
  1892. end;
  1893.  
  1894. procedure TfrmMSI_Overview.GetPrintInfo;
  1895. var
  1896.   i: integer;
  1897. begin
  1898.   with SysInfo.Printers do begin
  1899.     lvPrinter.items.clear;
  1900.     for i:=0 to Names.count-1 do
  1901.       with lvPrinter.items.add do begin
  1902.         caption:=Names[i];
  1903.         SubItems.Add(Ports[i]);
  1904.         if Pos('\\',Ports[i])>0 then
  1905.           ImageIndex:=iiNetPrinter
  1906.         else
  1907.           ImageIndex:=iiPrinter;
  1908.         if i=DefaultIndex then
  1909.           ImageIndex:=ImageIndex+1;
  1910.       end;
  1911.   end;
  1912. end;
  1913.  
  1914. procedure TfrmMSI_Overview.tcStartupChange(Sender: TObject);
  1915. var
  1916.   i,c: integer;
  1917. begin
  1918.   with SysInfo, lvStartup, Items do begin
  1919.     BeginUpdate;
  1920.     Clear;
  1921.     case tcStartup.TabIndex of
  1922.       0: begin
  1923.         c:=Startup.User_Count-1;
  1924.         for i:=0 to c do
  1925.           with lvStartup.Items.Add do begin
  1926.             Caption:=Startup.User_Runs[i];
  1927.             SubItems.Add(GetSpecialFolder(GetDesktopWindow,CSIDL_STARTUP));
  1928.             SubItems.Add(Startup.GetRunCommand(rtUser,i));
  1929.             ImageIndex:=iiProcess;
  1930.           end;
  1931.         c:=Startup.Common_Count-1;
  1932.         for i:=0 to c do
  1933.           with lvStartup.Items.Add do begin
  1934.             Caption:=Startup.Common_Runs[i];
  1935.             SubItems.Add(GetSpecialFolder(GetDesktopWindow,CSIDL_COMMON_STARTUP));
  1936.             SubItems.Add(Startup.GetRunCommand(rtCommon,i));
  1937.             ImageIndex:=iiProcess;
  1938.           end;
  1939.       end;
  1940.       1: begin
  1941.         c:=Startup.HKCU_Count-1;
  1942.         for i:=0 to c do
  1943.           with lvStartup.Items.Add do begin
  1944.             Caption:=Startup.HKCU_Runs[i];
  1945.             SubItems.Add('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run');
  1946.             SubItems.Add(Startup.GetRunCommand(rtHKCU,i));
  1947.             ImageIndex:=iiProcess;
  1948.           end;
  1949.         c:=Startup.HKCUOnce_Count-1;
  1950.         for i:=0 to c do
  1951.           with lvStartup.Items.Add do begin
  1952.             Caption:=Startup.HKCUOnce_Runs[i];
  1953.             SubItems.Add('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce');
  1954.             SubItems.Add(Startup.GetRunCommand(rtHKCUOnce,i));
  1955.             ImageIndex:=iiProcess;
  1956.           end;
  1957.         c:=Startup.HKCUOnceEx_Count-1;
  1958.         for i:=0 to c do
  1959.           with lvStartup.Items.Add do begin
  1960.             Caption:=Startup.HKCUOnceEx_Runs[i];
  1961.             SubItems.Add('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx');
  1962.             SubItems.Add(Startup.GetRunCommand(rtHKCUOnceEx,i));
  1963.             ImageIndex:=iiProcess;
  1964.           end;
  1965.         c:=Startup.HKCUServices_Count-1;
  1966.         for i:=0 to c do
  1967.           with lvStartup.Items.Add do begin
  1968.             Caption:=Startup.HKCUServices_Runs[i];
  1969.             SubItems.Add('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices');
  1970.             SubItems.Add(Startup.GetRunCommand(rtHKCUServices,i));
  1971.             ImageIndex:=iiProcess;
  1972.           end;
  1973.         c:=Startup.HKCUServicesOnce_Count-1;
  1974.         for i:=0 to c do
  1975.           with lvStartup.Items.Add do begin
  1976.             Caption:=Startup.HKCUServicesOnce_Runs[i];
  1977.             SubItems.Add('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce');
  1978.             SubItems.Add(Startup.GetRunCommand(rtHKCUServicesOnce,i));
  1979.             ImageIndex:=iiProcess;
  1980.           end;
  1981.         c:=Startup.HKCULoad_Count-1;
  1982.         for i:=0 to c do
  1983.           with lvStartup.Items.Add do begin
  1984.             Caption:=Startup.HKCULoad_Runs[i];
  1985.             SubItems.Add('HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows');
  1986.             SubItems.Add(Startup.GetRunCommand(rtHKCULoad,i));
  1987.             ImageIndex:=iiProcess;
  1988.           end;
  1989.         c:=Startup.HKLM_Count-1;
  1990.         for i:=0 to c do
  1991.           with lvStartup.Items.Add do begin
  1992.             Caption:=Startup.HKLM_Runs[i];
  1993.             SubItems.Add('HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run');
  1994.             SubItems.Add(Startup.GetRunCommand(rtHKLM,i));
  1995.             ImageIndex:=iiProcess;
  1996.           end;
  1997.         c:=Startup.HKLMOnce_Count-1;
  1998.         for i:=0 to c do
  1999.           with lvStartup.Items.Add do begin
  2000.             Caption:=Startup.HKLMOnce_Runs[i];
  2001.             SubItems.Add('HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce');
  2002.             SubItems.Add(Startup.GetRunCommand(rtHKLMOnce,i));
  2003.             ImageIndex:=iiProcess;
  2004.           end;
  2005.         c:=Startup.HKLMOnceEx_Count-1;
  2006.         for i:=0 to c do
  2007.           with lvStartup.Items.Add do begin
  2008.             Caption:=Startup.HKLMOnceEx_Runs[i];
  2009.             SubItems.Add('HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx');
  2010.             SubItems.Add(Startup.GetRunCommand(rtHKLMOnceEx,i));
  2011.             ImageIndex:=iiProcess;
  2012.           end;
  2013.         c:=Startup.HKLMServices_Count-1;
  2014.         for i:=0 to c do
  2015.           with lvStartup.Items.Add do begin
  2016.             Caption:=Startup.HKLMServices_Runs[i];
  2017.             SubItems.Add('HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices');
  2018.             SubItems.Add(Startup.GetRunCommand(rtHKLMServices,i));
  2019.             ImageIndex:=iiProcess;
  2020.           end;
  2021.         c:=Startup.HKLMServicesOnce_Count-1;
  2022.         for i:=0 to c do
  2023.           with lvStartup.Items.Add do begin
  2024.             Caption:=Startup.HKLMServicesOnce_Runs[i];
  2025.             SubItems.Add('HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce');
  2026.             SubItems.Add(Startup.GetRunCommand(rtHKLMServicesOnce,i));
  2027.             ImageIndex:=iiProcess;
  2028.           end;
  2029.         c:=Startup.HKLMSessionManager_Count-1;
  2030.         for i:=0 to c do
  2031.           with lvStartup.Items.Add do begin
  2032.             Caption:=Startup.HKLMSessionManager_Runs[i];
  2033.             SubItems.Add('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager');
  2034.             SubItems.Add(Startup.GetRunCommand(rtHKLMSessionManager,i));
  2035.             ImageIndex:=iiProcess;
  2036.           end;
  2037.         c:=Startup.HKLMWinLogon_Count-1;
  2038.         for i:=0 to c do
  2039.           with lvStartup.Items.Add do begin
  2040.             Caption:=Startup.HKLMWinLogon_Runs[i];
  2041.             SubItems.Add('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon');
  2042.             SubItems.Add(Startup.GetRunCommand(rtHKLMWinLogon,i));
  2043.             ImageIndex:=iiProcess;
  2044.           end;
  2045.       end;
  2046.       2: begin
  2047.         c:=Startup.WININI_Count-1;
  2048.         for i:=0 to c do
  2049.           with lvStartup.Items.Add do begin
  2050.             Caption:=Startup.WININI_Runs[i];
  2051.             Subitems.Add('WIN.INI');
  2052.             Subitems.Add(Startup.GetRunCommand(rtWININI,i));
  2053.             ImageIndex:=iiProcess;
  2054.           end;
  2055.         c:=Startup.SYSTEMINI_Count-1;
  2056.         for i:=0 to c do
  2057.           with lvStartup.Items.Add do begin
  2058.             Caption:=Startup.SYSTEMINI_Runs[i];
  2059.             Subitems.Add('SYSTEM.INI');
  2060.             Subitems.Add(Startup.GetRunCommand(rtSYSTEMINI,i));
  2061.             ImageIndex:=iiProcess;
  2062.           end;
  2063.       end;
  2064.     end;
  2065.     EndUpdate;
  2066.   end;
  2067. end;
  2068.  
  2069. procedure TfrmMSI_Overview.GetStartupInfo;
  2070. begin
  2071.   tcStartupChange(tcStartup);
  2072. end;
  2073.  
  2074. procedure TfrmMSI_Overview.GetSWInfo;
  2075. var
  2076.   i: integer;
  2077. begin
  2078.   with SysInfo.Software, lvSW, Items do begin
  2079.     BeginUpdate;
  2080.     Clear;
  2081.     for i:=0 to Products.Count-1 do
  2082.       with Add do begin
  2083.         Caption:=Products[i];
  2084.         SubItems.Add(Versions[i]);
  2085.         SubItems.Add(Uninstalls[i]);
  2086.         ImageIndex:=iiPackage;
  2087.       end;
  2088.     EndUpdate;
  2089.   end;
  2090. end;
  2091.  
  2092. procedure TfrmMSI_Overview.cmNTSpec(Sender: TObject);
  2093. var
  2094.   sl: TStringList;
  2095.   i: integer;
  2096. begin
  2097.   with TdlgMSI_Detail.Create(self) do begin
  2098.     Notebook.pageindex:=1;
  2099.     TabSheet1.Caption:='Installed Suites';
  2100.     clb.items.clear;
  2101.     sl:=TStringList.Create;
  2102.     SysInfo.OS.NTSpecific.GetInstalledSuitesStr(sl);
  2103.     for i:=0 to sl.count-1 do begin
  2104.       clb.items.Add(sl.Names[i]);
  2105.       clb.Checked[clb.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  2106.     end;
  2107.     sl.Free;
  2108.     showmodal;
  2109.     free;
  2110.   end;
  2111. end;
  2112.  
  2113. procedure TfrmMSI_Overview.cmWeb(Sender: TObject);
  2114. begin
  2115.   ShellExecute(handle,'open',
  2116.                cWWW,
  2117.                nil,nil,SW_NORMAL);
  2118. end;
  2119.  
  2120. procedure TfrmMSI_Overview.cbAdaptersChange(Sender: TObject);
  2121. var
  2122.   i: Integer;
  2123. begin
  2124.   if cbAdapters.ItemIndex>-1 then
  2125.   with AdapterList.Items, SysInfo.Network.TCPIP.Adapter[cbAdapters.ItemIndex] do begin
  2126.     Clear;
  2127.     ePA.Text:=Address;
  2128.     eAT.Text:=AdapterTypes[Typ];
  2129.     cbxDHCP.Checked:=EnableDHCP;
  2130.     cbxWINS.Checked:=HaveWINS;
  2131.     for i:=0 to IPAddress.Count-1 do
  2132.       with Add do begin
  2133.         Caption:='Local';
  2134.         SubItems.Add(IPAddress[i]);
  2135.         SubItems.Add(IPAddressMask[i]);
  2136.       end;
  2137.     for i:=0 to Gateway_IPAddress.Count-1 do
  2138.       with Add do begin
  2139.         Caption:='Gateway';
  2140.         SubItems.Add(Gateway_IPAddress[i]);
  2141.         SubItems.Add(Gateway_IPAddressMask[i]);
  2142.       end;
  2143.     for i:=0 to DHCP_IPAddress.Count-1 do
  2144.       with Add do begin
  2145.         Caption:='DHCP Server';
  2146.         SubItems.Add(DHCP_IPAddress[i]);
  2147.         SubItems.Add(DHCP_IPAddressMask[i]);
  2148.       end;
  2149.     for i:=0 to PrimaryWINS_IPAddress.Count-1 do
  2150.       with Add do begin
  2151.         Caption:='Primary WINS Server';
  2152.         SubItems.Add(PrimaryWINS_IPAddress[i]);
  2153.         SubItems.Add(PrimaryWINS_IPAddressMask[i]);
  2154.       end;
  2155.     for i:=0 to SecondaryWINS_IPAddress.Count-1 do
  2156.       with Add do begin
  2157.         Caption:='Secondary WINS Server';
  2158.         SubItems.Add(SecondaryWINS_IPAddress[i]);
  2159.         SubItems.Add(SecondaryWINS_IPAddressMask[i]);
  2160.       end;
  2161.   end;
  2162. end;
  2163.  
  2164. procedure TfrmMSI_Overview.cbxClick(Sender: TObject);
  2165. var
  2166.   oc: TNotifyEvent;
  2167. begin
  2168.   with TCheckBox(Sender) do begin
  2169.     oc:=OnClick;
  2170.     OnClick:=nil;
  2171.     Checked:=not Checked;
  2172.     OnClick:=oc;
  2173.   end;
  2174. end;
  2175.  
  2176. procedure TfrmMSI_Overview.FormDestroy(Sender: TObject);
  2177. var
  2178.   i: integer;
  2179. begin
  2180.   for i:=0 to Tree.Items.Count-1 do
  2181.     Dispose(Tree.Items[i].Data);
  2182.   Report.Free;
  2183. end;
  2184.  
  2185.  
  2186. procedure TfrmMSI_Overview.GetStorageInfo;
  2187. var
  2188.   i,j: Integer;
  2189.   n,r: TTreeNode;
  2190.   pi: PInteger;
  2191. begin
  2192.   with SysInfo.Storage do
  2193.     try
  2194.       Screen.Cursor:=crHourGlass;
  2195.       GetInfo;
  2196.       StorageTree.Items.Clear;
  2197.       for i:=0 to DeviceCount-1 do begin
  2198.         New(pi);
  2199.         pi^:=i;
  2200.         r:=StorageTree.Items.AddChildObject(nil,Format('%s %s - %d MB',[MiTeC_WinIOCTL.GetMediaTypeStr(Devices[i].Geometry.MediaType),Devices[i].Model,(Devices[i].Capacity div 1024) div 1024]),pi);
  2201.         case Devices[i].Geometry.MediaType of
  2202.           Fixedmedia: r.ImageIndex:=0;
  2203.           Removablemedia: r.ImageIndex:=1;
  2204.           else r.ImageIndex:=1;
  2205.         end;
  2206.         r.SelectedIndex:=r.ImageIndex;
  2207.         for j:=0 to High(Devices[i].Layout) do begin
  2208.           n:=StorageTree.Items.AddChild(r,Format('%s / %s - %d MB',[
  2209.                                GetPartitionType(Devices[i].Layout[j].PartitionNumber,Devices[i].Layout[j].PartitionType),
  2210.                                GetPartitionSystem(Devices[i].Layout[j].PartitionType),
  2211.                                (Devices[i].Layout[j].PartitionLength.QuadPart div 1024) div 1024]));
  2212.           n.ImageIndex:=r.ImageIndex;
  2213.           n.SelectedIndex:=n.ImageIndex;
  2214.         end;
  2215.         r.Expand(False);
  2216.       end;
  2217.     finally
  2218.       Screen.Cursor:=crDefault;
  2219.     end;
  2220. end;
  2221.  
  2222. procedure TfrmMSI_Overview.cmRes(Sender: TObject);
  2223. var
  2224.   d: TDevice;
  2225.   i: Integer;
  2226.   DR: TDeviceResources;
  2227.   dn: string;
  2228. begin
  2229.   if Assigned(Tree.Selected) and (Tree.Selected.Level=2) then begin
  2230.     i:=PInteger(Tree.Selected.Data)^;
  2231.     d:=SysInfo.Devices.Devices[i];
  2232.     if not IsEmptyString(d.ResourceListKey) then begin
  2233.       Screen.Cursor:=crHourGlass;
  2234.       try
  2235.         SysInfo.Devices.GetDeviceResources(d,DR);
  2236.       finally
  2237.         Screen.Cursor:=crDefault;
  2238.       end;
  2239.       if IsEmptyString(d.FriendlyName) then
  2240.         dn:=d.Description
  2241.       else
  2242.         dn:=d.FriendlyName;
  2243.       ShowResourcesDlg(dn,DR);
  2244.     end else
  2245.       MessageDlg('No resource list available.',mtInformation,[mbOK],0);
  2246.   end;
  2247. end;
  2248.  
  2249. procedure TfrmMSI_Overview.GetUSBInfo;
  2250. var
  2251.   ii,i: Integer;
  2252.   s: string;
  2253.   pi: PInteger;
  2254.   r,n: TTreeNode;
  2255. begin
  2256.   with SysInfo.USB do begin
  2257.  
  2258.   GetInfo;
  2259.   USBTree.Items.Clear;
  2260.   for i:=0 to USBNodeCount-1 do
  2261.     with USBNodes[i] do begin
  2262.       s:='';
  2263.       ii:=Integer(USBClass);
  2264.       case USBClass of
  2265.         usbHostController: s:=s+Format('%s %d',[ClassNames[Integer(USBClass)],USBDevice.Port]);
  2266.         usbHub: s:=s+ClassNames[Integer(USBClass)];
  2267.         else begin
  2268.           if USBDevice.ConnectionStatus=1 then begin
  2269.             if USBClass=usbExternalHub then
  2270.               s:=s+Format('Port[%d]: %s',[USBDevice.Port,ClassNames[Integer(USBClass)]])
  2271.             else
  2272.               s:=s+Format('Port[%d]: %s',[USBDevice.Port,USBDevice.Product]);
  2273.           end else begin
  2274.             s:=s+Format('Port[%d]: %s',[USBDevice.Port,ConnectionStates[USBDevice.ConnectionStatus]]);
  2275.             ii:=13;
  2276.           end;
  2277.         end;
  2278.       end;
  2279.       r:=FindUSBNode(ParentIndex);
  2280.       new(pi);
  2281.       pi^:=i;
  2282.       n:=USBTree.Items.AddChildObject(r,s,pi);
  2283.       n.ImageIndex:=ii;
  2284.       n.SelectedIndex:=n.ImageIndex;
  2285.       if Assigned(r) then
  2286.         r.Expand(False);
  2287.       r:=n;
  2288.       if (USBClass in [usbReserved..usbStorage,usbVendorSpec]) and (USBDevice.ConnectionStatus=1) then begin
  2289.         ii:=15;
  2290.         n:=USBTree.Items.AddChild(r,Format('Classname: %s',[ClassNames[Integer(USBClass)]]));
  2291.         n.ImageIndex:=ii;
  2292.         n.SelectedIndex:=n.ImageIndex;
  2293.         n:=USBTree.Items.AddChild(r,Format('Manufacturer: %s',[USBDevice.Manufacturer]));
  2294.         n.ImageIndex:=ii;
  2295.         n.SelectedIndex:=n.ImageIndex;
  2296.         n:=USBTree.Items.AddChild(r,Format('Serial: %s',[USBDevice.Serial]));
  2297.         n.ImageIndex:=ii;
  2298.         n.SelectedIndex:=n.ImageIndex;
  2299.         n:=USBTree.Items.AddChild(r,Format('Power consumption: %d mA',[USBDevice.MaxPower]));
  2300.         n.ImageIndex:=ii;
  2301.         n.SelectedIndex:=n.ImageIndex;
  2302.         n:=USBTree.Items.AddChild(r,Format('Specification: %d.%d',[USBDevice.MajorVersion,USBDevice.MinorVersion]));
  2303.         n.ImageIndex:=ii;
  2304.         n.SelectedIndex:=n.ImageIndex;
  2305.       end;
  2306.     end;
  2307.   end;
  2308. end;
  2309.  
  2310. procedure TfrmMSI_Overview.USBTreeCustomDrawItem(Sender: TCustomTreeView;
  2311.   Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  2312. var
  2313.   usb: TUSBNode;
  2314. begin
  2315.   if Assigned(Node) then begin
  2316.     if Assigned(Node.data) then begin
  2317.       usb:=SysInfo.USB.USBNodes[PInteger(Node.Data)^];
  2318.       if usb.USBClass in [usbReserved..usbStorage,usbVendorSpec] then begin
  2319.         if usb.USBDevice.ConnectionStatus=1 then
  2320.           Sender.Canvas.Font.Style:=[fsBold];
  2321.       end;
  2322.     end else begin
  2323.       if cdsSelected in State then
  2324.         Sender.Canvas.Font.Color:=clWhite
  2325.       else
  2326.         Sender.Canvas.Font.Color:=clNavy;
  2327.     end;
  2328.   end;
  2329. end;
  2330.  
  2331. procedure TfrmMSI_Overview.TreeDeletion(Sender: TObject;
  2332.   Node: TTreeNode);
  2333. begin
  2334.   if Assigned(Node.Data) then
  2335.     Dispose(PInteger(Node.Data));
  2336. end;
  2337.  
  2338. function TfrmMSI_Overview.FindUSBNode(AIndex: Integer): TTreeNode;
  2339. var
  2340.   n: TTreeNode;
  2341. begin
  2342.   Result:=nil;
  2343.   n:=USBTree.Items.GetFirstNode;
  2344.   while Assigned(n) do begin
  2345.     if Assigned(n.Data) and (PInteger(n.Data)^=AIndex) then begin
  2346.       Result:=n;
  2347.       Break;
  2348.     end;
  2349.     n:=n.GetNext;
  2350.   end;
  2351. end;
  2352.  
  2353. procedure TfrmMSI_Overview.StorageTreeCustomDrawItem(
  2354.   Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
  2355.   var DefaultDraw: Boolean);
  2356. begin
  2357.   if Assigned(Node) then
  2358.     if Assigned(Node.data) then
  2359.       Sender.Canvas.Font.Style:=[fsBold];
  2360. end;
  2361.  
  2362. procedure TfrmMSI_Overview.GetProcessesInfo;
  2363. var
  2364.   i: Integer;
  2365. begin
  2366.   with SysInfo.ProcessList do
  2367.     try
  2368.       if Win32Platform<>VER_PLATFORM_WIN32_NT then begin
  2369.         ProcList.Columns[2].Caption:='Threads';
  2370.         ProcList.Columns[3].Caption:='Usage';
  2371.       end;
  2372.  
  2373.       ProcList.Items.BeginUpdate;
  2374.       ProcList.Items.Clear;
  2375.       GetInfo;
  2376.       for i:=0 to ProcessCount-1 do
  2377.         with ProcList.Items.Add do begin
  2378.           Caption:=Processes[i].Name;
  2379.           if Win32Platform<>VER_PLATFORM_WIN32_NT then begin
  2380.             SubItems.Add(Format('%x',[Processes[i].PID]));
  2381.             SubItems.Add(Format('%d',[Processes[i].ThreadCount]));
  2382.             SubItems.Add(Format('%d',[Processes[i].Usage]));
  2383.           end else begin
  2384.             SubItems.Add(Format('%d',[Processes[i].PID]));
  2385.             SubItems.Add(FormatSeconds((Processes[i].UserTime.QuadPart+Processes[i].KernelTime.QuadPart)/10000000,True,False,True));
  2386.             SubItems.Add(Format('%d KB',[Processes[i].VMCounters.WorkingSetSize div 1024]));
  2387.           end;
  2388.         end;
  2389.     finally
  2390.       ProcList.Items.EndUpdate;
  2391.     end;
  2392. end;
  2393.  
  2394. procedure TfrmMSI_Overview.RefreshOverview(ForceRefresh: Boolean);
  2395. begin
  2396.   screen.cursor:=crhourglass;
  2397.   try
  2398.     if ForceRefresh then
  2399.       SysInfo.Refresh;
  2400.     GetInfo;
  2401.   finally
  2402.     screen.cursor:=crdefault;
  2403.   end;
  2404. end;
  2405.  
  2406. procedure TfrmMSI_Overview.bESClick(Sender: TObject);
  2407. begin
  2408.   {$IFDEF ERROR_INTERCEPT}
  2409.   ShowExceptionStack;
  2410.   {$ENDIF}
  2411. end;
  2412.  
  2413. procedure TfrmMSI_Overview.GetMonitorInfo;
  2414. var
  2415.   i: integer;
  2416. begin
  2417.   with SysInfo, Monitor do begin
  2418.     cbMon.Items.Clear;
  2419.     for i:=0 to Count-1 do
  2420.       cbMon.Items.Add(Monitors[i].DeviceDesription);
  2421.     cbMon.ItemIndex:=0;
  2422.     cbMonChange(nil);
  2423.   end;
  2424. end;
  2425.  
  2426. procedure TfrmMSI_Overview.cbMonChange(Sender: TObject);
  2427. begin
  2428.   with SysInfo, Monitor.Monitors[cbMon.ItemIndex] do begin
  2429.     eMonName.Text:=Format('%s %s',[Name,ProductNumber]);
  2430.     eMonMan.Text:=Manufacturer;
  2431.     eMonSize.Text:=Format('(%d x %d) cm',[Width,Height]);
  2432.     eMonSN.Text:=Format('%8.8x',[SerialNumber]);
  2433.     eGamma.Text:=Format('%1.2f',[Gamma]);
  2434.     eMonDate.Text:=Format('%d/%d',[Year,Week]);
  2435.     eEDID.Text:=EDID_Version;
  2436.     eMonMod.Text:=Model;
  2437.   end;
  2438. end;
  2439.  
  2440. end.
  2441.