Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Audio Aufnahmegeräte auflisten (Name wird abgeschnitten) (https://www.delphipraxis.net/142473-audio-aufnahmegeraete-auflisten-name-wird-abgeschnitten.html)

Zacherl 28. Okt 2009 20:25


Audio Aufnahmegeräte auflisten (Name wird abgeschnitten)
 
Hey,

momentan liste ich mir mit folgendem Code alle Aufnahmegeräte des Computers auf:

Delphi-Quellcode:
var
  I: Integer;
  hMixerHandle: HMIXER;
  MixerCaps: TMixerCaps;
begin
  for I := 0 to mixerGetNumDevs -1 do
  begin
    if (mixerOpen(@hMixerHandle, I, 0, 0, MIXER_OBJECTF_WAVEIN) =
      MMSYSERR_NOERROR) then
    begin
      try
        FillChar(MixerCaps, SizeOf(MixerCaps), #0);
        if (mixerGetDevCaps(hMixerHandle, @MixerCaps, SizeOf(TMixerCaps)) =
          MMSYSERR_NOERROR) then
        begin
          Memo1.Lines.Add(IntToStr(I) + ': ' + MixerCaps.szPname);
        end;
      finally
        mixerClose(hMixerHandle);
      end;
    end;
  end;
end;
Funktioniert alles wunderbar, nur leider ist szPname im MixerCaps Struct auf 32 Zeichen begrenzt. :?

1) :arrow: Hat da jemand eine alternative Lösung parat?
2) :arrow: nur sekundär, aber fals sich jemand mit auskennt, gibt es eine Möglichkeit zu prüfen, ob das Gerät bereit ist? In der Systemsteuerung von Windows, wird z.b. nur bei Geräten, die bereit zur Verwendung sind, ein live Lautstärkepegel angezeigt (Win7)

Viele Grüße
Zacherl

Zacherl 29. Okt 2009 14:17

Re: Aufnahmegeräte auflisten (Name wird abgeschnitten)
 
Keine ne Idee?

Die DeviceTopology APIs sind leider erst ab Vista vorhanden und dieses ActiveX / Interface Zeugs würde ich auch sehr gerne vermeiden.
http://msdn.microsoft.com/en-us/library/ms678714(VS.85).aspx

Bernhard Geyer 29. Okt 2009 14:19

Re: Audio Aufnahmegeräte auflisten (Name wird abgeschnitten)
 
Kannst du die Wide-Version von mixerGetDevCaps verwenden?
Es gibt ab und zu in der Win-API Längenbegrenzungen bei der Ansi-Version von API's.

Zacherl 29. Okt 2009 14:57

Re: Audio Aufnahmegeräte auflisten (Name wird abgeschnitten)
 
Die APIs und Strukturen sind jeweils die WideString Varianten, da ich Delphi 2009 verwendet habe. Eigentlich ist der abgeschnittene Name ja auch kein Bug, sondern eine Beschränkung der mixerGetDevCaps API. Wenn man sich die Struktur anschaut:

Delphi-Quellcode:
tagMIXERCAPSW = record
    wMid: WORD;                   { manufacturer id }
    wPid: WORD;                   { product id }
    vDriverVersion: MMVERSION;    { version of the driver }
    szPname: array [0..MAXPNAMELEN - 1] of WideChar;  { product name }
    fdwSupport: DWORD;            { misc. support bits }
    cDestinations: DWORD;         { count of destinations }
  end;
Sieht man die Begrenzung auf MAXPNAMELEN (32).

Aber irgendwie listet ja auch z.b. die Systemsteuerung unter XP die vorhandenen Geräte auf. Dort ist die Topology API meines Wissens nach noch nicht vorhanden, aber die Namen sind trotzdem nicht abgeschnitten.

Zacherl 2. Nov 2009 15:55

Re: Audio Aufnahmegeräte auflisten (Name wird abgeschnitten)
 
*push* :duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz