HERBERS Excel-Forum - das Archiv

Thema: System Lautstärke ändern

System Lautstärke ändern
Dieter(Drummer)
Guten Tag an alle.

Ich suche die Möglichkeit, mit "WorkBook_open" und "WorkBook_close", die Systemlautstärke zu ändern. Nur für die aktivierte Datei.
Mit den beidne Codes funktioniert es nicht. Es bleibt bei 100%. Ich kann keinen Fehler finden und es wird auch keiner angezeigt.

Mit der Bitte um Hilfe, wie es richtig funktioniert, dass bei öffnen der Datei 100% und bei schließen wieder 30% Lautstärke eingestellt ist.

Gruß,
Dieter(Drummer)
Jetziger Mustercode:
Private Sub Workbook_Open()

Dim i As Long
'Laustärke auf 100 %, egal welcher Stand war
For i = 0 To 100
Application.SendKeys ("{175}")
Next
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim i As Long
'Laustärke auf 30 %, egal welcher Stand war
For i = 1 To 30
Application.SendKeys ("{175}")
Next
End Sub
AW: System Lautstärke ändern
JoWE
AW: System Lautstärke ändern
volti
Hallo zusammen,

hier noch eine "Notlösung" zum Einstellen eines Festwertes von 0% bis 100%....

Code:


Private Declare PtrSafe Function SetVolume Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As LongPtr, ByVal wMsg As Long, _ ByVal wParam As LongPtr, lParam As LongPtr) As LongPtr Private Sub Workbook_Open() SetzeVolumen 100 End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) SetzeVolumen 30 End Sub Private Sub SetzeVolumen(ByVal iWert As Long) Dim i As Long, j As Long For j = 0 To 1 For i = 1 To IIf(j = 0, 50, iWert \ 2) SetVolume Application.hwnd, &H319, 0, ByVal (j * &H10000) + &H90000 Next i Next j End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
AW: System Lautstärke ändern
Dieter(Drummer)
Hallo Karl-Heinz,

Danke für deine 3 letzten Lösungen, die prima funktionieren. Offensichtlich ist dies ein interessantes Thema gewesen :-).

Gruß und eine schönes Wochenende,
Dieter(Drummer)
AW: System Lautstärke ändern
Dieter(Drummer)
Danke Jochen für Rückmeldung.

Ja, den Beitrag hatte ich mir auch angesehen. Habe nicht die Variante gefunden, diese in Workbook_open und Workbook_close einzusetzen.
Stehe da etwas auf dem Schlauch.

Gruß,
Dieter(Drummer)
AW: System Lautstärke ändern
Dieter(Drummer)
Hallo Jochen,

mit den beiden Mustecodes wird ja 100 % gesetzt aber bei schliessen der Datei, wird nicht auf 30 % gesetzt, Das müsste doch auch möglich sein.
Aber wie?

Gruß,
Dieter(Drummer)
AW: System Lautstärke ändern
JoWE
Hallo Dieter,
sorry, ich kann Dir da nicht wirklich helfen.

Ich hatte nur vor einiger Zeit mal nach einer Möglichkeit gesucht, den Sound aus- und einzuschalten
sowie die Lautstärke zu erhöhen bzw. abzusenken. Dazu hatte ich noch diese Codes gefunden:

'https://www.mrexcel.com/board/threads/vba-code-to-turn-volume-on-up-down.1076829/
'siehe Beitrag von Stan Strong


Option Explicit


#If Win64 Then
Private Const NULL_PTR = 0^
#Else
Private Const NULL_PTR = 0&
#End If

#If VBA7 Then
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
#Else
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#End If

Private Const APPCOMMAND_VOLUME_MUTE As Long = &H80000
Private Const APPCOMMAND_VOLUME_UP As Long = &HA0000
Private Const APPCOMMAND_VOLUME_DOWN As Long = &H90000
Private Const WM_APPCOMMAND As Long = &H319

Sub ToggleMute() 'Lautstärke auf stumm
Call SendMessage(Application.hwnd, WM_APPCOMMAND, NULL_PTR, ByVal APPCOMMAND_VOLUME_MUTE)
End Sub

Sub DecreaseVol() 'Lautstärke geringer werdend pro Durchlauf
Call SendMessage(Application.hwnd, WM_APPCOMMAND, NULL_PTR, ByVal APPCOMMAND_VOLUME_DOWN)
End Sub

Sub IncreaseVol() 'Lautstärke größer werdend pro Durchlauf
Call SendMessage(Application.hwnd, WM_APPCOMMAND, NULL_PTR, ByVal APPCOMMAND_VOLUME_UP)
End Sub


Interesse hätte ich jetzt aufgrund Deiner Frage aber schon, wenn Du eine Lösung hast, teile es bitte mit.

Gruß
Jochen

AW: System Lautstärke ändern
Dieter(Drummer)
Hallp Jochen,

habe bisher keine Lösung gefunden und wenn ich da eine finde, stelle ich sie gerne hier ein. Dafür muss ich erstmal ein Lösungshilfe haben.

Gruß,
Dieter(Drummer)

AW: System Lautstärke ändern. Lösung gefunden
Dieter(Drummer)
Hallo Uwe,

meine Lösung ergibt jetzt:
Datei öffnen, Volumen wird auf 100 % gesetzt. Klappt.
Datei schließen, Volumen wir auf 30 % gesetzt, Klappt.

Volumen hoch setzen, hat mit "Application.SendKeys ("{175}")" zu tun.
Volumen runter setzen, hat mit "Application.SendKeys ("{174}")"" zu tun.

Dieser Code "For i = 1 To 35", hier die Zahl 35, ergibt eine Rücksetzung des Volumens von 100% auf 30 %. Habe es Zahl für Zahl ausprobiert.
Werde noch für mich ausprobieren, welche Zahl im Verhältnis zu 100 genommen werden muss, um das Ergebnis, dass man haben möchte, zu erhalten.

Nun noch einen schönen Abend und ich freue mich, ein funktionierende Lösung zu haben.

Gruß,
Dieter(Drummer)
Private Sub Workbook_Open()

Dim i As Long
'Laustärke auf 100 %, egal welcher Stand war
For i = 0 To 100
Application.SendKeys ("{175}") 'Volumen Erhöhung
Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim i As Long
'Laustärke von 100, egal welcher Stand war
For i = 1 To 35
Application.SendKeys ("{174}") 'Volumen Minderung
Next
End Sub

AW: System Lautstärke ändern. Lösung gefunden
volti
Hallo Dieter,

hier ergänzend:

Als Alternative zu SendKeys kannst Du auch den Vorschlag von Jochen verwenden.
Ich weiß, du bist ein Freund von SendKeys. Dieser Befehl ist aber sehr anfällig.

Diese App_Command-Variante bietet leider nur die Up/Down-Veränderung. Eine Übergabe eines festen Lautstärkewertes ist bedauerlicherweise nicht dabei, ebenso wenig das Abfragen des aktuellen Status.

Beim Anspielen von Musikdateien mit mcisendstring kann die Lautstärke hier direkt beeinflusst werden. Aber nicht nur wegen des Aufwands hier wohl nicht sinnvoll.
Die anderen gefundenen Methoden funktionieren alle nicht richtig.

Vorschlag:

Code:


Private Declare PtrSafe Function SendMessageA Lib "user32" ( _ ByVal hwnd As LongPtr, ByVal wMsg As Long, _ ByVal wParam As LongPtr, lParam As LongPtr) As LongPtr Private Sub Workbook_Open() VolumeUpDown 1 End Sub Private Sub Workbook_BeforeClose() 'Cancel As Boolean) VolumeUpDown 0 End Sub Private Sub VolumeUpDown(ByVal UpDown As Long) Dim i As Long For i = 1 To 50 SendMessageA Application.hwnd, &H319, 0, ByVal (UpDown * &H10000) + &H90000 Next i End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
AW: System Lautstärke ändern. Lösung gefunden
JoWE
Hallo Karl-Heinz,
funktioniert tatsächlich super.
Und mit einer kleinen Änderung im Sub VolumeUpDown klappts auch mit der Lautstärkenverringerung auf 30%,


Private Sub VolumeUpDown(ByVal UpDown As Long)
Dim i As Long
For i = 1 To 35 'hier die kleine Änderung
SendMessageA Application.hwnd, &H319, 0, ByVal (UpDown * &H10000) + &H90000
Next i
End Sub

Gruß
Jochen
AW: Guten Morgen Jochen und Karl-Heinz, ...
Dieter(Drummer)

... werde mich mit den Varianten gerne beschäftigen.
Danke und einen erfreulichen Tag.

Gruß,
Dieter(Drummer)
AW: System Lautstärke ändern. Userform Variante
Dieter(Drummer)
Guten Morgen,

hier noch eine Variante mit Userform, die auch problemlos funktioniert. Volume kann geändert werden, es kann Sprache an oder ausgeschaltet werden und ebenfalls kann Zellinhalt Vorgelesen werden.

Gruß,
Dieter(Drummer)
https://www.herber.de/bbs/user/175094.xlsm
AW: Sehr gut, Dieter (ganz ohne SendKeys ;-) !!!) oT
JoWE
AW: System Lautstärke ändern. Userform Variante
volti
Hallo Dieter,

das hättest Du mit meinem neuen Vorschlag aber einfacher haben können...

Code:


Private Declare PtrSafe Function SetVolume Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As LongPtr, ByVal wMsg As Long, _ ByVal wParam As LongPtr, lParam As LongPtr) As LongPtr Private Sub SetzeVolumen(ByVal iWert As Long) Dim i As Long, j As Long For j = 0 To 1 For i = 1 To IIf(j = 0, 50, iWert \ 2) SetVolume Application.hwnd, &H319, 0, ByVal (j * &H10000) + &H90000 Next i Next j End Sub Private Sub opt1_Click() ' Laustärke auf 10 %, egal welcher Stand war SetzeVolumen 10 End Sub Private Sub opt2_Click() ' Laustärke auf 20 %, egal welcher Stand war SetzeVolumen 20 End Sub 'usw......

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
System Lautstärke ändern. Das Optimum
volti
Hallo zusammen,

gut Ding will Weil haben.

Mich störte jetzt aber doch, dass das Ding erst immer runter auf Null muss und dann erst hochfährt. Wenn die Anzeige nicht wäre, wäre es ja egal.

Hier noch eine Variante, die nur noch hoch oder runter fährt oder gar nichts macht, wenn die Lautstärke schon auf dem Level ist.

Hierzu merken wir uns die letzte Einstellung und rechnen nur noch die Differenz aus. Lediglich beim Ersten Mal in der Mappe fährt es erst mal runter, um einen korrekten Stand zu bekommen.

Muss natürlich noch etwas getestet werden....

PS: Diese Variante ist jetzt auch mit der Stummschaltung ausgestattet. Einfach (-1) übergeben.

Code:


Option Explicit Dim miLastVolume As Long Private Declare PtrSafe Function SetVolume Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As LongPtr, ByVal wMsg As Long, _ ByVal wParam As LongPtr, lParam As LongPtr) As LongPtr Private Sub SetzeVolumen(ByVal iWert As Long, Optional bReset As Boolean) Const WM_AppCommand As Long = &H319 Const WM_Up As Long = &HA0000 Const WM_Dn As Long = &H90000 Dim i As Long, iUpDn As Long, iDiff As Long With Application If iWert = (-1) Then SetVolume .hwnd, WM_AppCommand, 0, ByVal &H80000 ' Mute ein/ausschalten Exit Sub End If iWert = iWert \ 2 If iWert > 50 Then iWert = 50 If iWert < 0 Then iWert = 0 If iWert = miLastVolume Then Exit Sub ' keine Lautstärkenänderung =>raus If miLastVolume < 1 Or miLastVolume > 50 Or bReset Then ' Auf Null fahren For i = 1 To 50 SetVolume .hwnd, WM_AppCommand, 0, ByVal WM_Dn Next i miLastVolume = 0 ' Runtergefahren End If iUpDn = IIf(iWert < miLastVolume, WM_Dn, WM_Up) ' Richtung festlegen iDiff = Abs(iWert - miLastVolume) ' Differenz ermitteln miLastVolume = iWert ' Level merken ' Jetzt Lautstärke verändern For i = 1 To iDiff SetVolume .hwnd, WM_AppCommand, 0, ByVal iUpDn ' Hoch/Runterfahren Next i End With End Sub Private Sub opt1_Click() ' Laustärke auf 10 %, egal welcher Stand war SetzeVolumen 10 ',true End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz