Autor Beitrag
sky21
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Quelltext
1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render					
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 12.04.11 13:59 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das läuft alles sehr stark über GUIDs, deshalb sieht es ein wenig kryptisch aus... Viel Erfolg...

Das kann man doch alles im Windows-SDK nachlesen. Insbesondere ein Blick in die beiliegenden MF*.h-Headerdateien ist lohnenswert. Man braucht also nicht wie im Nebel in der Registry herum zu stochern. ;-)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 12.04.11 18:58 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconsky21 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 12.04.11 19:26 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.04.11 22:15 
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss: