Autor |
Beitrag |
sky21
      
Beiträge: 141
W7
D2010, XE2
|
Verfasst: Mo 11.04.11 09:06
Guten Morgen
Ich möchte gerne mittels Delphi-Code das Default Playback Audio Device setzen.
Unter XP konnte man das dadurch erreichen, dass man einen bestimmten Registry Key überschrieben hat. Der Key hat unter Windows 7 keinen Effekt mehr. Schlimmer noch: Seit Vista ist offenbar Audiomässig Vieles neu gemacht worden. Das Knowhow diesbezüglich scheint noch sehr spärlich zu sein. Im Netzfinde ich zumindest kaum etwas... Naja, jeder scheint dasselbe Problem zu haben
Hat jemand von euch eine Idee?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 11.04.11 09:36
Ja, da hat sich viel getan. Die physischen Geräte sind jetzt abstrahiert. Das heißt du steuerst ja z.B. nicht mehr die Systemlautstärke eines Geräts, sondern die Lautstärke einer Anwendung.
Das voreingestellte Gerät zu ändern ist nicht vorgesehen. Das kann der Benutzer selbst einstellen. Wenn Anwendungen dem Benutzer Systemeinstellungen ändern, gibt das in der Regel nur Probleme. Deshalb finde ich das auch gut so. Eine Anwendung hat mir nicht an globalen Einstellungen herumzupfuschen.
Wenn du mit deiner Anwendung ein anderes Gerät nutzen willst, dann kannst du das mit der Core Audio API tun, dafür gibt es in der Doku auch Beispiele.
|
|
sky21 
      
Beiträge: 141
W7
D2010, XE2
|
Verfasst: Di 12.04.11 08:29
Hallo Jaenicke und danke für deine Nachricht
Bei meinem Anwendungsfall ist es eben so, dass der Benutzer die Sounds diverser Anwendungen über dasselbe Gerät abpielen soll. Bei manchen Programmen lässt sich das Zielgerät individuell pro App. definieren, andere hingegen nehmen das Default Dings. Da ist es für mich dann am Einfachsten, die Änderung gleich global vorzunehmen.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.04.11 08:58
Da wird dir nichts anderes übrig bleiben als den Process Monitor zu nehmen und zu schauen welche Registry Keys beim Ändern des Gerätes gesetzt werden. Allerdings gibt es jetzt ja mehrere Standardgeräte (Kommunikation, Audioausgabe, ...).
Und eins schon einmal vorweg:
Das läuft alles sehr stark über GUIDs, deshalb sieht es ein wenig kryptisch aus... Viel Erfolg...
Die verschiedenen Geräte scheinen jedenfalls hier zu stehen, da hatte ich gestern Abend auch kurz geschaut:
Quelltext 1:
| HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render |
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 12.04.11 13:59
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.04.11 15:33
Dass da die Registryzweige drin stehen, mit denen man das machen kann was man eigentlich nicht machen können soll, hätte ich nicht gedacht... deshalb habe ich da nicht geschaut...
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 12.04.11 18:58
jaenicke hat folgendes geschrieben : | Dass da die Registryzweige drin stehen, mit denen man das machen kann was man eigentlich nicht machen können soll |
Ich meinte nun nicht, dass sky21 jetzt einfach durch sein Programm in der Registry Werte überschreiben sollte. Im Windows-SDK und in den MF*.h-Dateien sind doch die entsprechenden Funktionen aufgeführt. Allerdings muss man sich dort erst einmal einlesen.
Ich kann wirklich nur jedem raten, das (kostenlose) Windows-SDK zu installieren. Das ist eine wahre Fundgrube.
Download: msdn.microsoft.com/d...indows/ff851942.aspx (sind aber zig MB)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.04.11 19:00
Soweit ich das sehe gibt es eine solche Funktion schlicht nicht... (und das halte ich wie gesagt auch für gut so)
Das ist auch die Aussage in den MSDN-Diskussionen dazu...
Welche der Funktionen meinst du denn konkret?
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 12.04.11 19:26
jaenicke hat folgendes geschrieben : | Welche der Funktionen meinst du denn konkret? |
Das wäre ein erster Anlaufpunkt: msdn.microsoft.com/e...ibrary/aa908376.aspx
Auch zu finden im Windows-SDK über den Suchbegriff "set audio device"
Edit1: Sorry, sehe gerade, dass das nur für Windows Mobile gilt.
Edit2: Folgenden Hinweis gefunden: "althrough undocumented in WIN32, the DRVM_MAPPER_PREFERRED_SET and DRVM_MAPPER_PREFERRED_GET messages are also available in WIN32 (at least in XP, unknown for older or newer versions)
an exception to DRVM_MAPPER_PREFERRED_GET, it needs a pointer to a DWORD in the second parameter (lParam)"
Edit3: Hier gibt es einen Mega-Thread zu dem Thema. Und wenn ich das richtig sehe, gibts am Ende eine Lösung:
social.msdn.microsof...28-9de9-2af63fd4a13e
eretik.omegahg.com/download/PolicyConfig.h
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.04.11 22:15
Gerd Kayser hat folgendes geschrieben : | Edit3: Hier gibt es einen Mega-Thread zu dem Thema. Und wenn ich das richtig sehe, gibts am Ende eine Lösung: |
Ja, die "Lösung" besteht soweit ich das sehe darin das entsprechende Fenster in der Systemsteuerung fernzusteuern...
Ich habe es jedenfalls ausprobiert, hier hat es Microsoft tatsächlich mal richtig gemacht:
Selbst mit Adminrechten kann kein Programm die entsprechenden Registryschlüssel verändern. Das kann nur der Audiodienst selbst.
Insofern bleibt nur irgendeine undokumentierte API zu versuchen oder schlicht dem Benutzer das Bedienfeld zu öffnen, damit er die kleine Änderung einfach schnell selbst machen kann...
Bei einem so speziellen Programm sollte das doch wohl kein Problem sein. 
|
|