Что нового

Переключение звуковых схем в ХР

Naisho

Знающий
Сообщения
86
Репутация
12
Как можно переключать звуковые схемы в винХР? Основная идея - уйти от "мыше-кликовой" схемы. Соответственно надо узнать какая тема установлена, переключиться на беззвучную, а потом обратно.
 

Mur

Осваивающий
Сообщения
132
Репутация
32
Код:
HKEY_CURRENT_USER\AppEvents\Schemes
здесь хранятся звуковые схемы.
Проверяя и выводя полученный результат, вы узнаете какая схема сейчас в ходу.
Правя соответственным образом значения ключей, можно добиться того, о чём вы собственно и подняли вопрос. (=


Дополнительная информация.
HKEY_CURRENT_USER\AppEvents\EventLabels - названия разделов являются (системными) названиями событий, а их параметры (По умолчанию) - названиями событий, отображаемыми в окне Звук на Панели управления) для приложения.
Раздел HKEY_CURRENT_USER\AppEvents\Schemes\Names содержит список звуковых схем. Где:
- Имена разделов соответствуют именам подразделов в разделе события.
- Значения параметров (По умолчанию) содержат имена схем, отображаемые в окне Звук на Панели управления.
Подразделы разделов событий содержат звуковые схемы:
- Имена разделов соответствуют именам подразделов раздела HKEY_CURRENT_USER\AppEvents\Schemes\Names.
- Значения параметров (По умолчанию) содержат путь к звуковым файлам для схемы соответствующей имени родительского раздела.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Naisho
http://autoit-script.ru/index.php/topic,4133.msg30377.html#msg30377
 
Автор
N

Naisho

Знающий
Сообщения
86
Репутация
12
Родил нечто :
Код:
$soundScheme_Default = "Windows Default"
$soundScheme_None ="No Sounds"




Func _SoundSchemeSwitch($soundScheme_Wanted)
	Local $i, $j, $subKEY_1, $subKEY_2, $value, $OSKey
	Switch @OSArch
		Case "X64"
			$OSKey = "64"
		Case "X86"
			$OSKey = ""
	EndSwitch
	Switch $soundScheme_Wanted
		Case "Windows Default"
			RegWrite("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes", '', "REG_SZ", '.default')
			$i = 0
			Do
				$i += 1
				$subKEY_1 = RegEnumKey("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps", $i)
				If @error <> 0 Then ExitLoop
				$j = 0
				Do
					$j += 1
					$$subKEY_2 = RegEnumKey("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps\" & $subKEY_1, $j)
					If @error <> 0 Then ExitLoop
					$value = RegRead ("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps\" & $subKEY_1 & "\" & $subKEY_2 & "\.Default", '')
					RegWrite("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps\" & $subKEY_1 & "\" & $subKEY_2 & "\.Current", '', @extended, $value)
				Until 1
			Until 1
		Case "No Sounds"
			RegWrite("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes", '', "REG_SZ", '.none')
			$i = 0
			Do
				$i += 1
				$subKEY_1 = RegEnumKey("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps", $i)
				If @error <> 0 Then ExitLoop
				$j = 0
				Do
					$j += 1
					$$subKEY_2 = RegEnumKey("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps\" & $subKEY_1, $j)
					If @error <> 0 Then ExitLoop
					RegWrite("HKEY_CURRENT_USER" & $OSKey & "\AppEvents\Schemes\Apps\" & $subKEY_1 & "\" & $subKEY_2 & "\.Current", '', "REG_SZ", '')
				Until 1
			Until 1
	EndSwitch
EndFunc


Однако как обращаться с REG_EXPAND_SZ не понял, поэтому просто копирую.
Кстати - пользовательская функция "_RegWrite" раздела "_RegFunc" доставила головной боли

Код:
[HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default\.Current]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
  77,00,73,00,20,00,58,00,50,00,20,00,44,00,69,00,6e,00,67,00,2e,00,77,00,61,\
  00,76,00,00,00

[HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default\.Default]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
  77,00,73,00,20,00,58,00,50,00,20,00,44,00,69,00,6e,00,67,00,2e,00,77,00,61,\
  00,76,00,00,00
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Naisho [?]
Однако как обращаться с REG_EXPAND_SZ не понял,
Тип REG_EXPAND_SZ содержит переменные типа %name%, которые должны быть развёрнуты на стороне приложения.
 
Верх