Victor_Dobrov
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [Setup] AppName=GetDeviceInfo AppVerName=GetDeviceInfo CreateAppDir=false [Code] type TWaveOutCaps = record vPid, vDriverVersion: DWord; sName: array[0..31] of Char; Formats: DWord; Channels: Word; Support: DWord; end; PDisplay_Device = record cb: DWord; DeviceName: array[0..31] of Char; DeviceString: array[0..127] of Char; StateFlags: DWord; DeviceID, DeviceKey: array[0..127] of Char; end; Const oneMB= 1024*1024; DISPLAY_DEVICE_PRIMARY_DEVICE = 4; var Report: String; n, errCode: Integer; lpCaps: TWaveOutCaps; lpDisplayDevice: PDisplay_Device; DeviceValue: Cardinal; VideoName, SoundName, MixerName, DeviceKey: String; Keys: TArrayOfString; function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord):Boolean; external 'EnumDisplayDevicesA@user32.dll stdcall'; function waveOutGetDevCaps(uDeviceID: LongInt; var lpCaps: TWaveOutCaps; uSize: LongInt): LongInt; external 'waveOutGetDevCapsA@winmm.dll stdcall'; function waveOutGetNumDevs: Integer; external 'waveOutGetNumDevs@winmm.dll stdcall'; function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TWaveOutCaps; uSize: LongInt): LongInt; external 'mixerGetDevCapsA@winmm.dll stdcall'; function mixerGetNumDevs: Integer; external 'mixerGetNumDevs@winmm.dll stdcall'; Function InitializeSetup: Boolean; Begin {video} lpDisplayDevice.cb:= SizeOf(lpDisplayDevice); n:= 0; while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n:= n +1 for n:= 0 to 127 do DeviceKey:= DeviceKey + lpDisplayDevice.DeviceKey[n]; Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127); { ключ драйвера получаем из API } StringChange(DeviceKey,'\Registry\Machine\',''); errCode:= 1; DeviceValue:= 0; { объём видеопамяти } RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', VideoName) { проверку 9х или NT не делаю } for n:= 1 to Length(VideoName) do begin DeviceValue:= DeviceValue + Ord(VideoName[n]) *errCode; errCode:= errCode * $100; end; VideoName:= ''; for n:= 0 to 127 do VideoName:= VideoName + lpDisplayDevice.DeviceString[n]; Delete(VideoName, Pos(Chr(0), VideoName), 127); if VideoName <> '' then if DeviceValue > 0 then VideoName:= VideoName +', '+ IntToStr(DeviceValue/oneMB) + 'Mb' else VideoName:= VideoName +' (стандартный драйвер)' else VideoName:= 'Ошибка драйвера или оборудования' {sound} for errCode:= 0 to waveOutGetNumDevs do begin waveOutGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps)); SoundName:='' for n:= 0 to 31 do SoundName:= SoundName + lpCaps.sName[n]; Delete(SoundName, Pos(Chr(0), SoundName), 31); SetArrayLength(Keys, errCode+1); if errCode+1 > 0 then Keys[errCode]:= SoundName end; SoundName:= #9 if errCode > 0 then for n:= 0 to GetArrayLength(Keys) -1 do SoundName:= SoundName + Keys[n] + #13#10#9 else SoundName:= #9 'Звуковые устройства не обнаружены' {mixer} for errCode:= 0 to mixerGetNumDevs do begin mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps)); MixerName:='' for n:= 0 to 31 do MixerName:= MixerName + lpCaps.sName[n]; Delete(MixerName, Pos(Chr(0), MixerName), 31); SetArrayLength(Keys, errCode); if errCode > 0 then Keys[errCode-1]:= MixerName end; MixerName:= #9 if errCode > 0 then for n:= 0 to GetArrayLength(Keys) -1 do MixerName:= MixerName + Keys[n] + #13#10#9 else MixerName:= #9 'Звуковые устройства не обнаружены' Report:= 'Video: '#9 + VideoName + #13#10 'Key: '#9 + DeviceKey + #13#10#13 'SoundCards: '#13#10 + SoundName + #13#10 'MixerDev: '#13#10 + MixerName MsgBox(Report, mbInformation, mb_Ok) SaveStringToFile('Report.txt', Report, True); End; |