home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 March / Chip_1999-03_cd.bin / zkuste / delphi / D34 / MSYSINFO.ZIP / Demo / Main.pas < prev    next >
Pascal/Delphi Source File  |  1999-01-26  |  27KB  |  1,021 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, ExtCtrls, Menus, Buttons, MSysInfo, ImgList, ToolWin, StdCtrls;
  8.  
  9. type               
  10.   TInfoMode = (imNode, imText);
  11.  
  12.   TfrmMain = class(TForm)
  13.     SB: TStatusBar;
  14.     SI: TMSysInfo;
  15.     PopupMenu: TPopupMenu;
  16.     pmRefresh: TMenuItem;
  17.     pmAbout: TMenuItem;
  18.     N1: TMenuItem;
  19.     pmExit: TMenuItem;
  20.     Timer: TTimer;
  21.     Panel1: TPanel;
  22.     Splitter1: TSplitter;
  23.     EmptyPanel: TPanel;
  24.     lvSI: TListView;
  25.     tvSI: TTreeView;
  26.     ImageList: TImageList;
  27.     CoolBar1: TCoolBar;
  28.     ToolBar: TToolBar;
  29.     ToolButton1: TToolButton;
  30.     ToolButton2: TToolButton;
  31.     ToolButton4: TToolButton;
  32.     ToolButton3: TToolButton;
  33.     Panel2: TPanel;
  34.     cbTopic: TComboBox;
  35.     lcv: TLabel;
  36.     procedure cmRefresh(Sender: TObject);
  37.     procedure cmAbout(Sender: TObject);
  38.     procedure cmExit(Sender: TObject);
  39.     procedure cmGetItemData(Sender: TObject; Node: TTreeNode);
  40.     procedure FormCreate(Sender: TObject);
  41.     procedure TimerTimer(Sender: TObject);
  42.     procedure cmExpCol(Sender: TObject; var Key: Word;
  43.       Shift: TShiftState);
  44.     procedure cbTopicChange(Sender: TObject);
  45.     procedure cmWinList(Sender: TObject);
  46.   private
  47.     { Private declarations }
  48.     function GetComputerData(Parent :TTreenode; Mode :TInfoMode; var Node :TTreeNode) :Boolean;
  49.     function GetCPUData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  50.     function GetBIOSData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  51.     function GetMemoryData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  52.     function GetDisksData(Parent :TTreenode; Mode :TInfoMode; var Node :TTreeNode) :Boolean;
  53.     function GetDiskData(Sign :char; Parent :TTreenode; Mode :TInfoMode) :Boolean;
  54.     function GetDisplayData(Parent :TTreenode; Mode :TInfoMode; var Node :TTreeNode) :Boolean;
  55.     function GetFontsData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  56.     function GetSoundData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  57.     function GetMonitorData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  58.     function GetMouseData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  59.     function GetPrinterData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  60.     function GetOSData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  61.     function GetDBData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  62.     function GetDXData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  63.     function GetNetData(Parent :TTreenode; Mode :TInfoMode) :Boolean;
  64.   public
  65.     { Public declarations }
  66.     procedure FillSystemInfo;
  67.   end;
  68.  
  69. var
  70.   frmMain: TfrmMain;
  71.  
  72. const
  73.   txParameter = 'Property';
  74.   txValue = 'Value';
  75.  
  76.   txSpace = '';
  77.   txDescription = 'Description';
  78.  
  79.   txComputer = 'Computer';
  80.     txName = 'Name';
  81.     txOwner = 'Owner';
  82.     txOrg = 'Organization';
  83.     txUser = 'User';
  84.     txIP = 'IP Address';
  85.     txBootTime = 'Boot time';
  86.     txLastBoot = 'Last boot';
  87.  
  88.     txCPU = 'CPU';
  89.       txNumberOfProcessors = 'Number of Processors';
  90.       txActiveProcessorMask = 'Active Processor Mask';
  91.       txProcessorArchitecture = 'Architecture';
  92.       txProcessorType = 'Type';
  93.       txProcessorVendor = 'Vendor';
  94.       txProcessorVendorID = 'Vendor Identifier';
  95.       txProcessorLevel = 'Level';
  96.       txProcessorRevision = 'Revision';
  97.       txProcessorSpeed = 'Speed';
  98.  
  99.     txBIOS = 'BIOS';
  100.       txBIOSName = 'BIOS Name';
  101.       txBIOSCopyright = 'BIOS Copyright';
  102.       txBIOSDate = 'BIOS Date';
  103.       txBIOSExt = 'BIOS Extended Info';
  104.       txBIOSVideoVer = 'BIOS Video Version';
  105.       txBIOSVideoDate = 'BIOS Video Date';
  106.  
  107.     txMemory = 'Memory';
  108.       txMemUsage = 'Usage';
  109.       txTotalPhys = 'Total Physical';
  110.       txAvailPhys = 'Available Physical';
  111.       txTotalPage = 'Total Page File';
  112.       txAvailPage = 'Available Page File';
  113.       txTotalVirt = 'Total Virtual';
  114.       txAvailVirt = 'Available Virtual';
  115.       txPageSize  = 'Page Size';
  116.       txAllocGran = 'Allocation Granularity';
  117.  
  118.     txDisk = 'Disks';
  119.       txNumber = 'Number';
  120.       txAvailSigns = 'Available Signs';
  121.  
  122.       txFileSystem = 'File System';
  123.       txSerial = 'Serial Number';
  124.       txCompress = 'Compressed';
  125.       txFreeSpace = 'Free Space';
  126.       txTotalSpace = 'Total Space';
  127.       txTotalClusters = 'Total Clusters';
  128.       txSPC = 'Sectors Per Cluster';
  129.       txBPS = 'Bytes Per Sector';
  130.  
  131.     txDisplay = 'Display';
  132.       txChip = 'Chip';
  133.       txDAC = 'DAC';
  134.       txVideoMem = 'Memory';
  135.       txXRes = 'Screen Width';
  136.       txYRes = 'Screen Height';
  137.       txRes = 'Color Resolution';
  138.       txFontCount = 'Font Count';
  139.       txFonts = 'Installed Fonts';
  140.         txFontname = 'Font Name';
  141.  
  142.     txSound = 'Sound Device';
  143.       txWaveIn = 'Wave In';
  144.       txWaveOut = 'Wave Out';
  145.       txMIDIIn = 'MIDI In';
  146.       txMIDIOut = 'MIDI Out';
  147.       txAUX = 'AUX';
  148.       txMixer = 'Mixer';
  149.  
  150.     txPrinter = 'Printer';
  151.     txMouse = 'Mouse';
  152.     txMonitor = 'Monitor';
  153.  
  154.   txDirectX = 'DirectX';
  155.     txDXVer = 'Version';
  156.  
  157.   txNetwork = 'Network';
  158.     txAdapter = 'Adapter';
  159.  
  160.   txOS = 'Operating System';
  161.     txPlatform = 'Platform';
  162.     txVersion = 'Version';
  163.     txCSD = 'CSD Version';
  164.     txMaxApp = 'Maximum Application Address';
  165.     txMinApp = 'Minimum Application Address';
  166.     txProductID = 'Product ID';
  167.     txTimeZone = 'Time Zone';
  168.  
  169.   txDB = 'Database';
  170.     txBDE = 'BDE Version';
  171.     txODBC = 'ODBC Version';
  172.  
  173. implementation
  174.  
  175. {$R *.DFM}
  176.  
  177. uses
  178.   ShellAPI;
  179.  
  180. var
  181.   tvWidth :integer;
  182.  
  183. function BoolToStr(x :boolean) :string;
  184. begin
  185.   if x then
  186.     result:='Yes'
  187.   else
  188.     result:='No';
  189. end;
  190.  
  191. {###################### Private routines #######################}
  192.  
  193. function TfrmMain.GetComputerData;
  194. var
  195.   item :tlistitem;
  196. begin
  197.   if mode=imnode then
  198.     with tvsi.items do
  199.       node:=add(parent,txComputer);
  200.   if mode=imtext then
  201.     with lvsi do begin
  202.       items.BeginUpdate;
  203.       try
  204.         columns[0].caption:=txparameter;
  205.         columns[1].caption:=txvalue;
  206.         item:=items.add;
  207.         item.caption:=txName;
  208.         item.subitems.add(si.cmpname);
  209.  
  210.         item:=items.add;
  211.         item.caption:=txOwner;
  212.         item.subitems.add(si.osreguser);
  213.  
  214.         item:=items.add;
  215.         item.caption:=txOrg;
  216.         item.subitems.add(si.osregorg);
  217.  
  218.         item:=items.add;
  219.         item.caption:=txIP;
  220.         item.subitems.add(si.cmpIPAddress);
  221.  
  222.         item:=items.add;
  223.         item.caption:=txSpace;
  224.  
  225.         item:=items.add;
  226.         item.caption:=txBoottime;
  227.         item.subitems.add(si.cmpboottime);
  228.  
  229.         item:=items.add;
  230.         item.caption:=txlastboot;
  231.         item.subitems.add(si.cmplastboot);
  232.  
  233.       finally
  234.         items.endupdate;
  235.       end;
  236.     end;
  237.   result:=true;
  238. end;
  239.  
  240. function TfrmMain.GetCPUData;
  241. var
  242.   item :tlistitem;
  243. begin
  244.   if mode=imnode then
  245.     with tvsi.items do
  246.       addchild(parent,txCPU);
  247.   if mode=imtext then
  248.     with lvsi do begin
  249.       items.BeginUpdate;
  250.       try
  251.         columns[0].caption:=txparameter;
  252.         columns[1].caption:=txvalue;
  253.         item:=items.add;
  254.         item.caption:=txNumberOfProcessors;
  255.         item.subitems.add(inttostr(si.cpuNumber));
  256.  
  257.         item:=items.add;
  258.         item.caption:=txActiveProcessorMask;
  259.         item.subitems.add(inttostr(si.cpuactivemask));
  260.  
  261.         item:=items.add;
  262.         item.caption:=txProcessorArchitecture;
  263.         item.subitems.add(si.getcpuarc(si.cpuarchitecture));
  264.  
  265.         item:=items.add;
  266.         item.caption:=txProcessorType;
  267.         item.subitems.add(si.getcputype(si.cputype));
  268.  
  269.         item:=items.add;
  270.         item.caption:=txProcessorLevel;
  271.         item.subitems.add(inttostr(si.cpulevel));
  272.  
  273.         item:=items.add;
  274.         item.caption:=txProcessorRevision;
  275.         item.subitems.add(inttostr(si.cpurevision));
  276.  
  277.         item:=items.add;
  278.         item.caption:=txProcessorSpeed;
  279.         item.subitems.add(inttostr(round(int(si.cpuspeed)))+' MHz');
  280.  
  281.         item:=items.add;
  282.         item.caption:=txSpace;
  283.         item.imageindex:=-1;
  284.         item:=items.add;
  285.         item.caption:=txProcessorVendor;
  286.         item.subitems.add(si.cpuvendor);
  287.  
  288.         item:=items.add;
  289.         item.caption:=txProcessorVendorID;
  290.         item.subitems.add(si.cpuvendorid);
  291.  
  292.       finally
  293.         items.endupdate;
  294.       end;
  295.     end;
  296.   result:=true;
  297. end;
  298.  
  299. function TfrmMain.GetBIOSData;
  300. var
  301.   item :tlistitem;
  302. begin
  303.   if mode=imnode then
  304.     with tvsi.items do
  305.       addchild(parent,txBIOS);
  306.   if mode=imtext then
  307.     with lvsi do begin
  308.       items.BeginUpdate;
  309.       try
  310.         columns[0].caption:=txparameter;
  311.         columns[1].caption:=txvalue;
  312.         item:=items.add;
  313.         item.caption:=txBIOSName;
  314.         item.subitems.add(si.biosname);
  315.  
  316.         item:=items.add;
  317.         item.caption:=txbioscopyright;
  318.         item.subitems.add(si.bioscopyright);
  319.  
  320.         item:=items.add;
  321.         item.caption:=txbiosdate;
  322.         item.subitems.add(si.biosdate);
  323.  
  324.         item:=items.add;
  325.         item.caption:=txbiosext;
  326.         item.subitems.add(si.biosextendedinfo);
  327.  
  328.         item:=items.add;
  329.         item.caption:=txbiosvideover;
  330.         item.subitems.add(si.biosvideoversion);
  331.  
  332.         item:=items.add;
  333.         item.caption:=txbiosvideodate;
  334.         item.subitems.add(si.biosvideodate);
  335.       finally
  336.         items.endupdate;
  337.       end;
  338.     end;
  339.   result:=true;
  340. end;
  341.  
  342. function TfrmMain.GetDXData;
  343. var
  344.   item :tlistitem;
  345. begin
  346.   if mode=imnode then
  347.     with tvsi.items do
  348.       addchild(parent,txDirectX);
  349.   if mode=imtext then
  350.     with lvsi do begin
  351.       items.BeginUpdate;
  352.       try
  353.         columns[0].caption:=txparameter;
  354.         columns[1].caption:=txvalue;
  355.         item:=items.add;
  356.         item.caption:=txDXVer;
  357.         item.subitems.add(si.drxVersion);
  358.  
  359.       finally
  360.         items.endupdate;
  361.       end;
  362.     end;
  363.   result:=true;
  364. end;
  365.  
  366. function TfrmMain.GetNetData;
  367. var
  368.   item :tlistitem;
  369. begin
  370.   if mode=imnode then
  371.     with tvsi.items do
  372.       addchild(parent,txNetwork);
  373.   if mode=imtext then
  374.     with lvsi do begin
  375.       items.BeginUpdate;
  376.       try
  377.         columns[0].caption:=txparameter;
  378.         columns[1].caption:=txvalue;
  379.         item:=items.add;
  380.         item.caption:=txAdapter;
  381.         item.subitems.add(si.netAdapter);
  382.  
  383.       finally
  384.         items.endupdate;
  385.       end;
  386.     end;
  387.   result:=true;
  388. end;
  389.  
  390. function TfrmMain.GetMemoryData;
  391. var
  392.   item :tlistitem;
  393. begin
  394.   if mode=imnode then
  395.     with tvsi.items do
  396.       addchild(parent,txMemory);
  397.   if mode=imtext then
  398.     with lvsi do begin
  399.       items.BeginUpdate;
  400.       try
  401.         columns[0].caption:=txparameter;
  402.         columns[1].caption:=txvalue;
  403.         item:=items.add;
  404.         item.caption:=(txmemusage);
  405.         item.subitems.add(formatfloat('#,##0 %',si.memMemUsage));
  406.  
  407.         item:=items.add;
  408.         item.caption:=(txspace);
  409.         item.imageindex:=-1;
  410.         item:=items.add;
  411.         item.caption:=(txtotalphys);
  412.         item.subitems.add(formatfloat('#,##0 B',si.memtotalphys));
  413.  
  414.         item:=items.add;
  415.         item.caption:=(txavailphys);
  416.         item.subitems.add(formatfloat('#,##0 B',si.memfreephys));
  417.  
  418.         item:=items.add;
  419.         item.caption:=(txspace);
  420.         item.imageindex:=-1;
  421.         item:=items.add;
  422.         item.caption:=(txtotalpage);
  423.         item.subitems.add(formatfloat('#,##0 B',si.memtotalpagefile));
  424.         
  425.         item:=items.add;
  426.         item.caption:=(txavailpage);
  427.         item.subitems.add(formatfloat('#,##0 B',si.memfreepagefile));
  428.         
  429.         item:=items.add;
  430.         item.caption:=(txspace);
  431.         item.imageindex:=-1;
  432.         item:=items.add;
  433.         item.caption:=(txtotalvirt);
  434.         item.subitems.add(formatfloat('#,##0 B',si.memtotalvirtual));
  435.  
  436.         item:=items.add;
  437.         item.caption:=(txavailvirt);
  438.         item.subitems.add(formatfloat('#,##0 B',si.memfreevirtual));
  439.         
  440.         item:=items.add;
  441.         item.caption:=(txspace);
  442.         item.imageindex:=-1;
  443.         item:=items.add;
  444.         item.caption:=(txpagesize);
  445.         item.subitems.add(formatfloat('#,##0 B',si.mempagesize));
  446.         
  447.         item:=items.add;
  448.         item.caption:=(txallocgran);
  449.         item.subitems.add(formatfloat('#,##0 B',si.memallocationgranularity));
  450.         
  451.       finally
  452.         items.EndUpdate;
  453.       end;
  454.     end;
  455.   result:=true;
  456. end;
  457.  
  458. function TfrmMain.GetDisksData;
  459. var
  460.   item :tlistitem;
  461. begin
  462.   if mode=imnode then
  463.     with tvsi.items do
  464.       node:=addchild(parent,txDisk);
  465.   if mode=imtext then
  466.     with lvsi do begin
  467.       items.BeginUpdate;
  468.       try
  469.         columns[0].caption:=txparameter;
  470.         columns[1].caption:=txvalue;
  471.         item:=items.add;
  472.         item.caption:=(txnumber);
  473.         item.subitems.add(formatfloat('#,##0 ',si.dskdiskcount));
  474.  
  475.         item:=items.add;
  476.         item.caption:=(txavailsigns);
  477.         item.subitems.add(si.dskavailabledisks);
  478.         
  479.       finally
  480.         items.endupdate;
  481.       end;
  482.     end;
  483.   result:=true;
  484. end;
  485.  
  486. function TfrmMain.GetDiskData;
  487. var
  488.   item :tlistitem;
  489. begin
  490.   si.dsksign:=sign;
  491.   result:=si.dsktotalspace<>-1;
  492.   if mode=imnode then
  493.     with tvsi.items do
  494.       addchild(parent,si.dsksign+': ['+si.dskvolumelabel+']...'+si.getmediatype(si.dskmediatype));
  495.   if mode=imtext then
  496.     with lvsi do begin
  497.       items.BeginUpdate;
  498.       try
  499.         columns[0].caption:=txparameter;
  500.         columns[1].caption:=txvalue;
  501.         item:=items.add;
  502.         item.caption:=(txFileSystem);
  503.         item.subitems.add(si.dskfilesystem);
  504.         
  505.         item:=items.add;
  506.         item.caption:=(txserial);
  507.         item.subitems.add('0x'+inttohex(si.dskserialnumber,16));
  508.         
  509.         item:=items.add;
  510.         item.caption:=(txspace);
  511.         item.imageindex:=-1;
  512.         item:=items.add;
  513.         item.caption:=(txcompress);
  514.         item.subitems.add(booltostr(si.dskcompressed));
  515.         
  516.         item:=items.add;
  517.         item.caption:=(txTotalspace);
  518.         item.subitems.add(formatfloat('#,##0 B',si.dsktotalspace));
  519.         
  520.         item:=items.add;
  521.         item.caption:=(txfreespace);
  522.         item.subitems.add(formatfloat('#,##0 B',si.dskfreespace));
  523.         
  524.         item:=items.add;
  525.         item.caption:=(txTotalclusters);
  526.         item.subitems.add(formatfloat('#,##0 ',si.dsktotalclusters));
  527.         
  528.         item:=items.add;
  529.         item.caption:=(txspc);
  530.         item.subitems.add(formatfloat('#,##0 ',si.dsksectorspercluster));
  531.  
  532.         item:=items.add;
  533.         item.caption:=(txbps);
  534.         item.subitems.add(formatfloat('#,##0 ',si.dskbytespersector));
  535.         
  536.       finally
  537.         items.endupdate;
  538.       end;
  539.     end;
  540. end;
  541.  
  542. function TfrmMain.GetDisplayData;
  543. var
  544.   item :tlistitem;
  545. begin
  546.   if mode=imnode then
  547.     with tvsi.items do
  548.       node:=addchild(parent,txDisplay);
  549.   if mode=imtext then
  550.     with lvsi do begin
  551.       items.BeginUpdate;
  552.       try
  553.         columns[0].caption:=txparameter;
  554.         columns[1].caption:=txvalue;
  555.         item:=items.add;
  556.         item.caption:=(txAdapter);
  557.         item.subitems.add(si.vidAdapter);
  558.  
  559.         item:=items.add;
  560.         item.caption:=(txChip);
  561.         item.subitems.add(si.vidChip);
  562.  
  563.         item:=items.add;
  564.         item.caption:=(txDAC);
  565.         item.subitems.add(si.vidDAC);
  566.  
  567.         item:=items.add;
  568.         item.caption:=(txVideoMem);
  569.         item.subitems.add(formatfloat('#,## KB',si.vidMemory div 1024));
  570.  
  571.         item:=items.add;
  572.         item.caption:=(txspace);
  573.         item.imageindex:=-1;
  574.         item:=items.add;
  575.         item.caption:=(txxres);
  576.         item.subitems.add(inttostr(si.vidHorzRes));
  577.  
  578.         item:=items.add;
  579.         item.caption:=(txyres);
  580.         item.subitems.add(inttostr(si.vidVertRes));
  581.  
  582.         item:=items.add;
  583.         item.caption:=(txres);
  584.         item.subitems.add(inttostr(si.vidcolordepth)+' bit');
  585.         
  586.         item:=items.add;
  587.         item.caption:=(txFontcount);
  588.         item.subitems.add(inttostr(screen.fonts.count));
  589.  
  590.       finally
  591.         items.endupdate;
  592.       end;
  593.     end;
  594.   result:=true;
  595. end;
  596.  
  597. function TfrmMain.GetFontsData;
  598. var
  599.   item :tlistitem;
  600.   i :integer;
  601. begin
  602.   if mode=imnode then
  603.     with tvsi.items do
  604.       addchild(parent,txFonts);
  605.   if mode=imtext then
  606.     with lvsi do begin
  607.       items.BeginUpdate;
  608.       try
  609.         columns[0].caption:=txfontname;
  610.         columns[1].caption:=txspace;
  611.         for i:=0 to screen.fonts.count-1 do begin
  612.           item:=items.add;
  613.           item.caption:=(screen.fonts[i]);
  614.           
  615.         end;
  616.       finally
  617.         items.endupdate;
  618.       end;
  619.     end;
  620.   result:=true;
  621. end;
  622.  
  623. function TfrmMain.GetSoundData;
  624. var
  625.   item :tlistitem;
  626. begin
  627.   if mode=imnode then
  628.     with tvsi.items do
  629.       addchild(parent,txSound);
  630.   if mode=imtext then
  631.     with lvsi do begin
  632.       items.BeginUpdate;
  633.       try
  634.         columns[0].caption:=txparameter;
  635.         columns[1].caption:=txvalue;
  636.         item:=items.add;
  637.         item.caption:=(txadapter);
  638.         item.subitems.add(si.sndAdapter);
  639.  
  640.         item:=items.add;
  641.         item.caption:=(txspace);
  642.         item.imageindex:=-1;
  643.         item:=items.add;
  644.         item.caption:=(txwavein);
  645.         item.subitems.add(si.sndwavein);
  646.         
  647.         item:=items.add;
  648.         item.caption:=(txwaveout);
  649.         item.subitems.add(si.sndwaveout);
  650.         
  651.         item:=items.add;
  652.         item.caption:=(txmidiin);
  653.         item.subitems.add(si.sndmidiin);
  654.         
  655.         item:=items.add;
  656.         item.caption:=(txmidiout);
  657.         item.subitems.add(si.sndmidiout);
  658.  
  659.         item:=items.add;
  660.         item.caption:=(txaux);
  661.         item.subitems.add(si.sndaux);
  662.         
  663.         item:=items.add;
  664.         item.caption:=(txmixer);
  665.         item.subitems.add(si.sndmixer);
  666.         
  667.       finally
  668.         items.endupdate;
  669.       end;
  670.     end;
  671.   result:=si.sndadapter<>'?';
  672. end;
  673.  
  674. function TfrmMain.GetMonitorData;
  675. var
  676.   item :tlistitem;
  677. begin
  678.   if mode=imnode then
  679.     with tvsi.items do
  680.       addchild(parent,txMonitor);
  681.   if mode=imtext then
  682.     with lvsi do begin
  683.       items.BeginUpdate;
  684.       try
  685.         columns[0].caption:=txparameter;
  686.         columns[1].caption:=txvalue;
  687.         item:=items.add;
  688.         item.caption:=(txDescription);
  689.         item.subitems.add(si.monName);
  690.         
  691.       finally
  692.         items.endupdate;
  693.       end;
  694.     end;
  695.   result:=true;
  696. end;
  697.  
  698. function TfrmMain.GetMouseData;
  699. var
  700.   item :tlistitem;
  701. begin
  702.   if mode=imnode then
  703.     with tvsi.items do
  704.       addchild(parent,txMouse);
  705.   if mode=imtext then
  706.     with lvsi do begin
  707.       items.BeginUpdate;
  708.       try
  709.         columns[0].caption:=txparameter;
  710.         columns[1].caption:=txvalue;
  711.         item:=items.add;
  712.         item.caption:=(txDescription);
  713.         item.subitems.add('');
  714.  
  715.       finally
  716.         items.endupdate;
  717.       end;
  718.     end;
  719.   result:=true;
  720. end;
  721.  
  722. function TfrmMain.GetPrinterData;
  723. var
  724.   item :tlistitem;
  725. begin
  726.   if mode=imnode then
  727.     with tvsi.items do
  728.       addchild(parent,txPrinter);
  729.   if mode=imtext then
  730.     with lvsi do begin
  731.       items.BeginUpdate;
  732.       try
  733.         columns[0].caption:=txparameter;
  734.         columns[1].caption:=txvalue;
  735.         item:=items.add;
  736.         item.caption:=(txDescription);
  737.         item.subitems.add(si.prnName);
  738.         
  739.       finally
  740.         items.endupdate;
  741.       end;
  742.     end;
  743.   result:=true;
  744. end;
  745.  
  746. function TfrmMain.GetOSData;
  747. var
  748.   item :tlistitem;
  749. begin
  750.   if mode=imnode then
  751.     with tvsi.items do
  752.       add(parent,txOS);
  753.   if mode=imtext then
  754.     with lvsi do begin
  755.       items.BeginUpdate;
  756.       try
  757.         columns[0].caption:=txparameter;
  758.         columns[1].caption:=txvalue;
  759.         item:=items.add;
  760.         item.caption:=txPlatform;
  761.         item.subitems.add(si.getosname(si.osplatformid));
  762.  
  763.         item:=items.add;
  764.         item.caption:=txVersion;
  765.         item.subitems.add(si.osversionname+' '+inttostr(si.osmajorversion)+'.'+inttostr(si.osminorversion)+'.'+inttostr(si.osbuildnumber));
  766.  
  767.         item:=items.add;
  768.         item.caption:=txCSD;
  769.         item.subitems.add(si.oscsdversion);
  770.  
  771.         item:=items.add;
  772.         item.caption:=txuser;
  773.         item.subitems.add(si.osuser);
  774.  
  775.         item:=items.add;
  776.         item.caption:=txproductid;
  777.         item.subitems.add(si.osserial);
  778.  
  779.         item:=items.add;
  780.         item.caption:=txspace;
  781.         item.imageindex:=-1;
  782.         item:=items.add;
  783.         item.caption:=txMinApp;
  784.         item.subitems.add('0x'+inttohex(si.osminapplicationaddress,32));
  785.  
  786.         item:=items.add;
  787.         item.caption:=txMaxApp;
  788.         item.subitems.add('0x'+inttohex(si.osmaxapplicationaddress,32));
  789.  
  790.         item:=items.add;
  791.         item.caption:=txspace;
  792.         item.imageindex:=-1;
  793.  
  794.         item:=items.add;
  795.         item.caption:=txTimeZone;
  796.         item.subitems.add(si.ostimezone);
  797.  
  798.       finally
  799.         items.endupdate;
  800.       end;
  801.     end;
  802.   result:=true;
  803. end;
  804.  
  805. function TfrmMain.GetDBData;
  806. var
  807.   item :tlistitem;
  808. begin
  809.   if mode=imnode then
  810.     with tvsi.items do
  811.       add(parent,txDB);
  812.   if mode=imtext then
  813.     with lvsi do begin
  814.       items.BeginUpdate;
  815.       try
  816.         columns[0].caption:=txparameter;
  817.         columns[1].caption:=txvalue;
  818.         item:=items.add;
  819.         item.caption:=txBDE;
  820.         item.subitems.add(si.dbbdeversion);
  821.  
  822.         item:=items.add;
  823.         item.caption:=txODBC;
  824.         item.subitems.add(si.dbodbcversion);
  825.  
  826.       
  827.       finally
  828.         items.endupdate;
  829.       end;
  830.     end;
  831.   result:=true;
  832. end;
  833.  
  834. {###################### Public routines #######################}
  835.  
  836. procedure TfrmMain.FillSystemInfo;
  837. var
  838.   i :integer;
  839.   n,n1 :ttreenode;
  840. begin
  841.   with tvsi.items do begin
  842.     clear;
  843.     getcomputerdata(getfirstnode,imnode,n1);
  844.     getbiosdata(n1,imnode);
  845.     getcpudata(n1,imnode);
  846.     getmemorydata(n1,imnode);
  847.     getdisksdata(n1,imnode,n);
  848.     for i:=1 to si.dskdiskcount do
  849.       getdiskdata(si.dskavailabledisks[i],n,imnode);
  850.     getdisplaydata(n1,imnode,n);
  851.     getfontsdata(n,imnode);
  852.     getmonitordata(n1,imnode);
  853.     getsounddata(n1,imnode);
  854.     getprinterdata(n1,imnode);
  855.     getdxdata(n1,imnode);
  856.     getnetdata(n1,imnode);
  857.     getosdata(getfirstnode,imnode);
  858.     getdbdata(getfirstnode,imnode);
  859.   end;
  860.   sb.panels[0].text:=inttostr(tvsi.items.count)+' domains';
  861. end;
  862.  
  863.  
  864. {###################### Event routines #######################}
  865.  
  866. procedure TfrmMain.cmRefresh(Sender: TObject);
  867. begin
  868.   tvsi.FullCollapse;
  869.   tvsi.hide;
  870.   tvsi.items.clear;
  871.   tvsi.align:=alleft;
  872.   tvsi.left:=0;
  873.   tvsi.width:=tvwidth;
  874.   si.refresh;
  875.   fillsysteminfo;
  876.   lvsi.hide;
  877.   emptypanel.caption:=datetimetostr(now);
  878.   tvsi.show;
  879. end;
  880.  
  881. procedure TfrmMain.cmAbout(Sender: TObject);
  882. begin
  883.   shellabout(Application.MainForm.Handle,pchar(application.title),pchar('Copyright ⌐ 1997-99, MichaL MutL'),application.icon.handle);
  884. end;
  885.  
  886. procedure TfrmMain.cmExit(Sender: TObject);
  887. begin
  888.   close;
  889. end;
  890.  
  891. procedure TfrmMain.cmGetItemData(Sender: TObject; Node: TTreeNode);
  892. var
  893.   visible :boolean;
  894.   n :ttreenode;
  895. begin
  896.   lvsi.items.clear;
  897.   visible:=false;
  898.   if cbtopic.itemindex=0 then begin
  899.     if node.text=txComputer then
  900.       visible:=getcomputerdata(node,imtext,n);
  901.     if node.text=txCPU then
  902.       visible:=getcpudata(node,imtext);
  903.     if node.text=txBIOS then
  904.       visible:=getbiosdata(node,imtext);
  905.     if node.text=txDirectX then
  906.       visible:=getdxdata(node,imtext);
  907.     if node.text=txMemory then
  908.       visible:=getmemorydata(node,imtext);
  909.     if node.text=txDisk then
  910.       visible:=getdisksdata(node,imtext,n);
  911.     if pos('[',node.text)>0 then
  912.       visible:=getdiskdata(node.text[1],node,imtext);
  913.     if node.text=txDisplay then
  914.       visible:=getdisplaydata(node,imtext,n);
  915.     if node.text=txfonts then
  916.       visible:=getfontsdata(node,imtext);
  917.     if node.text=txsound then
  918.       visible:=getsounddata(node,imtext);
  919.     if node.text=txmonitor then
  920.       visible:=getmonitordata(node,imtext);
  921.     if node.text=txprinter then
  922.       visible:=getprinterdata(node,imtext);
  923.     if node.text=txnetwork then
  924.       visible:=getnetdata(node,imtext);
  925.     if node.text=txOS then
  926.       visible:=getosdata(node,imtext);
  927.     if node.text=txDB then
  928.       visible:=getDBdata(node,imtext);
  929.   end;
  930.   lvsi.visible:=visible;
  931. end;
  932.  
  933. procedure TfrmMain.FormCreate(Sender: TObject);
  934. begin
  935.   tvwidth:=tvsi.width;
  936.   cbtopic.itemindex:=0;
  937.   cbtopicchange(sender);
  938.   lcv.caption:=si.about;
  939. end;
  940.  
  941. procedure TfrmMain.TimerTimer(Sender: TObject);
  942. begin
  943.   if not lvsi.visible then
  944.     emptypanel.caption:=datetimetostr(now);
  945. end;
  946.  
  947. procedure TfrmMain.cmExpCol(Sender: TObject; var Key: Word;
  948.   Shift: TShiftState);
  949. begin
  950.   if ssctrl in shift then begin
  951.     if key in [vk_next,vk_numpad3] then begin
  952.       ttreeview(sender).hide;
  953.       ttreeview(sender).fullexpand;
  954.       ttreeview(sender).show;
  955.     end;
  956.     if key in [vk_prior,vk_numpad9] then
  957.       ttreeview(sender).fullcollapse;
  958.   end;
  959. end;
  960.  
  961. procedure TfrmMain.cbTopicChange(Sender: TObject);
  962. begin
  963.   case cbtopic.itemindex of
  964.     0: cmrefresh(sender);
  965.     1: cmwinlist(sender);
  966.   end;
  967. end;
  968.  
  969. procedure TfrmMain.cmWinList(Sender: TObject);
  970. var
  971.   n :integer;
  972.   cn,wt :string;
  973.   wh :hwnd;
  974.   root :ttreenode;
  975.   p :pchar;
  976.  
  977.   procedure EnumChildWins(Awh :hwnd; ARoot :ttreenode);
  978.   var
  979.     node :ttreenode;
  980.   begin
  981.     while awh<>0 do begin
  982.       getclassname(awh,p,n);
  983.       cn:=strpas(p);
  984.       getwindowtext(awh,p,n);
  985.       wt:=strpas(p);
  986.       node:=tvsi.items.addchild(aroot,'Window '+inttohex(awh,8)+' "'+wt+'" :'+cn);
  987.       if iswindowvisible(awh) then
  988.         node.imageindex:=5
  989.       else
  990.         node.imageindex:=4;
  991.       node.selectedindex:=node.imageindex;
  992.       enumchildwins(getwindow(awh,GW_CHILD),node);
  993.       awh:=getwindow(awh,GW_HWNDNEXT);
  994.     end;
  995.   end;
  996.  
  997. begin
  998.   if tvsi.align=alleft then
  999.     tvwidth:=tvsi.width;
  1000.   tvsi.align:=alclient;
  1001.   n:=255;                      
  1002.   p:=stralloc(n);
  1003.   wh:=getdesktopwindow;
  1004.   getclassname(wh,p,n);
  1005.   cn:=strpas(p);
  1006.   getwindowtext(wh,p,n);
  1007.   wt:=strpas(p);
  1008.   tvsi.FullCollapse;
  1009.   tvsi.hide;
  1010.   tvsi.items.clear;
  1011.   root:=tvsi.items.add(nil,'Window '+inttohex(wh,8)+' "'+wt+'" :'+cn);
  1012.   enumchildwins(getwindow(wh,GW_CHILD),root);
  1013.   tvsi.fullexpand;
  1014.   tvsi.items[0].makevisible;
  1015.   tvsi.selected:=tvsi.items[0];
  1016.   tvsi.show;
  1017.   sb.panels[0].text:=inttostr(tvsi.items.count)+' windows';
  1018. end;
  1019.  
  1020. end.
  1021.