- Registriert
- 25.01.10
- Beiträge
- 1.386
Hi,
ich verwende von Zeit zu Zeit ein Bluetooth-Headset zum Telefonieren mit Skype am Mac.
Nervig ist, dass man jedes Mal in Skype explizit die Einstellungen ändern gehen muss, wenn das Headset verfügbar oder eben nicht verfügbar ist, denn wenn das Headset in den SkypePrefs eingestellt ist, jedoch nicht verfügbar, dann spielt Skype erstmal eine Weile Beachball bevor es eine Meldung bringt. Hat man es dann angeschlossen, muss man es dann wieder ändern.... etc.
Deshalb ist dieses Skript entstanden. Es nützt einfaches GUI-Scripting mit AS, um die entsprechenden Einstellungen automatisiert zu ändern.
Was es nicht macht (kommt vielleicht noch... mal gucken), ist selbständig erkennen, ob das Headset angeschlossen ist.
Es erspart einfach nur Klickerei, mehr nicht.
Getestet ist es mit Skype 2.8. Skype 5 für Mac ist mir zuwider.
Ich dachte ich poste es mal hier. Vielleicht kann es jemand gebrauchen - und sei es nur des GUI-Scriptings wegen.
Hier ist das Script. Bitte zum Verwenden auch die Anmerkungen unten lesen.
Damit es funktioniert, muss man die properties outputDevs, inputDevs, ringDevs und skypeToolBarButtonAudio erst anpassen. Dafür öffnet man die Skype Preferences (z.B. mit CMD+,) und schaut mal, wie die Built-ins und das Bluetooth-Headset heißt:

Die entsprechenden Werte dann bei den entsprechenden Properties eintragen.
Übrigens: Ich habe bei ringDevs bei mir sowohl bei builtin als auch bei bluetooth den Built-in Namen eingetragen, weil ich möchte, dass Skype immer auf den Mac-Lautsprechern bimmelt, egal ob das Headset verfügbar ist oder nicht.
Wie man das Script ausführt, steht im Script selbst (ganz oben).
Um es jetzt nicht ständig aus dem Terminal starten zu müssen, kann man einen shortcut manager verwenden (Keyboard Maestro ($), Quikeys ($), Spark, Quicksilver und was es da sonst so gibt) oder in Snowleo auch die Services.
Ich verwende Keyboard Maestro. Da habe ich es so eingerichtet:
1.
2.

3.
Dadurch, dass beide Aktionen den selben Shortcut haben, bekomme ich von Keyboard Maestro dieses Auswahlfenster.
Mit den Services in Snow Leopard könnte man es so einrichten:

Allerdings müsste man sich dann zwei Services bauen (eigentlich wie in Keyboard Maestro, da sind es auch zwei, siehe Screenshots) und diese mit verschiedenen Tastenkombinationen triggern. Die Tastenkombinationen stellt man in den Keyboardeinstellungen ein.
Das Script nutzt GUI-Scripting, also müssen ...uhm... der Access von Assistive Devices (sorry, ich schalte jetzt nicht auf Dt. um, um rauszufinden, wie das in Dt. heißt) eingeschaltet sein.
=> 
Ich hoffe, dass das Script nicht nur mir was nützt.
Danke für die Aufmerksamkeit.
ich verwende von Zeit zu Zeit ein Bluetooth-Headset zum Telefonieren mit Skype am Mac.
Nervig ist, dass man jedes Mal in Skype explizit die Einstellungen ändern gehen muss, wenn das Headset verfügbar oder eben nicht verfügbar ist, denn wenn das Headset in den SkypePrefs eingestellt ist, jedoch nicht verfügbar, dann spielt Skype erstmal eine Weile Beachball bevor es eine Meldung bringt. Hat man es dann angeschlossen, muss man es dann wieder ändern.... etc.
Deshalb ist dieses Skript entstanden. Es nützt einfaches GUI-Scripting mit AS, um die entsprechenden Einstellungen automatisiert zu ändern.
Was es nicht macht (kommt vielleicht noch... mal gucken), ist selbständig erkennen, ob das Headset angeschlossen ist.
Es erspart einfach nur Klickerei, mehr nicht.
Getestet ist es mit Skype 2.8. Skype 5 für Mac ist mir zuwider.
Ich dachte ich poste es mal hier. Vielleicht kann es jemand gebrauchen - und sei es nur des GUI-Scriptings wegen.
Hier ist das Script. Bitte zum Verwenden auch die Anmerkungen unten lesen.
Code:
(*
run this script from terminal using
osascript /path/to/script/script.scpt [argv]
to activate bluetooth device, use "bt", "BT" or "bluetooth" as argv
to switch device use "switch" or "sw"
this will switch to ALL devices buildin if any of the input or output settings is set to a bluetoor device and vice versa
any other or none passed argument will activate the built in devices
*)
--check skype preferences for the right names of the devices
--output device names
property outputDevs : {builtin:"Built-in Output Headphones", bluetooth:"Sennheiser MM450"}
--input device names
property inputDevs : {builtin:"Built-in Microphone Internal microphone", bluetooth:"Sennheiser MM450"}
--ringing device names
property ringDevs : {builtin:"Built-in Output Headphones", bluetooth:"Built-in Output Headphones"}
--name of gui elements of skype
--property skypeMenuItemPreferences : "Preferences..." --not needed, using cmd+, instead
property skypeToolBarButtonAudio : "Audio"
--name of skype preferences plist in ~/Library/Preferences (used for getting which devices are currently used to be able to switch)
property skypePrefsPlist : "com.skype.skype.plist"
on run argv
set argv to argv as string
set useBT to false
set switchDevs to false
if argv contains "bluetooth" or argv contains "bt" or argv contains "BT" then
set useBT to true
else if argv contains "sw" or argv contains "switch" then
set switchDevs to true
end if
if switchDevs then
set useBT to not checkSkypeUsingBTDevs()
end if
if useBT then
set outputDev to bluetooth of outputDevs
set inputDev to bluetooth of inputDevs
set ringDev to bluetooth of ringDevs
else
set outputDev to builtin of outputDevs
set inputDev to builtin of inputDevs
set ringDev to builtin of ringDevs
end if
changeSykpeAudioSettings(outputDev, inputDev, ringDev)
--set msg to "Set Skype output device to " & outputDev & return & "Set Skype input device to " & inputDev & return & "Set Skype ring device to " & ringDev
set msg to "Set Skype output device to " & outputDev & "\nSet Skype input device to " & inputDev & "\nSet Skype ring device to " & ringDev
return msg
end run
to checkSkypeUsingBTDevs()
set usingBtOut to (do shell script "defaults read '" & POSIX path of (path to preferences folder) & "com.skype.skype' SKAudioInputDeviceUID | grep -q IOBluetoothSCOAudioEngine && echo true || echo false") as boolean
set usingBtIn to (do shell script "defaults read '" & POSIX path of (path to preferences folder) & "com.skype.skype' SKAudioInputDeviceUID | grep -q IOBluetoothSCOAudioEngine && echo true || echo false") as boolean
set usingBtRing to (do shell script "defaults read '" & POSIX path of (path to preferences folder) & "com.skype.skype' SKAudioRingerDeviceUID | grep -q IOBluetoothSCOAudioEngine && echo true || echo false") as boolean
if usingBtOut or usingBtIn or usingBtRing then
return true
else
return false
end if
end checkSkypeUsingBTDevs
to changeSykpeAudioSettings(outputDev, inputDev, ringDev)
tell application "System Events"
--if skype is not running, won't launch it. exit instead
set skypeRunning to (exists (some process whose bundle identifier is "com.skype.skype"))
if not skypeRunning then
log "skype is not running. exiting"
return false
end if
set skypeProc to some process whose bundle identifier is "com.skype.skype"
set frontmost of skypeProc to true --bring skype to front
tell skypeProc
--if the preferences windows isn't open and frontmost, an error will occur. so use a loop and try
repeat 10 times
try
keystroke "," using {command down} --open preferences
set skypePrefs to first window of it
tell skypePrefs
tell first tool bar to click button skypeToolBarButtonAudio --go to audio prefs of skype
--get the pop up buttons
tell first group of first group of it
set skypeOutputPopUpButton to first pop up button of it
set skypeInputPopUpButton to second pop up button of it
set skypeRingingPopUpButton to third pop up button of it
end tell
--set audio source
tell skypeOutputPopUpButton
click it
tell first menu of it
repeat with aMenuItem in (every menu item of it)
tell aMenuItem
if (its name) contains outputDev then
click it
exit repeat
end if
end tell
end repeat
end tell
end tell
--set input source
tell skypeInputPopUpButton
click it
tell first menu of it
repeat with aMenuItem in (every menu item of it)
tell aMenuItem
if (its name) contains inputDev then
click it
exit repeat
end if
end tell
end repeat
end tell
end tell
--set ringing device
tell skypeRingingPopUpButton
click it
tell first menu of it
repeat with aMenuItem in (every menu item of it)
tell aMenuItem
if (its name) contains ringDev then
click it
exit repeat
end if
end tell
end repeat
end tell
end tell
--close preferences window
click first button of it --first button is the x
exit repeat
end tell
exit repeat
on error
--errorhandler
end try
end repeat
end tell
end tell
end changeSykpeAudioSettings
Damit es funktioniert, muss man die properties outputDevs, inputDevs, ringDevs und skypeToolBarButtonAudio erst anpassen. Dafür öffnet man die Skype Preferences (z.B. mit CMD+,) und schaut mal, wie die Built-ins und das Bluetooth-Headset heißt:

Die entsprechenden Werte dann bei den entsprechenden Properties eintragen.
Übrigens: Ich habe bei ringDevs bei mir sowohl bei builtin als auch bei bluetooth den Built-in Namen eingetragen, weil ich möchte, dass Skype immer auf den Mac-Lautsprechern bimmelt, egal ob das Headset verfügbar ist oder nicht.
Wie man das Script ausführt, steht im Script selbst (ganz oben).
Um es jetzt nicht ständig aus dem Terminal starten zu müssen, kann man einen shortcut manager verwenden (Keyboard Maestro ($), Quikeys ($), Spark, Quicksilver und was es da sonst so gibt) oder in Snowleo auch die Services.
Ich verwende Keyboard Maestro. Da habe ich es so eingerichtet:
1.

2.


3.

Dadurch, dass beide Aktionen den selben Shortcut haben, bekomme ich von Keyboard Maestro dieses Auswahlfenster.
Mit den Services in Snow Leopard könnte man es so einrichten:

Allerdings müsste man sich dann zwei Services bauen (eigentlich wie in Keyboard Maestro, da sind es auch zwei, siehe Screenshots) und diese mit verschiedenen Tastenkombinationen triggern. Die Tastenkombinationen stellt man in den Keyboardeinstellungen ein.
Das Script nutzt GUI-Scripting, also müssen ...uhm... der Access von Assistive Devices (sorry, ich schalte jetzt nicht auf Dt. um, um rauszufinden, wie das in Dt. heißt) eingeschaltet sein.


Ich hoffe, dass das Script nicht nur mir was nützt.
Danke für die Aufmerksamkeit.

Zuletzt bearbeitet: