seit windows vista ist das handling mit den unterschiedlichen soundkarten etwas umständlich geraten.
mich persönlich nervt das so ziemlich und ich suchte nach einer möglichkeit das mit weniger mausklicks zu bewerkstelligen.
ich glaube ich habe es geschafft.
mein script plaziert ein icon im tray und lässt diverse vorhandene sounddevices auswählen.
leider ist das setzen der werte in der registry für mich nicht ganz so einfach zu verstehen, da an den wichtigen stellen mit hex werten gearbeitet wird.
daher habe ich mich entschieden auf ein weiteres tool zurück zu greifen, was die werte setzt.
es wird im archiv mitgeliefert
Features:
Auslesen der Namen der Sounddevices
es werden dynamisch items für 2 bis 3 4 soundkarten gesetzt. (beliebig erweiterbar)
ca 4 mb speicherverbrauch
0% prozessorlast
schnell im umschalten
eine tolle blase die zeigt was gerade an ist
option zum deaktivieren der blase.
das aktive gerät ist ausgegraut (leider erst nach dem ersten setzen)
wünsche an euch:
bugreports
tips zur verbesserung geben
im gesamten mithelfen das tool noch besser zu machen.
hier nun das prachtstück:
Spoiler anzeigen
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=1320412398_emblem-sound.ico
#AutoIt3Wrapper_Outfile=soundchanger mit tray 1.0.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Obfuscator=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Constants.au3>
#include <Array.au3>
Opt("TrayMenuMode", 3)
Local $reg[1]
Local $devnamen[1]
Local $blase = 1
If @CPUArch = "X64" Then ; wenn x64 dann nimm den 64er regschlüssel
Global $key = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
Else
Global $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
EndIf
For $i = 1 To 20 ; bis zu 20 geräteschlüssel werden ausgelesen
Local $var = RegEnumKey($key, $i)
If @error <> 0 Then ExitLoop
$devices = RegRead($key & "\" & $var, "DeviceState") ; status des gerätes (nutzbar?!?)
If $devices = 1 Then ; wenn nutzbar dann steht da eine 1, also nimm das mit auf
$devname = RegRead($key & "\" & $var & "\" & "Properties", "{b3f8fa53-0004-438e-9003-51a46e139bfc},6") ; name des gerätes
_ArrayAdd($reg, $var) ; regschlüssel
_ArrayAdd($devnamen, $devname) ; gerätenamen
EndIf
Next
_ArrayDelete($devnamen, 0)
_ArrayDelete($reg, 0)
$devs = UBound($devnamen)
$hdmi = TrayCreateItem($devnamen[0])
$real = TrayCreateItem($devnamen[1])
If $devs > 2 Then $head = TrayCreateItem($devnamen[2])
TrayCreateItem("")
$noblase = TrayCreateItem("Kein Traytip")
TrayCreateItem("")
$exititem = TrayCreateItem("Beenden")
TraySetState()
TraySetClick(1)
While 1
$msg = TrayGetMsg()
Select
Case $msg = $hdmi
Run("SetDefaultAudioDevice.exe" & " " & $reg[0] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[0] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[0], 5, 1)
TrayItemSetState($hdmi, $TRAY_DISABLE)
TrayItemSetState($real, $TRAY_ENABLE)
TrayItemSetState($head, $TRAY_ENABLE)
Sleep(3000)
Case $msg = $real
Run("SetDefaultAudioDevice.exe" & " " & $reg[1] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[1] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[1], 5, 1)
TrayItemSetState($hdmi, $TRAY_ENABLE)
TrayItemSetState($real, $TRAY_DISABLE)
TrayItemSetState($head, $TRAY_ENABLE)
Sleep(3000)
EndSelect
If $devs > 2 Then
Select
Case $msg = $head
Run("SetDefaultAudioDevice.exe" & " " & $reg[2] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[2] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[2], 5, 1)
TrayItemSetState($hdmi, $TRAY_ENABLE)
TrayItemSetState($real, $TRAY_ENABLE)
TrayItemSetState($head, $TRAY_DISABLE)
Sleep(3000)
EndSelect
EndIf
Select
Case $msg = $noblase
If $blase = 1 Then
$blase = 0
Else
$blase = 1
TrayTip("", "Traytips werden wieder angezeigt", 5, 1)
EndIf
Case $msg = $exititem
ExitLoop
EndSelect
WEnd
Ich hoffe es ist für euch genauso nützlich wie für mich.
Gruß
Maximus1
UPDATE:
22.03.2012
- Update durchgeführt und die maximale Anzahl auf 4 Geräte erhöht
Die neue und zukünftige versionen könnt ihr auf meiner seite laden.
maxtools... fast alle meine tools