Hallo,
ich versuche seit Tagen mit Informationen zu den Ausgabegeräten klar zu kommen.
Leider gelingt mir das nicht da die Beispielfunktionen aus dem Internet nicht ganz so funktionieren wie beschrieben.
Nehmen wir die erste...
Delphi-Quellcode:
procedure GetWaveOutDevicesInfo(DeviceNames: TStrings);
var
DNum: Integer;
i: Integer;
Caps: TWaveOutCaps;
begin
DNum := waveOutGetNumDevs;
// Number of Devices
for i := 0
to DNum - 1
do // Query Devicenames
begin
waveOutGetDevCaps(i, @Caps, SizeOf(TWaveOutCaps));
DeviceNames.Add(Format('
Device %d/%d information follows...', [i,DNum-1] ));
DeviceNames.Add(
string(Caps.szPname));
end;
end;
Hier bekomme ich nicht den vollständigen NAmen der Karte sondern nur:
'Lautsprecher (2- Realtek High D'
komplett wäre:
'Lautsprecher (2- Realtek High Definition Audio)'
Das zweite Beispiel soll die eingestellte Lautstärke auslesen.
Delphi-Quellcode:
function GetWaveVolume(uDeviceId:Cardinal; var wLVol: Word; var wRVol: Word): Boolean;
var
WaveOutCaps: TWaveOutCaps;
Volume: dword;
begin
Result := False;
if WaveOutGetDevCaps(uDeviceId, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then begin
Result := WaveOutGetVolume(uDeviceId, @Volume) = MMSYSERR_NOERROR;
wLVol := HiWord(volume);
wRVol := LoWord(volume);
end;
end;
Als Antwort bekomme ich immer wLvol=65535 und wRvol=65535. Wenn ich eine andere DeviceId übergebe als Geräte die verfügbar sind bekomme ich aber FALSE zurück. Deutet irgendwie darauf hin das der Aufruf WaveOutGetVolume schon funktioniert, die Antwort aber in Volume nicht richtig zurück kommt.
Was mache ich in beiden Fällen falsch? Wenn es an den Delphi gekapselten Funktionen liegt, kann man irgendwie die originalen
API Aufrufe selber direkt verwenden?
Vielen Dank für Eure Hilfe!
Gruß Frank