Entwickler-Ecke

Multimedia / Grafik - Lautstärke auf max?


greentiger - Mo 10.10.11 18:15
Titel: Lautstärke auf max?
Hallo liebes Forum!

Kann mir jemand sagen, wie ich die Laustärke auf max/stumm stellen kann?
Mit einem einfachen Button_Click, habe schon so manches bei google gefunden aber bis jetzt hat es noch nicht geklappt.

Edit: Stumm schalten funktioniert schon http://csharp-tricks.blogspot.com/2010/12/ton-ausschalten-windows-xp-vista-7.html


MfG


jaenicke - Mo 10.10.11 18:25

Hallo und :welcome:

Wie gibst du denn den Ton aus? Denn danach richtet sich ja auch wie du die Lautstärke dafür änderst.


greentiger - Mo 10.10.11 18:31

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Wie gibst du denn den Ton aus? Denn danach richtet sich ja auch wie du die Lautstärke dafür änderst.


Wie meinst du das?

Ich möchte den Systemton auf max einstellen, die jeweilige Lautstärkeregelung in den einzelnen Programmen ist egal.

PS: sollte unter Win 7 funktionieren ;)


daeve - Mo 10.10.11 18:38

ev. hilft dir das weiter http://www.codeproject.com/KB/vista/CoreAudio.aspx oder das http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html


jaenicke - Mo 10.10.11 18:39

Wobei es in 99,9% der Fälle besser ist das dem Benutzer zu überlassen...
Eine Software, die mir da reinpfuscht, fliegt schneller wieder vom PC als sie Piep machen kann...
Genau dafür wurde die programmspezifische Lautstärkeregelung eingeführt, damit man nicht andere Programme und den Benutzer ärgern muss.


greentiger - Mo 10.10.11 18:50

user profile icondaeve hat folgendes geschrieben Zum zitierten Posting springen:
http://www.codeproject.com/KB/vista/CoreAudio.aspx oder das http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html


Dies habe ich auch schon gefunden, Danke ;)

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wobei es in 99,9% der Fälle besser ist das dem Benutzer zu überlassen...
Eine Software, die mir da reinpfuscht, fliegt schneller wieder vom PC als sie Piep machen kann...
Genau dafür wurde die programmspezifische Lautstärkeregelung eingeführt, damit man nicht andere Programme und den Benutzer ärgern muss.


Möchte einfach ein kleines Programm für mich schreiben, was ein Lied abspielt und da brauche ich eigenttich nur eine Stummtaste und eine für max Volume ;)
Würde dann noch einbauen, dass ich mit einer Tastenkombi stumm bzw auf max stellen kann.


greentiger - Di 11.10.11 15:09

Habe eine Lösung gefunden, mit private const int APPCOMMAND_VOLUME_UP = 0xA0000; kann man die Laustärke erhöhen.

Edit:

Breakpoit bei:

C#-Quelltext
1:
 SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);                    


Dann kommen diese Meldungen:

Quelltext
1:
2:
3:
4:
5:
this.Handle  "this.Handle" hat eine Ausnahme vom Typ "System.InvalidOperationException" verursacht.  System.IntPtr {System.InvalidOperationException}

//SendMessageW steht in einer Methode, die vorher in einem Multithread aufgerufen wird

base  {"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Form1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}  System.SystemException {System.InvalidOperationException}


Wie kann ich das Problem beheben ohne den Multithread zu beenden?


daeve - Di 11.10.11 18:43

Da hilft dir das synchronisieren von threads sehr wahrscheinlich weiter.


greentiger - Mi 12.10.11 17:20

user profile icondaeve hat folgendes geschrieben Zum zitierten Posting springen:
Da hilft dir das synchronisieren von threads sehr wahrscheinlich weiter.


Hätte den Thread so synchronisiert, funktioniert leider nicht, es kommt immer noch die Meldung.
http://msdn.microsoft.com/de-de/library/ms173179.aspx


Th69 - Mi 12.10.11 18:11

Hallo greentiger,

nein, das ist nicht die richtige Synchronisation für diesen Zweck.
Du mußt Control.Invoke [http://msdn.microsoft.com/de-de/library/system.windows.forms.control.invoke%28v=vs.80%29.aspx] benutzen, damit der Aufruf im MainThread durchgeführt wird.

Benutzt du denn überhaupt einen anderen Thread? Ansonsten könnte auch das STAThreadAttribute helfen:

C#-Quelltext
1:
2:
[STAThread]
static void Main()

(falls es nicht sowieso schon standardmäßig da steht ;-)


greentiger - Do 13.10.11 16:33

Danke, mit Control.Invoke habe ich es hinbekommen ;)

Moderiert von user profile iconTh69: Status auf "Frage beantwortet" gesetzt