home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / kompon / d56 / MSYSINFO.ZIP / Source / MSI_Overview.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-07-24  |  38.1 KB  |  1,409 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {         MiTeC System Information Component            }
  5. {                System Overview                        }
  6. {           version 6.0 for Delphi 5,6                  }
  7. {                                                       }
  8. {       Copyright ⌐ 1997,2001 Michal Mutl               }
  9. {                                                       }
  10. {*******************************************************}
  11.  
  12.  
  13. {$INCLUDE MITEC_DEF.INC}
  14.  
  15. unit MSI_Overview;
  16.  
  17. interface
  18.  
  19. uses
  20.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  21.   MSI_GUI, ComCtrls, StdCtrls, ExtCtrls, CheckLst,
  22.   {$IFDEF D4PLUS} ImgList,{$ENDIF}
  23.   Mask, Menus, Gauges, Buttons;
  24.  
  25. type
  26.   TPage = (pgWksta, pgOS, pgCPU, pgMem, pgDisplay, pgAPM, pgMedia, pgNet, pgDev,
  27.            pgPrn, pgEng, pgDisk, pgTZ, pgProcs, pgStartup, pgSoftware, pgAbout);
  28.  
  29.   TPages = set of TPage;
  30.  
  31. const
  32.   iiComputer      = 0;
  33.   iiSystem        = 1;
  34.   iiDisplay       = 2;
  35.   iiMonitor       = 3;
  36.   iiVolumes       = 4;
  37.   iiFDD           = 5;
  38.   iiHDD           = 6;
  39.   iiCDROM         = 7;
  40.   iiTape          = 8;
  41.   iiAPM           = 9;
  42.   iiImaging       = 10;
  43.   iiKeyboard      = 11;
  44.   iiMouse         = 12;
  45.   iiModem         = 13;
  46.   iiPort          = 14;
  47.   iiAdapter       = 15;
  48.   iiPackage       = 16;
  49.   iiSCSI          = 17;
  50.   iiDriver        = 18;
  51.   iiSound         = 19;
  52.   iiUSB           = 20;
  53.   iiGame          = 21;
  54.   iiNet           = 22;
  55.   iiProcess       = 23;
  56.   iiPCMCIA        = 24;
  57.   iiChanger       = 25;
  58.   iiHID           = 26;
  59.   iiGPS           = 27;
  60.   iiReader        = 28;
  61.   iiInfrared      = 29;
  62.   iiMIDI          = 30;
  63.   iiWave          = 31;
  64.   iiMixer         = 32;
  65.   iiAUX           = 33;
  66.   iiDirectX       = 34;
  67.   iiPrinter       = 35;
  68.   iiPrinterDef    = 36;
  69.   iiNetPrinter    = 37;
  70.   iiNetPrinterDef = 38;
  71.   iiController    = 39;
  72.   
  73.  
  74.  
  75.   pgAll = [pgWksta, pgOS, pgCPU, pgMem, pgDisplay, pgAPM, pgMedia, pgNet, pgDev,
  76.            pgPrn, pgEng, pgDisk, pgTZ, pgProcs, pgStartup, pgSoftware];
  77.  
  78.  
  79. type
  80.   TfrmMSI_Overview = class(TForm)
  81.     Panel1: TPanel;
  82.     Panel2: TPanel;
  83.     bRefresh: TButton;
  84.     Panel3: TPanel;
  85.     pc: TPageControl;
  86.     tsWksta: TTabSheet;
  87.     tsOS: TTabSheet;
  88.     tsCPU: TTabSheet;
  89.     gbMID: TGroupBox;
  90.     Label1: TLabel;
  91.     eWksta: TEdit;
  92.     Label2: TLabel;
  93.     eUser: TEdit;
  94.     Image1: TImage;
  95.     GroupBox2: TGroupBox;
  96.     Label3: TLabel;
  97.     Label4: TLabel;
  98.     eBIOSName: TEdit;
  99.     eBIOSCopy: TEdit;
  100.     Label5: TLabel;
  101.     Label6: TLabel;
  102.     eBIOSDate: TEdit;
  103.     eBIOSExt: TEdit;
  104.     GroupBox3: TGroupBox;
  105.     Label7: TLabel;
  106.     Label8: TLabel;
  107.     eLastBoot: TEdit;
  108.     eSysTime: TEdit;
  109.     pNumLock: TPanel;
  110.     pCapsLock: TPanel;
  111.     pScrollLock: TPanel;
  112.     bOK: TButton;
  113.     Image2: TImage;
  114.     lVersion: TLabel;
  115.     lVerNo: TLabel;
  116.     Bevel1: TBevel;
  117.     Label9: TLabel;
  118.     Label10: TLabel;
  119.     ePID: TEdit;
  120.     eRegUser: TEdit;
  121.     Label11: TLabel;
  122.     eRegOrg: TEdit;
  123.     GroupBox4: TGroupBox;
  124.     bEnvironment: TButton;
  125.     Image3: TImage;
  126.     lCPU: TLabel;
  127.     tsMemory: TTabSheet;
  128.     GroupBox7: TGroupBox;
  129.     Image4: TImage;
  130.     Label16: TLabel;
  131.     Label17: TLabel;
  132.     ePT: TEdit;
  133.     ePF: TEdit;
  134.     Label18: TLabel;
  135.     Label19: TLabel;
  136.     Label20: TLabel;
  137.     Label21: TLabel;
  138.     eFT: TEdit;
  139.     eFF: TEdit;
  140.     Label22: TLabel;
  141.     Label23: TLabel;
  142.     Label24: TLabel;
  143.     Label25: TLabel;
  144.     eVT: TEdit;
  145.     eVF: TEdit;
  146.     Label26: TLabel;
  147.     Label27: TLabel;
  148.     GroupBox8: TGroupBox;
  149.     GroupBox9: TGroupBox;
  150.     Label28: TLabel;
  151.     Label29: TLabel;
  152.     eAG: TEdit;
  153.     eAppAddr: TEdit;
  154.     Label30: TLabel;
  155.     ePS: TEdit;
  156.     Label31: TLabel;
  157.     Label32: TLabel;
  158.     tsDisplay: TTabSheet;
  159.     Image5: TImage;
  160.     cbDisplay: TComboBox;
  161.     Label33: TLabel;
  162.     GroupBox10: TGroupBox;
  163.     Label34: TLabel;
  164.     Label35: TLabel;
  165.     Label36: TLabel;
  166.     eChip: TEdit;
  167.     eDAC: TEdit;
  168.     eMem: TEdit;
  169.     GroupBox11: TGroupBox;
  170.     GroupBox12: TGroupBox;
  171.     eBIOS: TEdit;
  172.     lTechnology: TLabel;
  173.     lMetrics: TLabel;
  174.     lPixWidth: TLabel;
  175.     lPixHeight: TLabel;
  176.     lPixDiag: TLabel;
  177.     bCurve: TButton;
  178.     bLine: TButton;
  179.     bPoly: TButton;
  180.     bRaster: TButton;
  181.     bText: TButton;
  182.     Label37: TLabel;
  183.     tsAPM: TTabSheet;
  184.     GroupBox13: TGroupBox;
  185.     Label38: TLabel;
  186.     Label39: TLabel;
  187.     eAC: TEdit;
  188.     eBat: TEdit;
  189.     Image6: TImage;
  190.     GroupBox14: TGroupBox;
  191.     Label40: TLabel;
  192.     Label41: TLabel;
  193.     eBatFull: TEdit;
  194.     eBatLife: TEdit;
  195.     tsMedia: TTabSheet;
  196.     Label42: TLabel;
  197.     Panel5: TPanel;
  198.     img: TImageList;
  199.     tsNetwork: TTabSheet;
  200.     Label47: TLabel;
  201.     Panel6: TPanel;
  202.     lvNetwork: TListView;
  203.     GroupBox16: TGroupBox;
  204.     tsDevices: TTabSheet;
  205.     psd: TPrinterSetupDialog;
  206.     tsPrinters: TTabSheet;
  207.     Label48: TLabel;
  208.     Panel7: TPanel;
  209.     lvPrinter: TListView;
  210.     bPrint: TButton;
  211.     tsEngines: TTabSheet;
  212.     GroupBox17: TGroupBox;
  213.     Image7: TImage;
  214.     GroupBox18: TGroupBox;
  215.     Image8: TImage;
  216.     lODBC: TLabel;
  217.     lBDE: TLabel;
  218.     lDirectX: TLabel;
  219.     tsDrives: TTabSheet;
  220.     Label54: TLabel;
  221.     cbDrive: TComboBox;
  222.     GroupBox19: TGroupBox;
  223.     imgDrive: TImage;
  224.     lDriveType: TLabel;
  225.     clbFlags: TCheckListBox;
  226.     Label55: TLabel;
  227.     Label56: TLabel;
  228.     eUNC: TEdit;
  229.     eDSN: TEdit;
  230.     Bevel3: TBevel;
  231.     lCapacity: TLabel;
  232.     lFree: TLabel;
  233.     lBPS: TLabel;
  234.     lSPC: TLabel;
  235.     lTC: TLabel;
  236.     lFC: TLabel;
  237.     Bevel4: TBevel;
  238.     bReport: TButton;
  239.     ReportMenu: TPopupMenu;
  240.     pmAll: TMenuItem;
  241.     pmSelected: TMenuItem;
  242.     sd: TSaveDialog;
  243.     Panel10: TPanel;
  244.     gDisk: TGauge;
  245.     Panel11: TPanel;
  246.     gAPM: TGauge;
  247.     GroupBox20: TGroupBox;
  248.     Label57: TLabel;
  249.     Label58: TLabel;
  250.     Label59: TLabel;
  251.     Image9: TImage;
  252.     eWSDesc: TEdit;
  253.     eWSVer: TEdit;
  254.     eWSStat: TEdit;
  255.     bModes: TButton;
  256.     tsTZ: TTabSheet;
  257.     Panel12: TPanel;
  258.     Image10: TImage;
  259.     gbStd: TGroupBox;
  260.     Label12: TLabel;
  261.     Label73: TLabel;
  262.     eStdStart: TEdit;
  263.     eStdBias: TEdit;
  264.     eTZ: TEdit;
  265.     Label74: TLabel;
  266.     gbDay: TGroupBox;
  267.     Label75: TLabel;
  268.     Label76: TLabel;
  269.     Label77: TLabel;
  270.     edayStart: TEdit;
  271.     eDayBias: TEdit;
  272.     gMemory: TGauge;
  273.     Panel13: TPanel;
  274.     Panel14: TPanel;
  275.     lbIP: TListBox;
  276.     lbMAC: TListBox;
  277.     Label64: TLabel;
  278.     Label69: TLabel;
  279.     Panel15: TPanel;
  280.     bProto: TButton;
  281.     bServ: TButton;
  282.     bCli: TButton;
  283.     lFontRes: TLabel;
  284.     Panel8: TPanel;
  285.     Tree: TTreeView;
  286.     FolderList: TListView;
  287.     Panel9: TPanel;
  288.     bProps: TButton;
  289.     pcCPU: TPageControl;
  290.     tsID: TTabSheet;
  291.     tsFeatures: TTabSheet;
  292.     GroupBox5: TGroupBox;
  293.     lModel: TLabel;
  294.     lSerial: TLabel;
  295.     lVendor: TLabel;
  296.     lTrans: TLabel;
  297.     GroupBox21: TGroupBox;
  298.     lL1Data: TLabel;
  299.     lL1Code: TLabel;
  300.     lLevel1: TLabel;
  301.     lLevel2: TLabel;
  302.     GroupBox6: TGroupBox;
  303.     Panel4: TPanel;
  304.     clbCPU: TCheckListBox;
  305.     lCodename: TLabel;
  306.     lDAO: TLabel;
  307.     tsAbout: TTabSheet;
  308.     FooterPanel: TPanel;
  309.     sbMail: TSpeedButton;
  310.     TitlePanel: TPanel;
  311.     imgIcon: TImage;
  312.     Panel16: TPanel;
  313.     Memo: TMemo;
  314.     tsProcs: TTabSheet;
  315.     Panel17: TPanel;
  316.     lvProcs: TListView;
  317.     ProcPanel: TPanel;
  318.     bTerminate: TButton;
  319.     bProcProps: TButton;
  320.     tsStartup: TTabSheet;
  321.     tsSoftware: TTabSheet;
  322.     tcStartup: TTabControl;
  323.     bNTSpec: TButton;
  324.     lvMedia: TListView;
  325.     Panel18: TPanel;
  326.     lvSound: TListView;
  327.     Label14: TLabel;
  328.     Panel19: TPanel;
  329.     lvDirectX: TListView;
  330.     Label13: TLabel;
  331.     Panel20: TPanel;
  332.     lvSW: TListView;
  333.     Panel21: TPanel;
  334.     lvStartup: TListView;
  335.     lTitle: TLabel;
  336.     lVer: TLabel;
  337.     lADO: TLabel;
  338.     Label15: TLabel;
  339.     ePKey: TEdit;
  340.     lCSD: TLabel;
  341.     lDVD: TLabel;
  342.     procedure FormCreate(Sender: TObject);
  343.     procedure cmRefresh(Sender: TObject);
  344.     procedure cmClose(Sender: TObject);
  345.     procedure cmEnvironment(Sender: TObject);
  346.     procedure cmCaps(Sender: TObject);
  347.     procedure cmPrintSetup(Sender: TObject);
  348.     procedure cbDriveChange(Sender: TObject);
  349.     procedure cmReportClick(Sender: TObject);
  350.     procedure cmReportAll(Sender: TObject);
  351.     procedure cmReportCurrent(Sender: TObject);
  352.     procedure clbClickCheck(Sender: TObject);
  353.     procedure cmModes(Sender: TObject);
  354.     procedure cmProto(Sender: TObject);
  355.     procedure cmServ(Sender: TObject);
  356.     procedure cmCli(Sender: TObject);
  357.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  358.     procedure TreeChange(Sender: TObject; Node: TTreeNode);
  359.     procedure cmProps(Sender: TObject);
  360.     procedure cmMail(Sender: TObject);
  361.     procedure cmTerminate(Sender: TObject);
  362.     procedure cmProcProps(Sender: TObject);
  363.     procedure tcStartupChange(Sender: TObject);
  364.     procedure cmNTSpec(Sender: TObject);
  365.   private
  366.     FPages: TPages;
  367.     FSysInfo: TMSystemInfo;
  368.     FShowRepBut: Boolean;
  369.     procedure SetPages(const Value: TPages);
  370.     procedure SetShowRepBut(const Value: Boolean);
  371.     procedure SetCaptionText(const Value: string);
  372.   public
  373.     Report :TStringList;
  374.  
  375.     property DisplayedPages: TPages read FPages write SetPages;
  376.     property SysInfo: TMSystemInfo read FSysInfo write FSysInfo;
  377.     property ShowReportButton: Boolean read FShowRepBut write SetShowRepBut;
  378.     property CaptionText: string Write SetCaptionText;
  379.  
  380.     procedure GetInfo;
  381.  
  382.     procedure GetWkstaInfo;
  383.     procedure GetOSInfo;
  384.     procedure GetCPUInfo;
  385.     procedure GetMemoryInfo;
  386.     procedure GetDisplayInfo;
  387.     procedure GetAPMInfo;
  388.     procedure GetMediaInfo;
  389.     procedure GetNetInfo;
  390.     procedure GetDeviceInfo;
  391.     procedure GetEngInfo;
  392.     procedure GetDriveInfo;
  393.     procedure GetTZInfo;
  394.     procedure GetProcInfo;
  395.     procedure GetPrintInfo;
  396.     procedure GetStartupInfo;
  397.     procedure GetSWInfo;
  398.   end;
  399.  
  400. var
  401.   frmMSI_Overview: TfrmMSI_Overview;
  402.  
  403. implementation
  404.  
  405. uses ShellAPI, MiTeC_Routines, MSI_Devices, MSI_DetailDlg, MSI_OS, MSI_APM,
  406.   MSI_Startup;
  407.  
  408. {$R *.DFM}
  409.  
  410. const
  411.   cDeviceImageIndex: array[TDeviceClass] of integer =
  412.                       (iiAPM, iiSystem, iiVolumes, iiDisplay, iiCDROM, iiVolumes,
  413.                        iiFDD, iiGPS, iiHID, iiVolumes, iiDriver, iiImaging,
  414.                        iiInfrared, iiKeyboard, iiChanger, iiDriver, iiMouse, iiModem,
  415.                        iiMonitor, iiReader, iiPort, iiAdapter, iiDriver,
  416.                        iiPackage, iiDriver, iiAdapter, iiPort, iiPrinter, iiSCSI,
  417.                        iiReader, iiSound, iiHDD, iiSystem, iiTape, iiController, iiTape, iiUSB);
  418.  
  419. { TfrmMSI_Overview }
  420.  
  421. procedure TfrmMSI_Overview.GetWkstaInfo;
  422. begin
  423.   with SysInfo.Machine do begin
  424.     if Trim(Computer)<>'' then
  425.       tsWkSta.Caption:=' '+Computer+' ';
  426.     eWksta.text:=Name;
  427.     eUser.text:=User;
  428.     eBIOSName.text:=BIOSName;
  429.     eBIOSCopy.text:=BIOSCopyright;
  430.     eBIOSDate.text:=BIOSDate;
  431.     eBIOSExt.text:=BIOSExtendedInfo;
  432.     eLastBoot.text:=datetimetostr(LastBoot);
  433.     eSysTime.text:=formatseconds(SystemUpTime,true,false,false);
  434.     if NumLock then
  435.       pNumLock.color:=clLime
  436.     else
  437.       pNumLock.color:=clSilver;
  438.     if CapsLock then
  439.       pCapsLock.color:=clLime
  440.     else
  441.       pCapsLock.color:=clSilver;
  442.     if ScrollLock then
  443.       pScrollLock.color:=clLime
  444.     else
  445.       pScrollLock.color:=clSilver;
  446.   end;
  447. end;
  448.  
  449. procedure TfrmMSI_Overview.GetOSInfo;
  450. var
  451.   i: integer;
  452.   s: string;
  453. begin
  454.   with SysInfo.OS do begin
  455.     s:=OSVersion;
  456.     tsOS.caption:=Platform;
  457.     if IsNT then begin
  458.       case NTSpecific.ProductType of
  459.         ptWorkstation: s:=s+' - Workstation';
  460.         ptServer: s:=s+' - Server';
  461.         ptAdvancedServer: s:=s+' - Advanced Server';
  462.       end;
  463.       lCSD.caption:=CSD;
  464.     end;
  465.  
  466.     lVersion.caption:=s;
  467.     lVerNo.caption:=format('Version: %d.%d.%d',[MajorVersion,MinorVersion,BuildNumber]);
  468.  
  469.     bNTSpec.Enabled:=Is2K or IsXP;
  470.     if IsOSR2 then
  471.       lCSD.caption:='OSR 2'
  472.     else
  473.       if IsSE then
  474.         lCSD.caption:='Second Edition';
  475.     ePID.text:=ProductID;
  476.     ePKey.text:=ProductKey;
  477.     eRegUser.text:=RegisteredUser;
  478.     eRegOrg.text:=RegisteredOrg;
  479.     lDVD.Caption:='DVD Region: '+DVDRegion;
  480.  
  481.     FolderList.Items.Clear;
  482.     for i:=0 to Folders.Count-1 do
  483.       if Folders.Values[Folders.Names[i]]<>'' then
  484.         with FolderList.Items.Add do begin
  485.           Caption:=Folders.Names[i];
  486.           SubItems.Add(Folders.Values[Folders.Names[i]]);
  487.         end;
  488.   end;
  489. end;
  490.  
  491. procedure TfrmMSI_Overview.GetCPUInfo;
  492. var
  493.   sl :TStringList;
  494.   i :Longint;
  495. begin
  496.   with SysInfo.CPU do begin
  497.     lCPU.caption:=format('%d x %s %s - %d MHz',[Count,Trim(Vendor),Trim(VendorID),Frequency]);
  498.     lVendor.Caption:='Vendor: '+VendorEx;
  499.     lSerial.caption:='Serial Number: '+SerialNumber;
  500.     lTrans.Caption:=Format('Transistors: %d',[Transistors]);
  501.     lCodename.Caption:='Code Name: '+Codename;
  502.     lModel.caption:=format('Family %d  Model %d  Stepping %d',[Family,Model,Stepping]);
  503.     sl:=TStringList.Create;
  504.     Features.Report(sl);
  505.     sl.Add(Format('FDIV Bug=%d',[integer(FDIVBug)]));
  506.     clbCPU.items.Clear;
  507.     for i:=1 to sl.count-1 do begin
  508.       clbCPU.items.Add(sl.Names[i]);
  509.       clbCPU.Checked[clbCPU.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  510.     end;
  511.     sl.Free;
  512.     lL1Data.Caption:=Format('Level 1 Data Cache: %d Kb',[Cache.L1Data]);
  513.     lL1Code.Caption:=Format('Level 1 Instruction Cache: %d Kb',[Cache.L1Code]);
  514.     lLevel1.Caption:=Format('Level 1 Unified Cache: %d Kb',[Cache.Level1]);
  515.     lLevel2.Caption:=Format('Level 2 Unified Cache: %d Kb',[Cache.Level2]);
  516.   end;
  517. end;
  518.  
  519. procedure TfrmMSI_Overview.GetMemoryInfo;
  520. begin
  521.   with SysInfo.Memory do begin
  522.     ePT.text:=formatfloat('#,##',PhysicalTotal);
  523.     ePF.text:=formatfloat('#,#0',PhysicalFree);
  524.     eFT.text:=formatfloat('#,##',PageFileTotal);
  525.     eFF.text:=formatfloat('#,#0',PageFileFree);
  526.     eVT.text:=formatfloat('#,##',VirtualTotal);
  527.     eVF.text:=formatfloat('#,#0',VirtualFree);
  528.     gMemory.Progress:=MemoryLoad;
  529.     eAG.text:=formatfloat('#,##',AllocGranularity);
  530.     eAppAddr.text:=format('%s - %s',[inttohex(MinAppAddress,8),inttohex(MaxAppAddress,8)]);
  531.     ePS.text:=formatfloat('#,##',PageSize);
  532.   end;
  533. end;
  534.  
  535. procedure TfrmMSI_Overview.GetDisplayInfo;
  536. begin
  537.   with SysInfo, Display do begin
  538.     cbDisplay.Items.Add(Adapter);
  539.     cbDisplay.itemindex:=0;
  540.     eChip.text:=Chipset;
  541.     eDAC.text:=DAC;
  542.     eMem.text:=IntToStr(Memory);
  543.     eBIOS.text:=format('%s (%s)',[BIOSVersion,BIOSDate]);
  544.     lTechnology.caption:='Technology: '+Technology;
  545.     lMetrics.caption:=format('Metrics: %d x %d - %d bit',[HorzRes,VertRes,ColorDepth]);
  546.     lPixWidth.caption:=format('Pixel Width: %d',[PixelWidth]);
  547.     lPixHeight.caption:=format('Pixel Height: %d',[PixelHeight]);
  548.     lPixDiag.caption:=format('Pixel Diagonal: %d',[PixelDiagonal]);
  549.     lFontRes.caption:=format('Font Resolution: %d dpi',[FontResolution]);
  550.   end;
  551. end;
  552.  
  553. procedure TfrmMSI_Overview.GetAPMInfo;
  554. begin
  555.   with SysInfo.APM do begin
  556.     case ACPowerStatus of
  557.       psUnknown: eAC.text:='Unknown';
  558.       psOnline: eAC.text:='Online';
  559.       psOffline: eAC.text:='Offline';
  560.     end;
  561.     case BatteryChargeStatus of
  562.       bsUnknown: eBat.text:='Unknown';
  563.       bsHigh: eBat.text:='High';
  564.       bsLow: eBat.text:='Low';
  565.       bsCritical: eBat.text:='Critical';
  566.       bsCharging: eBat.text:='Charging';
  567.       bsNoBattery: eBat.text:='No Battery';
  568.     end;
  569.     if BatteryLifePercent<=100 then begin
  570.       eBatFull.text:=formatseconds(BatteryLifeFullTime,true,false,false);
  571.       eBatLife.text:=formatseconds(BatteryLifeTime,true,false,false);
  572.       gAPM.Progress:=BatteryLifePercent;
  573.     end else begin
  574.       eBatFull.text:='<info not available>';
  575.       eBatLife.text:='<info not available>';
  576.     end;
  577.   end;
  578. end;
  579.  
  580. procedure TfrmMSI_Overview.GetMediaInfo;
  581. var
  582.   i :integer;
  583. begin
  584.   with SysInfo.Media do begin
  585.     lvMedia.Items.beginUpdate;
  586.     lvMedia.items.clear;
  587.     for i:=0 to Devices.count-1 do
  588.       with lvMedia.items.add do begin
  589.         caption:=Devices[i];
  590.         if i=GamePortIndex then
  591.           imageindex:=iiGame
  592.         else
  593.           if i=SoundCardIndex then
  594.             imageindex:=iiAdapter
  595.           else
  596.             imageindex:=iiSound;
  597.       end;
  598.     lvMedia.Items.EndUpdate;
  599.     lvSound.Items.beginUpdate;
  600.     lvSound.items.clear;
  601.     for i:=0 to WaveIn.count-1 do
  602.       with lvSound.items.add do begin
  603.         caption:=WaveIn[i];
  604.         SubItems.Add('Wave In');
  605.         ImageIndex:=iiWave;
  606.       end;
  607.     for i:=0 to WaveOut.count-1 do
  608.       with lvSound.items.add do begin
  609.         caption:=WaveOut[i];
  610.         SubItems.Add('Wave Out');
  611.         ImageIndex:=iiWave;
  612.       end;
  613.     for i:=0 to MIDIIn.count-1 do
  614.       with lvSound.items.add do begin
  615.         caption:=MIDIIn[i];
  616.         SubItems.Add('MIDI In');
  617.         ImageIndex:=iiMIDI;
  618.       end;
  619.     for i:=0 to MIDIOut.count-1 do
  620.       with lvSound.items.add do begin
  621.         caption:=MIDIOut[i];
  622.         SubItems.Add('MIDI Out');
  623.         ImageIndex:=iiMIDI;
  624.       end;
  625.     for i:=0 to AUX.count-1 do
  626.       with lvSound.items.add do begin
  627.         caption:=AUX[i];
  628.         SubItems.Add('AUX');
  629.         ImageIndex:=iiAUX;
  630.       end;
  631.     for i:=0 to Mixer.count-1 do
  632.       with lvSound.items.add do begin
  633.         caption:=Mixer[i];
  634.         SubItems.Add('Mixer');
  635.         ImageIndex:=iiMixer;
  636.       end;
  637.   end;
  638.   lvSound.Items.endUpdate;
  639. end;
  640.  
  641. procedure TfrmMSI_Overview.GetNetInfo;
  642. var
  643.   i :integer;
  644. begin
  645.   with SysInfo.Network do begin
  646.     lvNetwork.items.clear;
  647.     for i:=0 to Adapters.count-1 do
  648.       with lvNetwork.items.add do begin
  649.         caption:=Adapters[i];
  650.         if CardAdapterIndex=i then
  651.           imageindex:=iiAdapter
  652.         else
  653.           imageindex:=iiNet;
  654.       end;
  655.     lbIP.Items.Text:=IPAddresses.Text;
  656.     lbMAC.Items.Text:=MACAddresses.Text;
  657.     eWSDesc.Text:=Winsock.Description;
  658.     eWSVer.Text:=Format('%d.%d',[Winsock.MajorVersion,Winsock.MinorVersion]);
  659.     eWSStat.Text:=Winsock.Status;
  660.   end;
  661. end;
  662.  
  663. procedure TfrmMSI_Overview.GetDeviceInfo;
  664. var
  665.   i,c: integer;
  666.   r,n: TTreeNode;
  667.   cn,dn: string;
  668.   pi: PInteger;
  669.   ldc: TDeviceClass;
  670. begin
  671.   with SysInfo, Devices, Tree,Items do begin
  672.     c:=DeviceCount-1;
  673.     BeginUpdate;
  674.     while Count>0 do begin
  675.       if Assigned(Items[Count-1].Data) then
  676.         FreeMem(Items[Count-1].Data);
  677.       Delete(Items[Count-1]);
  678.     end;
  679.     r:=Add(nil,GetMachine);
  680.     r.ImageIndex:=0;
  681.     r.SelectedIndex:=r.ImageIndex;
  682.     n:=nil;
  683.     for i:=0 to c do begin
  684.       if Trim(Devices[i].ClassDesc)<>'' then
  685.         cn:=Devices[i].ClassDesc
  686.       else
  687.         cn:=Devices[i].ClassName;
  688.       if not Assigned(n) or (Devices[i].DeviceClass<>ldc) then begin
  689.         ldc:=Devices[i].DeviceClass;
  690.         n:=AddChild(r,cn);
  691.         n.ImageIndex:=cDeviceImageIndex[Devices[i].DeviceClass];
  692.         n.SelectedIndex:=n.ImageIndex;
  693.       end;
  694.       if Trim(Devices[i].FriendlyName)='' then
  695.         dn:=Devices[i].Description
  696.       else
  697.         dn:=Devices[i].FriendlyName;
  698.       with AddChild(n,dn) do begin
  699.         ImageIndex:=n.ImageIndex;
  700.         SelectedIndex:=ImageIndex;
  701.         new(pi);
  702.         pi^:=i;
  703.         Data:=pi;
  704.       end;
  705.       n.AlphaSort;
  706.     end;
  707.     r.AlphaSort;
  708.     r.Expand(False);
  709.     EndUpdate;
  710.   end;
  711. end;
  712.  
  713. procedure TfrmMSI_Overview.GetEngInfo;
  714. var
  715.   i: integer;
  716. begin
  717.   with SysInfo.Engines do begin
  718.     if ODBC<>'' then
  719.       lODBC.caption:='Open Database Connectivity '+ODBC
  720.     else
  721.       lODBC.caption:='Open Database Connectivity not found';
  722.     if BDE<>'' then
  723.       lBDE.caption:='Borland Database Engine '+BDE
  724.     else
  725.       lBDE.caption:='Borland Database Engine not found';
  726.     if DAO<>'' then
  727.       lDAO.caption:='Microsoft Data Access Objects '+DAO
  728.     else
  729.       lDAO.caption:='Microsoft Data Access Objects not found';
  730.     if ADO<>'' then
  731.       lADO.caption:='Microsoft ActiveX Data Objects '+ADO
  732.     else
  733.       lADO.caption:='Microsoft ActiveX Data Objects not found';
  734.   end;
  735.   with SysInfo.DirectX do begin
  736.     if Version<>'' then begin
  737.       lDirectX.caption:='Installed version: '+Version;
  738.       lvDirectX.Items.beginUpdate;
  739.       lvDirectX.items.clear;
  740.       for i:=0 to Direct3D.count-1 do
  741.         with lvDirectX.items.add do begin
  742.           caption:=Direct3D[i];
  743.           SubItems.Add('Direct3D');
  744.           ImageIndex:=iiDirectX;
  745.         end;
  746.       for i:=0 to DirectMusic.count-1 do
  747.         with lvDirectX.items.add do begin
  748.           caption:=DirectMusic[i];
  749.           SubItems.Add('DirectMusic');
  750.           ImageIndex:=iiDirectX;
  751.         end;
  752.       for i:=0 to DirectPlay.count-1 do
  753.         with lvDirectX.items.add do begin
  754.           caption:=DirectPlay[i];
  755.           SubItems.Add('DirectPlay');
  756.           ImageIndex:=iiDirectX;
  757.         end;
  758.       lvDirectX.Items.endUpdate;
  759.     end else
  760.       lDirectX.caption:='Not installed.';
  761.   end;
  762. end;
  763.  
  764. procedure TfrmMSI_Overview.GetDriveInfo;
  765. var
  766.   i,j :integer;
  767.   s :string;
  768. begin
  769.   j:=0;
  770.   with SysInfo.Disk do begin
  771.     cbDrive.items.clear;
  772.     for i:=1 to length(AvailableDisks) do begin
  773.       s:=uppercase(copy(AvailableDisks,i,1));
  774.       cbDrive.items.add(s+':');
  775.       if s=uppercase(copy(SysInfo.OS.Folders.Values['Windows'],1,1)) then
  776.         j:=i-1;
  777.     end;
  778.     cbDrive.itemindex:=j;
  779.     cbDriveChange(nil);
  780.   end;
  781. end;
  782.  
  783. procedure TfrmMSI_Overview.GetInfo;
  784. begin
  785.   screen.cursor:=crhourglass;
  786.   try
  787.     if pgWksta in DisplayedPages then
  788.       GetWkstaInfo;
  789.     if pgOS in DisplayedPages then
  790.       GetOSInfo;
  791.     if pgCPU in DisplayedPages then
  792.       GetCPUInfo;
  793.     if pgMem in DisplayedPages then
  794.       GetMemoryInfo;
  795.     if pgDisplay in DisplayedPages then
  796.       GetDisplayInfo;
  797.     if pgAPM in DisplayedPages then
  798.       GetAPMInfo;
  799.     if pgMedia in DisplayedPages then
  800.       GetMediaInfo;
  801.     if pgNet in DisplayedPages then
  802.       GetNetInfo;
  803.     if pgDev in DisplayedPages then
  804.       GetDeviceInfo;
  805.     if pgEng in DisplayedPages then
  806.       GetEngInfo;
  807.     if pgDisk in DisplayedPages then
  808.       GetDriveInfo;
  809.     if pgTZ in DisplayedPages then
  810.       GetTZInfo;
  811.     if pgProcs in DisplayedPages then
  812.       GetProcInfo;
  813.     if pgPrn in DisplayedPages then
  814.       GetPrintInfo;
  815.     if pgStartup in DisplayedPages then
  816.       GetStartupInfo;
  817.     if pgSoftware in DisplayedPages then
  818.       GetSWInfo;
  819.   finally
  820.     screen.cursor:=crdefault;
  821.   end;
  822. end;
  823.  
  824. procedure TfrmMSI_Overview.FormCreate(Sender: TObject);
  825. begin
  826.   Report:=TStringList.Create;
  827.   DisplayedPages:=pgAll;
  828.   pc.activepage:=tsWksta;
  829.   pcCPU.ActivePage:=tsID;
  830.   lTitle.Caption:=cCompName;
  831.   lVer.Caption:='Version '+cVersion;
  832.   FooterPanel.Caption:=cCopyright;
  833. end;
  834.  
  835. procedure TfrmMSI_Overview.cmRefresh(Sender: TObject);
  836. begin
  837.   screen.cursor:=crhourglass;
  838.   try
  839.     SysInfo.Refresh;
  840.     GetInfo;
  841.   finally
  842.     screen.cursor:=crdefault;
  843.   end;
  844. end;
  845.  
  846. procedure TfrmMSI_Overview.cmClose(Sender: TObject);
  847. begin
  848.   close;
  849. end;
  850.  
  851. procedure TfrmMSI_Overview.cmEnvironment(Sender: TObject);
  852. var
  853.   i: integer;
  854. begin
  855.   with TdlgMSI_Detail.Create(Self) do begin
  856.     Notebook.pageindex:=3;
  857.     TitlePanel.Caption:='Environment';
  858.     for i:=0 to SysInfo.OS.Environment.Count-1 do
  859.       with lv.Items.Add do begin
  860.         Caption:=SysInfo.OS.Environment.Names[i];
  861.         SubItems.Add(SysInfo.OS.Environment.Values[SysInfo.OS.Environment.Names[i]]);
  862.       end;
  863.     showmodal;
  864.     free;
  865.   end;
  866. end;
  867.  
  868. procedure TfrmMSI_Overview.cmCaps(Sender: TObject);
  869. var
  870.   i :integer;
  871.   sl :TStringList;
  872. begin
  873.   with TdlgMSI_Detail.Create(self) do begin
  874.     Notebook.pageindex:=1;
  875.     sl:=TStringList.Create;
  876.     case TComponent(sender).tag of
  877.       0: begin
  878.         TitlePanel.Caption:='Curve Capabilities';
  879.         SysInfo.Display.Report_CurveCaps(sl);
  880.       end;
  881.       1: begin
  882.         TitlePanel.Caption:='Line Capabilities';
  883.         SysInfo.Display.Report_LineCaps(sl);
  884.       end;
  885.       2: begin
  886.         TitlePanel.Caption:='Polygonal Capabilities';
  887.         SysInfo.Display.Report_PolygonCaps(sl);
  888.       end;
  889.       3: begin
  890.         TitlePanel.Caption:='Raster Capabilities';
  891.         SysInfo.Display.Report_RasterCaps(sl);
  892.       end;
  893.       4: begin
  894.         TitlePanel.Caption:='Text Capabilities';
  895.         SysInfo.Display.Report_TextCaps(sl);
  896.       end;
  897.     end;
  898.     clb.items.clear;
  899.     for i:=1 to sl.count-1 do begin
  900.       clb.items.Add(sl.Names[i]);
  901.       clb.Checked[clb.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  902.     end;
  903.     sl.free;
  904.     showmodal;
  905.     free;
  906.   end;
  907. end;
  908.  
  909. procedure TfrmMSI_Overview.cmPrintSetup(Sender: TObject);
  910. begin
  911.   psd.execute;
  912. end;
  913.  
  914.  
  915. procedure TfrmMSI_Overview.cbDriveChange(Sender: TObject);
  916. var
  917.   p,i :Word;
  918.   b :pchar;
  919.   sl :TStringList;
  920. begin
  921.   with SysInfo.Disk do begin
  922.     gdisk.progress:=0;
  923.     b:=stralloc(255);
  924.     p:=0;
  925.     Drive:=copy(cbDrive.text,1,2);
  926.     strpcopy(b,Drive+'\');
  927.     lDriveType.caption:=GetMediaTypeStr(MediaType)+' - '+FileSystem;
  928.     if MediaPresent then
  929.       imgDrive.picture.icon.handle:=extractassociatedicon(hinstance,b,p)
  930.     else
  931.       imgDrive.picture.icon.handle:=0;
  932.     strdispose(b);
  933.     eUNC.text:=expanduncfilename(Drive);
  934.     eDSN.text:=SerialNumber;
  935.     if pos('[',cbdrive.items[cbdrive.itemindex])=0 then begin
  936.       i:=cbdrive.itemindex;
  937.       cbdrive.items[i]:=cbdrive.items[i]+' ['+VolumeLabel+']';
  938.       cbdrive.itemindex:=i;
  939.     end;
  940.     {$IFDEF D4PLUS}
  941.     lCapacity.caption:=formatfloat('Capacity: #,#0 B',Capacity);
  942.     lFree.caption:=formatfloat('Free space: #,#0 B',FreeSpace);
  943.     try
  944.       gDisk.Progress:=round((Capacity-FreeSpace)/Capacity*100);
  945.     except
  946.     end;
  947.     {$ELSE}
  948.     lCapacity.caption:=formatfloat('Capacity: #,#0 B',Capacity.QuadPart);
  949.     lFree.caption:=formatfloat('Free space: #,#0 B',FreeSpace.QuadPart);
  950.     try
  951.       gDisk.Progress:=round((Capacity.QuadPart-FreeSpace.QuadPart)/Capacity.QuadPart*100);
  952.     except
  953.       gDisk.Progress:=0;
  954.     end;
  955.     {$ENDIF}
  956.     lBPS.caption:=formatfloat('Bytes/sector: 0',BytesPerSector);
  957.     lSPC.caption:=formatfloat('Sector/cluster: 0',SectorsPerCluster);
  958.     lFC.caption:=formatfloat('Free clusters: #,#0',FreeClusters);
  959.     lTC.caption:=formatfloat('Total clusters: #,#0',TotalClusters);
  960.     sl:=TStringList.Create;
  961.     Report_FileFlags(sl);
  962.     clbFlags.items.Clear;
  963.     for i:=1 to sl.count-1 do begin
  964.       clbFlags.items.Add(sl.Names[i]);
  965.       clbFlags.Checked[clbFlags.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  966.     end;
  967.     sl.Free;
  968.   end;
  969. end;
  970.  
  971. procedure TfrmMSI_Overview.cmReportClick(Sender: TObject);
  972. var
  973.   p :tpoint;
  974. begin
  975.   p.y:=twincontrol(sender).top+twincontrol(sender).height;
  976.   p.x:=twincontrol(sender).left;
  977.   p:=twincontrol(sender).parent.clienttoscreen(p);
  978.   ReportMenu.Popup(p.x,p.y);
  979. end;
  980.  
  981. procedure TfrmMSI_Overview.cmReportAll(Sender: TObject);
  982. begin
  983.   Report.Clear;
  984.   sd.filename:='SystemInfo.txt';
  985.   if sd.execute then begin
  986.     SysInfo.Report(Report);
  987.     Report.savetofile(sd.filename);
  988.   end;
  989. end;
  990.  
  991. procedure TfrmMSI_Overview.cmReportCurrent(Sender: TObject);
  992. begin
  993.   Report.Clear;
  994.   sd.filename:=Trim(pc.ActivePage.Caption)+'.txt';
  995.   if sd.execute then begin
  996.     case pc.activepage.pageindex of
  997.       0: SysInfo.Machine.Report(Report);
  998.       1: SysInfo.OS.Report(Report);
  999.       2: SysInfo.CPU.Report(Report);
  1000.       3: SysInfo.Memory.Report(Report);
  1001.       4: SysInfo.Display.Report(Report);
  1002.       5: SysInfo.APM.Report(Report);
  1003.       6: SysInfo.Media.Report(Report);
  1004.       7: SysInfo.Network.Report(Report);
  1005.       8: SysInfo.Devices.Report(Report);
  1006.       9: SysInfo.Printers.Report(Report);
  1007.       10: SysInfo.Engines.Report(Report);
  1008.       11: SysInfo.Disk.Report(Report);
  1009.       12: SysInfo.OS.TimeZone.Report(Report);
  1010.       13: SysInfo.Processes.Report(Report);
  1011.       14: SysInfo.Startup.Report(Report);
  1012.       15: SysInfo.Software.Report(Report);
  1013.     end;
  1014.     Report.savetofile(sd.filename);
  1015.   end;
  1016. end;
  1017.  
  1018. procedure TfrmMSI_Overview.clbClickCheck(Sender: TObject);
  1019. var
  1020.   OCC: TNotifyEvent;
  1021.   idx: integer;
  1022.   p: TPoint;
  1023. begin
  1024.   with TCheckListBox(Sender) do begin
  1025.     OCC:=OnClickCheck;
  1026.     OnClickCheck:=nil;
  1027.     GetCursorPos(p);
  1028.     p:=ScreenToClient(p);
  1029.     idx:=ItemAtPos(p,True);
  1030.     if idx>-1 then
  1031.       Checked[idx]:=not Checked[idx];
  1032.     OnClickCheck:=OCC;
  1033.   end;
  1034. end;
  1035.  
  1036. procedure TfrmMSI_Overview.SetPages(const Value: TPages);
  1037. var
  1038.   i: integer;
  1039. begin
  1040.   FPages:=Value;
  1041.   for i:=pc.PageCount-1 downto 0 do begin
  1042.     pc.Pages[i].TabVisible:=TPage(i) in DisplayedPages;
  1043.     if pc.Pages[i].TabVisible then
  1044.       pc.ActivePage:=pc.Pages[i];
  1045.   end;
  1046. end;
  1047.  
  1048. procedure TfrmMSI_Overview.SetShowRepBut(const Value: Boolean);
  1049. begin
  1050.   FShowRepBut:=Value;
  1051.   bReport.Visible:=FShowRepBut;
  1052. end;
  1053.  
  1054. procedure TfrmMSI_Overview.cmModes(Sender: TObject);
  1055. var
  1056.   i: integer;
  1057. begin
  1058.   with TdlgMSI_Detail.Create(self) do begin
  1059.     Notebook.pageindex:=1;
  1060.     clb.items.clear;
  1061.     clb.Items.AddStrings(SysInfo.Display.Modes);
  1062.     for i:=0 to clb.Items.Count-1 do
  1063.       clb.Checked[i]:=True;
  1064.     TitlePanel.Caption:='Supported Video Modes';
  1065.     showmodal;
  1066.     free;
  1067.   end;
  1068. end;
  1069.  
  1070. procedure TfrmMSI_Overview.GetTZInfo;
  1071. begin
  1072.   with SysInfo.OS.TimeZone do begin
  1073.     eTZ.Text:=DisplayName;
  1074.     gbStd.Caption:=' '+StandardName+' ';
  1075.     gbDay.Caption:=' '+DaylightName+' ';
  1076.     eStdStart.Text:=DateTimeToStr(StandardStart);
  1077.     eStdBias.Text:=IntToStr(StandardBias);
  1078.     eDayStart.Text:=DateTimeToStr(DaylightStart);
  1079.     eDayBias.Text:=IntToStr(DaylightBias);
  1080.   end;
  1081. end;
  1082.  
  1083. procedure TfrmMSI_Overview.cmProto(Sender: TObject);
  1084. var
  1085.   i: integer;
  1086. begin
  1087.   with TdlgMSI_Detail.Create(self) do begin
  1088.     Notebook.pageindex:=1;
  1089.     clb.items.clear;
  1090.     clb.Items.AddStrings(SysInfo.Network.Protocols);
  1091.     for i:=0 to clb.Items.Count-1 do
  1092.       clb.Checked[i]:=True;
  1093.     TitlePanel.Caption:='Protocols';
  1094.     showmodal;
  1095.     free;
  1096.   end;
  1097. end;
  1098.  
  1099. procedure TfrmMSI_Overview.cmServ(Sender: TObject);
  1100. var
  1101.   i: integer;
  1102. begin
  1103.   with TdlgMSI_Detail.Create(self) do begin
  1104.     Notebook.pageindex:=1;
  1105.     clb.items.clear;
  1106.     clb.Items.AddStrings(SysInfo.Network.Services);
  1107.     for i:=0 to clb.Items.Count-1 do
  1108.       clb.Checked[i]:=True;
  1109.     TitlePanel.Caption:='Services';
  1110.     showmodal;
  1111.     free;
  1112.   end;
  1113. end;
  1114.  
  1115. procedure TfrmMSI_Overview.cmCli(Sender: TObject);
  1116. var
  1117.   i: integer;
  1118. begin
  1119.   with TdlgMSI_Detail.Create(self) do begin
  1120.     Notebook.pageindex:=1;
  1121.     clb.items.clear;
  1122.     clb.Items.AddStrings(SysInfo.Network.Clients);
  1123.     for i:=0 to clb.Items.Count-1 do
  1124.       clb.Checked[i]:=True;
  1125.     TitlePanel.Caption:='Clients';
  1126.     showmodal;
  1127.     free;
  1128.   end;
  1129. end;
  1130.  
  1131. procedure TfrmMSI_Overview.SetCaptionText(const Value: string);
  1132. begin
  1133.   Caption:=Value;
  1134. end;
  1135.  
  1136. procedure TfrmMSI_Overview.FormClose(Sender: TObject; var Action: TCloseAction);
  1137. begin
  1138.   Action:=caFree;
  1139. end;
  1140.  
  1141. procedure TfrmMSI_Overview.TreeChange(Sender: TObject; Node: TTreeNode);
  1142. begin
  1143.   bProps.Enabled:=Assigned(Node) and (Node.Level=2);
  1144. end;
  1145.  
  1146. procedure TfrmMSI_Overview.cmProps(Sender: TObject);
  1147. var
  1148.   dr: TDevice;
  1149.   i: integer;
  1150. begin
  1151.   if Assigned(Tree.Selected) and (Tree.Selected.Level=2) then
  1152.     with TdlgMSI_Detail.Create(self) do begin
  1153.       Notebook.pageindex:=3;
  1154.       lv.items.clear;
  1155.       i:=PInteger(Tree.Selected.Data)^;
  1156.       dr:=SysInfo.Devices.Devices[i];
  1157.       with lv.Items.Add do begin
  1158.         Caption:='Device Name';
  1159.         Subitems.Add(Tree.Selected.Text);
  1160.       end;
  1161.       with lv.Items.Add do begin
  1162.         Caption:='Class Name';
  1163.         Subitems.Add(dr.ClassName);
  1164.       end;
  1165.       with lv.Items.Add do begin
  1166.         Caption:='Class Description';
  1167.         Subitems.Add(Tree.Selected.Parent.Text);
  1168.       end;
  1169.       with lv.Items.Add do begin
  1170.         Caption:='Class GUID';
  1171.         Subitems.Add(dr.GUID);
  1172.       end;
  1173.       with lv.Items.Add do begin
  1174.         Caption:='Manufacturer';
  1175.         Subitems.Add(dr.Manufacturer);
  1176.       end;
  1177.       with lv.Items.Add do begin
  1178.         Caption:='Location';
  1179.         SubItems.Add(dr.Location);
  1180.       end;
  1181.       with lv.Items.Add do begin
  1182.         Caption:='HardwareID';
  1183.         Subitems.Add(dr.HardwareID);
  1184.       end;
  1185.       with lv.Items.Add do begin
  1186.         Caption:='Driver Version';
  1187.         SubItems.Add(dr.DriverVersion);
  1188.       end;
  1189.       with lv.Items.Add do begin
  1190.         Caption:='Driver Date';
  1191.         SubItems.Add(dr.DriverDate);
  1192.       end;
  1193.       with lv.Items.Add do begin
  1194.         Caption:='Driver Provider';
  1195.         SubItems.Add(dr.DriverProvider);
  1196.       end;
  1197.       with lv.Items.Add do begin
  1198.         Caption:='Service Name';
  1199.         if dr.ServiceName='' then
  1200.           SubItems.Add(dr.Service)
  1201.         else
  1202.           SubItems.Add(dr.ServiceName);
  1203.       end;
  1204.       with lv.Items.Add do begin
  1205.         Caption:='Service Group';
  1206.         SubItems.Add(dr.ServiceGroup);
  1207.       end;
  1208.       TitlePanel.Caption:='Device Properties';
  1209.       showmodal;
  1210.       free;
  1211.     end;
  1212. end;
  1213.  
  1214. procedure TfrmMSI_Overview.cmMail(Sender: TObject);
  1215. begin
  1216.   ShellExecute(handle,'open',
  1217.                'mailto:michal.mutl@atlas.cz?subject='+cCompName,
  1218.                nil,nil,SW_NORMAL);
  1219. end;
  1220.  
  1221. procedure TfrmMSI_Overview.GetProcInfo;
  1222. var
  1223.   i,n :integer;
  1224.   pid: DWORD;
  1225. begin
  1226.   with SysInfo.Processes do begin
  1227.     lvProcs.Items.Clear;
  1228.     n:=ProcessCount-1;
  1229.     for i:=0 to n do
  1230.       with lvProcs.Items.Add do begin
  1231.         pid:=GetPIDFromProcessName(ProcessNames[i]);
  1232.         if IsNT then
  1233.           Caption:=Format('%d',[pid])
  1234.         else
  1235.           Caption:=Format('0x%x',[pid]);
  1236.         SubItems.Add(ExtractFilename(ProcessNames[i]));
  1237.         SubItems.Add(ExtractFilepath(ProcessNames[i]));
  1238.         ImageIndex:=iiProcess;
  1239.       end;
  1240.     ProcPanel.Caption:=Format('  %d processes',[ProcessCount]);
  1241.   end;
  1242. end;
  1243.  
  1244. procedure TfrmMSI_Overview.cmTerminate(Sender: TObject);
  1245. const
  1246.   SWARN = 'WARNING: Terminating a process can cause undesired '#13#10+
  1247.                     'results including loss of data and system instability. The '#13#10+
  1248.                     'process will not be given the chance to save its state or '#13#10+
  1249.                     'data before it is terminated. Are you sure you want to '#13#10+
  1250.                     'terminate the process?';
  1251.   SCannotTerm = 'Cannot terminate this process.';
  1252. var
  1253.   pid: DWORD;
  1254.   ph: THandle;
  1255. begin
  1256.   if Assigned(lvProcs.Selected) then begin
  1257.     if IsNT then
  1258.       pid:=StrToInt(lvProcs.Selected.Caption)
  1259.     else
  1260.       pid:=StrToInt('$'+Copy(lvProcs.Selected.Caption,3,255));
  1261.     if (MessageDlg(lvProcs.Selected.SubItems[0]+#13#10#13#10+SWARN,mtWarning,[mbYes,mbNo],0)=mryes) then begin
  1262.       ph:=OpenProcess(PROCESS_TERMINATE,False,pid);
  1263.       if ph<>0 then begin
  1264.         TerminateProcess(ph,0);
  1265.         CloseHandle(ph);
  1266.         lvProcs.Selected.Delete;
  1267.       end else
  1268.         MessageDlg(SCannotTerm,mtWarning,[mbOK],0);
  1269.     end;
  1270.   end;
  1271. end;
  1272.  
  1273. procedure TfrmMSI_Overview.cmProcProps(Sender: TObject);
  1274. begin
  1275.   if Assigned(lvProcs.Selected) and FileExists(lvProcs.Selected.SubItems[1]+lvProcs.Selected.SubItems[0]) then
  1276.     DisplayPropDialog(Handle,lvProcs.Selected.SubItems[1]+lvProcs.Selected.SubItems[0]);
  1277. end;
  1278.  
  1279. procedure TfrmMSI_Overview.GetPrintInfo;
  1280. var
  1281.   i: integer;
  1282. begin
  1283.   with SysInfo.Printers do begin
  1284.     lvPrinter.items.clear;
  1285.     for i:=0 to Names.count-1 do
  1286.       with lvPrinter.items.add do begin
  1287.         caption:=Names[i];
  1288.         SubItems.Add(Ports[i]);
  1289.         if Pos('\\',Ports[i])>0 then
  1290.           ImageIndex:=iiNetPrinter
  1291.         else
  1292.           ImageIndex:=iiPrinter;
  1293.         if i=DefaultIndex then
  1294.           ImageIndex:=ImageIndex+1;
  1295.       end;
  1296.   end;
  1297. end;
  1298.  
  1299. procedure TfrmMSI_Overview.tcStartupChange(Sender: TObject);
  1300. var
  1301.   i,n: integer;
  1302. begin
  1303.   with SysInfo.Startup, lvStartup, Items do begin
  1304.     BeginUpdate;
  1305.     Clear;
  1306.     case tcStartup.TabIndex of
  1307.       0: begin
  1308.         n:=User_Count-1;
  1309.         for i:=0 to n do
  1310.           with Add do begin
  1311.             Caption:=User_Runs[i];
  1312.             SubItems.Add(GetRunCommand(rtUser,i));
  1313.             ImageIndex:=iiProcess;
  1314.           end;
  1315.       end;
  1316.       1: begin
  1317.         n:=Common_Count-1;
  1318.         for i:=0 to n do
  1319.           with Add do begin
  1320.             Caption:=Common_Runs[i];
  1321.             SubItems.Add(GetRunCommand(rtCommon,i));
  1322.             ImageIndex:=iiProcess;
  1323.           end;
  1324.       end;
  1325.       2: begin
  1326.         n:=HKLM_Count-1;
  1327.         for i:=0 to n do
  1328.           with Add do begin
  1329.             Caption:=HKLM_Runs[i];
  1330.             SubItems.Add(GetRunCommand(rtHKLM,i));
  1331.             ImageIndex:=iiProcess;
  1332.           end;
  1333.       end;
  1334.       3: begin
  1335.         n:=HKCU_Count-1;
  1336.         for i:=0 to n do
  1337.           with Add do begin
  1338.             Caption:=HKCU_Runs[i];
  1339.             SubItems.Add(GetRunCommand(rtHKCU,i));
  1340.             ImageIndex:=iiProcess;
  1341.           end;
  1342.       end;
  1343.       4: begin
  1344.         n:=Once_Count-1;
  1345.         for i:=0 to n do
  1346.           with Add do begin
  1347.             Caption:=Once_Runs[i];
  1348.             SubItems.Add(GetRunCommand(rtOnce,i));
  1349.             ImageIndex:=iiProcess;
  1350.           end;
  1351.       end;
  1352.       5: begin
  1353.         n:=WININI_Count-1;
  1354.         for i:=0 to n do
  1355.           with Add do begin
  1356.             Caption:=WININI_Runs[i];
  1357.             SubItems.Add(GetRunCommand(rtWININI,i));
  1358.             ImageIndex:=iiProcess;
  1359.           end;
  1360.       end;
  1361.     end;
  1362.     EndUpdate;
  1363.   end;
  1364. end;
  1365.  
  1366. procedure TfrmMSI_Overview.GetStartupInfo;
  1367. begin
  1368.   tcStartupChange(tcStartup);
  1369. end;
  1370.  
  1371. procedure TfrmMSI_Overview.GetSWInfo;
  1372. var
  1373.   i: integer;
  1374. begin
  1375.   with SysInfo.Software, lvSW, Items do begin
  1376.     BeginUpdate;
  1377.     Clear;
  1378.     for i:=0 to Installed.Count-1 do
  1379.       with Add do begin
  1380.         Caption:=Installed[i];
  1381.         ImageIndex:=iiPackage;
  1382.       end;
  1383.     EndUpdate;
  1384.   end;
  1385. end;
  1386.  
  1387. procedure TfrmMSI_Overview.cmNTSpec(Sender: TObject);
  1388. var
  1389.   sl: TStringList;
  1390.   i: integer;
  1391. begin
  1392.   with TdlgMSI_Detail.Create(self) do begin
  1393.     Notebook.pageindex:=1;
  1394.     TitlePanel.Caption:='Installed Suites';
  1395.     clb.items.clear;
  1396.     sl:=TStringList.Create;
  1397.     SysInfo.OS.NTSpecific.Report_InstalledSuites(sl);
  1398.     for i:=0 to sl.count-1 do begin
  1399.       clb.items.Add(sl.Names[i]);
  1400.       clb.Checked[clb.items.count-1]:=Boolean(StrToInt(sl.Values[sl.Names[i]]));
  1401.     end;
  1402.     sl.Free;
  1403.     showmodal;
  1404.     free;
  1405.   end;
  1406. end;
  1407.  
  1408. end.
  1409.