Microsoft Excel

Herbers Excel/VBA-Archiv

Lautstärke ändern per VBA | Herbers Excel-Forum


Betrifft: Lautstärke ändern per VBA von: Franz W.
Geschrieben am: 02.02.2010 08:50:56

Guten Morgen Fachleute,

lässt sich die PC-Lautstärke per VBA ändern:

Lautstärke auf 100%
später wieder
Lautstärke auf 50%
Geht das? Und was muss ich bitte machen?

Danke schonmal und Grüße
Franz

  

Betrifft: AW: Lautstärke ändern per VBA von: Josef Ehrensberger
Geschrieben am: 02.02.2010 09:35:11

Hallo Franz,



einfaches Beispiel, es wird immer zwichen 100% und 50% umgeschalten.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Sub toggleVolume()
  Dim intRet As Integer
  Static vol As Long
  
  vol = IIf(vol = -1, -32768, -1)
  intRet = waveOutSetVolume(0, vol)
End Sub


Gruß Sepp



  

Betrifft: AW: Lautstärke ändern per VBA von: Franz W.
Geschrieben am: 02.02.2010 09:51:13

Danke Sepp,

aber das hab ich wohl unklar geschrieben. Ich wollte nicht dauerndes Umschalten. Ich benötige nur den Code für 1 Wert, um die Anweisung für die jeweilige Höhe selbst an entsprechender Stelle eintragen zu können. Ich hab nur mal 100% und 50% als Beispiel genannt, um zu sehen, wie diese Werte angegeben werden.


Grüße
Franz


  

Betrifft: AW: Lautstärke ändern per VBA von: Josef Ehrensberger
Geschrieben am: 02.02.2010 10:01:52

Hallo Franz,



dann so.


' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Sub setVolume(ByVal Volume As Integer)
  Dim intRet As Integer, vol As Long
  If Volume < 0 Then Volume = 0
  If Volume > 100 Then Volume = 100
  vol = Int(65535 / -100 * Volume)
  intRet = waveOutSetVolume(0, vol)
End Sub

Sub changeVolume()
  Dim intVolume As Integer, intRet As Integer
  
  intVolume = 50 '50% ,Wert zwischen 0 und 100!
  
  intRet = setVolume(intVolume)
End Sub



Gruß Sepp



  

Betrifft: Korrektur! von: Josef Ehrensberger
Geschrieben am: 02.02.2010 10:04:39

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Sub setVolume(ByVal Volume As Integer)
  Dim intRet As Integer, vol As Long
  If Volume < 0 Then Volume = 0
  If Volume > 100 Then Volume = 100
  vol = Int(65535 / -100 * Volume)
  intRet = waveOutSetVolume(0, vol)
End Sub

Sub changeVolume()
  Dim intVolume As Integer, intRet As Integer
  
  intVolume = 50 '50% ,Wert zwischen 0 und 100!
  
  setVolume intVolume
End Sub


Gruß Sepp



  

Betrifft: AW: Lautstärke ändern per VBA von: Franz W.
Geschrieben am: 02.02.2010 10:11:03

Hallo Sepp,

danke, ich glaube so hätt ich's gern.

Aber es kommt noch die Fehlermeldung "Function oder Variable erwartet" - unterlegt ist "setVolume" in der Zeile

intRet = setVolume(intVolume)
Mach ich was falsch?


Danke und Grüße
Franz


  

Betrifft: siehe Korrektur! o.T. von: Josef Ehrensberger
Geschrieben am: 02.02.2010 10:13:06

Gruß Sepp



  

Betrifft: AW: siehe Korrektur! o.T. von: Franz W.
Geschrieben am: 02.02.2010 10:23:11

Hallo Sepp,

danke, hab's schon, hab vorm Abschicken nicht mehr nachgeschaut.

Aber leider funktioniert's noch nicht richtig:

Auf "0" gestellt ergibt Lautsprecher aus, der ACER-Soundmanager zeigt 0 - das klappt.

Aber alle anderen Werte, egal ob 1 oder 100 ergeben immer die gleiche Lautstärke, und zwar die, die im ACER-SM für das "Gerät" als die höchste eingestellt ist.



Grüße
Franz

P.S.: kann erst in ca 1 Stunde wieder antworten - sorry


  

Betrifft: noch nicht von: Franz W.
Geschrieben am: 02.02.2010 12:06:52

Hallo Sepp,

also, es geht noch nicht, wie beschrieben:

Auf "0" gestellt ergibt Ton aus - wunderbar

Aber alle anderen Werte, egal ob 1 oder 100 ergeben immer die gleiche Lautstärke, und zwar die im System als höchste eingestellte. Hab ich im System 50% eingestellt, dann spielt er immer mit dieser Lautstärke. Hab ich 100% eingestellt, dann mit 100. Hab ich 10% eingestellt, dann mit 10.

Und wie gesagt, egal ich im Code 1 oder 100 oder irgendwas dazwischen eintrage!


Fragende Grüße
Franz


  

Betrifft: AW: noch nicht von: Josef Ehrensberger
Geschrieben am: 02.02.2010 12:30:15

Hallo Franz,


dann probier's mal so.


' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Private Declare Function waveOutGetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, dwVolume As Long) As Integer

Sub SetVolume(ByVal volume As Integer)
  Dim intRet As Integer, Vol As Long
  If volume < 0 Then volume = 0
  If volume > 100 Then volume = 100
  Vol = Int(655.35 * volume)
  intRet = waveOutSetVolume(0, Vol)
End Sub

Sub changeVolume()
  Dim intVolume As Integer, intRet As Integer
  
  intVolume = 100 '50% ,Wert zwischen 0 und 100!
  
  SetVolume intVolume
End Sub


Gruß Sepp



  

Betrifft: gut - fast sehr von: Franz W.
Geschrieben am: 02.02.2010 13:04:43

Hallo Sepp,

ja, super, jetzt wird die Lautstärke verändert, lauter oder leiser, wie gewählt.

Allerdings wird das prozentual innerhalb des Bereichs der System-Lautstärke gemacht. D. h.:

steht die Systemlautstärke auf voll: dann ergibt die Wahl "100" im Code auch volle Lautstärke, "30" ergibt 30% der Systemlautstärke.

Steht die Systemlautstärke aber nicht auf "voll", sondern z. B. auf halber Lautstärke:

jetzt ergibt die Vorwahl "100" nicht hundert Prozent der Systems, sondern nur 50 Prozent, also  _
das Maximum der eingestellten Systemlautstärke.

Vorwahl "30" ergibt dann also eine Lautstärke am unteren Ende der gesamtmöglichen Systemlautstärke.

Ich hoffe, ich konnte darstellen was passiert.

Gibt es auch die Möglichkeit, direkt auf die Systemlautstärke einzuwirken und diese absolut zu regeln?


Grüße
Franz


  

Betrifft: danke von: Franz W.
Geschrieben am: 03.02.2010 07:40:24

Hallo Sepp,

auch wenn's die große Lösung, Eingriff in die Gesamtsystemlautstärke nicht gibt, danke ich Dir trotzdem herzlichst, hast mir sehr geholfen! Auch damit bin ich schon einen Riesenschritt weiter.


Vielen Dank und Grüße
Franz


Beiträge aus den Excel-Beispielen zum Thema "Lautstärke ändern per VBA"