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

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       MiTeC System Information Component              }
  5. {               Media Detection Part                    }
  6. {           version 6.0 for Delphi 5,6                  }
  7. {                                                       }
  8. {       Copyright ⌐ 1997,2001 Michal Mutl               }
  9. {                                                       }
  10. {*******************************************************}
  11.  
  12. {$INCLUDE MITEC_DEF.INC}
  13.  
  14. unit MSI_Media;
  15.  
  16. interface
  17.  
  18. uses
  19.   SysUtils, Windows, Classes, MMSystem;
  20.  
  21. type
  22.   TMedia = class(TPersistent)
  23.   private
  24.     FDevice,
  25.     FAUX,
  26.     FMIDIIn,
  27.     FMixer,
  28.     FWAVEOut,
  29.     FWAVEIn,
  30.     FMIDIOut: TStrings;
  31.     FSCI: integer;
  32.     FGPI: integer;
  33.   public
  34.     constructor Create;
  35.     destructor Destroy; override;
  36.     procedure GetInfo;
  37.     procedure Report(var sl :TStringList);
  38.   published
  39.     property GamePortIndex: integer read FGPI {$IFNDEF D6PLUS} write FGPI {$ENDIF} stored false;
  40.     property SoundCardIndex: integer read FSCI {$IFNDEF D6PLUS} write FSCI {$ENDIF} stored False;
  41.     property Devices :TStrings read FDevice {$IFNDEF D6PLUS} write FDevice {$ENDIF} stored false;
  42.     property WAVEIn :TStrings read FWAVEIn {$IFNDEF D6PLUS} write FWAVEIn {$ENDIF} stored false;
  43.     property WAVEOut :TStrings read FWAVEOut {$IFNDEF D6PLUS} write FWAVEOut {$ENDIF} stored false;
  44.     property MIDIIn :TStrings read FMIDIIn {$IFNDEF D6PLUS} write FMIDIIn {$ENDIF} stored false;
  45.     property MIDIOut :TStrings read FMIDIOut {$IFNDEF D6PLUS} write FMIDIOut {$ENDIF} stored false;
  46.     property AUX :TStrings read FAUX {$IFNDEF D6PLUS} write FAUX {$ENDIF} stored false;
  47.     property Mixer :TStrings read FMixer {$IFNDEF D6PLUS} write FMixer {$ENDIF} stored false;
  48.   end;
  49.  
  50. implementation
  51.  
  52. uses Registry, MiTeC_Routines, MSI_Devices;
  53.  
  54. { TMedia }
  55.  
  56. constructor TMedia.Create;
  57. begin
  58.   inherited;
  59.   FDevice:=TStringList.Create;
  60.   FWaveIn:=TStringList.Create;
  61.   FWaveOut:=TStringList.Create;
  62.   FMIDIIn:=TStringList.Create;
  63.   FMIDIOut:=TStringList.Create;
  64.   FMixer:=TStringList.Create;
  65.   FAUX:=TStringList.Create;
  66. end;
  67.  
  68. destructor TMedia.Destroy;
  69. begin
  70.   FDevice.Free;
  71.   FWaveIn.Free;
  72.   FWaveOut.Free;
  73.   FMIDIIn.Free;
  74.   FMIDIOut.Free;
  75.   FMixer.Free;
  76.   FAUX.Free;
  77.   inherited;
  78. end;
  79.  
  80. procedure TMedia.GetInfo;
  81. var
  82.   WOC :PWAVEOutCaps;
  83.   WIC :PWAVEInCaps;
  84.   MOC :PMIDIOutCaps;
  85.   MIC :PMIDIInCaps;
  86.   AXC :PAUXCaps;
  87.   MXC :PMixerCaps;
  88.   i,j,n: integer;
  89.   s: string;
  90. const
  91.   rv = 'DriverDesc';
  92.   rvMediaClass = 'MEDIA';
  93. begin
  94.   FDevice.Clear;
  95.   GetClassDevices(ClassKey,rvMediaClass,DescValue,FDevice);
  96.   FSCI:=-1;
  97.   FGPI:=-1;
  98.  
  99.   with TDevices.Create do begin
  100.     GetInfo;
  101.     for i:=0 to DeviceCount-1 do
  102.       if Devices[i].DeviceClass=dcMEDIA then begin
  103.         if Devices[i].FriendlyName='' then
  104.           s:=Devices[i].Description
  105.         else
  106.           s:=Devices[i].FriendlyName;
  107.         j:=FDevice.IndexOf(s);
  108.         if j<>-1 then begin
  109.           if pos('GAME',UpperCase(s))>0 then
  110.             FGPI:=j
  111.           else
  112.             if (Devices[i].Location<>'') and (FSCI=-1) then
  113.               FSCI:=j;
  114.         end;
  115.       end;
  116.     Free;
  117.   end;
  118.  
  119.   new(WOC);
  120.   n:=waveOutGetNumDevs;
  121.   for i:=0 to n-1 do
  122.     if WAVEOutGetDevCaps(i,WOC,SizeOf(TWAVEOutCaps))=MMSYSERR_NOERROR then begin
  123.       s:=strpas(WOC^.szPname)+' v'+inttostr(hi(WOC^.vDriverVersion))+'.'+inttostr(hi(WOC^.vDriverVersion));
  124.       if FWaveOut.IndexOf(s)=-1 then
  125.         FWAVEOut.Add(s);
  126.     end;
  127.   dispose(WOC);
  128.  
  129.   new(WIC);
  130.   n:=waveInGetNumDevs;
  131.   for i:=0 to n-1 do
  132.     if WAVEinGetDevCaps(i,WIC,SizeOf(TWAVEInCaps))=MMSYSERR_NOERROR then begin
  133.       s:=strpas(WIC^.szPname)+' v'+inttostr(hi(WIC^.vDriverVersion))+'.'+inttostr(hi(WIC^.vDriverVersion));
  134.       if FWaveIn.IndexOf(s)=-1 then
  135.         FWAVEIn.Add(s);
  136.     end;
  137.   dispose(WIC);
  138.  
  139.   new(MOC);
  140.   n:=midiOutGetNumDevs;
  141.   for i:=0 to n-1 do
  142.     if MIDIoutGetDevCaps(i,MOC,SizeOf(TMIDIOutCaps))=MMSYSERR_NOERROR then begin
  143.       s:=strpas(MOC^.szPname)+' v'+inttostr(hi(MOC^.vDriverVersion))+'.'+inttostr(hi(MOC^.vDriverVersion));
  144.       if FMIDIOut.IndexOf(s)=-1 then
  145.         FMIDIout.Add(s);
  146.     end;
  147.   dispose(MOC);
  148.  
  149.   new(MIC);
  150.   n:=midiInGetNumDevs;
  151.   for i:=0 to n-1 do
  152.     if MIDIinGetDevCaps(i,MIC,SizeOf(TMIDIInCaps))=MMSYSERR_NOERROR then begin
  153.       s:=strpas(MIC^.szPname)+' v'+inttostr(hi(MIC^.vDriverVersion))+'.'+inttostr(hi(MIC^.vDriverVersion));
  154.       if FMIDIIn.IndexOf(s)=-1 then
  155.         FMIDIin.Add(s);
  156.     end;
  157.   dispose(MIC);
  158.  
  159.   new(AXC);
  160.   n:=auxGetNumDevs;
  161.   for i:=0 to n-1 do
  162.     if AUXGetDevCaps(i,AXC,SizeOf(TAUXCaps))=MMSYSERR_NOERROR then begin
  163.       s:=strpas(AXC^.szPname)+' v'+inttostr(hi(AXC^.vDriverVersion))+'.'+inttostr(hi(AXC^.vDriverVersion));
  164.       if FAUX.IndexOf(s)=-1 then
  165.         FAUX.Add(s);
  166.     end;
  167.   dispose(AXC);
  168.  
  169.   new(MXC);
  170.   n:=mixerGetNumDevs;
  171.   for i:=0 to n-1 do
  172.     if MixerGetDevCaps(i,MXC,SizeOf(TMixerCaps))=MMSYSERR_NOERROR then begin
  173.       s:=strpas(MXC^.szPname)+' v'+inttostr(hi(MXC^.vDriverVersion))+'.'+inttostr(hi(MXC^.vDriverVersion));
  174.       if FMixer.IndexOf(s)=-1 then
  175.         FMixer.Add(s);
  176.     end;
  177.   dispose(MXC);
  178. end;
  179.  
  180. procedure TMedia.Report(var sl: TStringList);
  181. begin
  182.   with sl do begin
  183.     Add('[Media]');
  184.     StringsToRep(Devices,'Count','Device',sl);
  185.     Add('[Sound]');
  186.     StringsToRep(WaveIn,'WaveInCount','WaveIn',sl);
  187.     StringsToRep(WaveOut,'WaveOutCount','WaveOut',sl);
  188.     StringsToRep(MIDIIn,'MIDIInCount','MIDIIn',sl);
  189.     StringsToRep(MIDIIn,'MIDIOutCount','MIDIOut',sl);
  190.     StringsToRep(AUX,'AUXCount','AUX',sl);
  191.     StringsToRep(Mixer,'MixerCount','Mixer',sl);
  192.   end;
  193. end;
  194.  
  195. end.
  196.