Показать полную графическую версию : Воспроизвести wav файл на удаленном компьютере
Привет всем! Имеется необходимость воспроизвести Wav-файл на удаленной машине. В статье "7 способов выполнить команду на удалённом компьютере" есть такой код :
Computer = "PC3"
Command = "cmd.exe /c systeminfo.exe > \\server\share\%computername%.txt"
Set objWMIService = GetObject ("winmgmts:\\" & Computer & "\root\cimv2:Win32_Process")
Result = objWMIService.Create ("calc.exe", Null, Null, intProcessID)
Что изменить в нем для выполнения моей задачи?
objWMIService.Create "sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav""", Null, Null, intProcessID
Апппп... А тогда что именно заменить?
Последнюю строку из приведённого Вами кода.
Еще пара уточнений - во второй строке server - имя или IP-адрес компьютера, Share - расшаренная папка, a %computername%.txt - что такое? - файл со списком компьютеров?
И как я понимаю, на удаленном компьютере обязательно должна быть расшаренная папка с правами на запись фалов?
cambit, для воспроизведения вторая строка Вам совершенно не нужна. Она собирает информацию об удалённом компьютере в файл на разделённом ресурсе.
Для простого воспроизведения достаточно:
WScript.CreateObject("WbemScripting.SWbemLocator"). _
ConnectServer("PC3", "root\cimv2"). _
Get("Win32_Process").Create _
"sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav"""
наличия на удалённой машине файлов «sndrec32.exe» — в PATH и «Notify.wav» — по указанному пути.
Спасибо, все работает! А если учетная запись на удаленном компьютере отличается от локального - можно ее указать отдельно (пусть даже и в открытом виде)?
Да, можно:
WScript.CreateObject("WbemScripting.SWbemLocator"). _
ConnectServer("PC3", "root\cimv2", "UserAccount", "Password"). _
Get("Win32_Process").Create _
"sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav"""
Спасибо огромное, но задача походу усложняется - на время проигрывания файла нужно включить реле - т.е. например в какой нибудь разряд LPT порта записать 1. а после окончания воспроизведения записать туда 0. Походу нужно выполнить на удаленной машине другой скрипт...
cambit, эта задача явно не для скрипта.
P.S. Для начала: Проект PCPORTS (http://www.kernelchip.ru/pcports.php).
Эт я знаю - эту задачу (включение реле) выполнит другая программа, а вот ее запустить на удаленной машине нужно из скрипта. Т.е. делим задачу на 2 части :
1-я - запустить скрипт Sound.vbs на удаленной машине.
2-я - скрипт Sound.vbs сначала запускает прогу Port_on.exe, затем проигрывает файл.wav, после окончания воспроизведения закрывает прогу Port_on.exe
cambit, покажите, что из себя представляет «Port_on.exe».
Во-во! Как раз попробую сделать на основе http://www.kernelchip.ru/pcports.php
Мож прям оттуда запустить sndrec32?
Мож прям оттуда запустить sndrec32? »
Можно и так. А можно и напрямую воспроизводить, не через запуск внешнего приложения. Только для скриптов целая куча способов: VBScript: проигрывание audio-файлов — Серый форум (http://forum.script-coding.com/viewtopic.php?id=1008), VBScript: воспроизведение аудио — Серый форум (http://forum.script-coding.com/viewtopic.php?id=1031), а уж для больших ЯВУ явно будет поболе.
Так и "sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav""" оттуда-же.
Ну тогда конечно лучше так:
1. Запустить приложение, устанавливающее "1" на какой-либо вывод LPT.
2. Воспроизвести файл.
3. Запустить приложение, устанавливающее "0" на тот же вывод LPT.
Так и
"sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav"""
оттуда-же. »
«Есссстессственно» ;).
Ну тогда конечно лучше так: »
Так у Вас есть уже приложение «устанавливающее … на какой-либо вывод LPT»? И насчёт «лучше» — не уверен. Метод «.Create()» класса «Win32_Process» не ожидает завершения приложения, посему несколько усложнится задача отслеживания его (приложения) завершения.
Вопрос с портом отпал, и решился очень оригинальным способом - коммутацией выходов звуковой карты путем внесения изменений в реестр. Т.о. в указанный выше код нужно добавить выполнение двух рег-файлов -до и после воспроизведения и, раз невозможно отследить окончание воспроизведения, паузу в несколько секунд (подберу точно позже).
двух рег-файлов »
Покажите их оба.
От, бл.. , тут опять проблема... Суть решения проблемы была в переключении режима работы динамиков с стерео на квадрофонические (т.е. - шнур со входа усилителя втыкаем в синий выход звуковой карты и при нормальном воспроизведении аудиофайла синий вход является линейным входом и на усилитель звук, естественно, не идет, когда же файл воспроизводится удаленно - программа должна была переключить динамики в квадрофонический режим, и синий разъем звуковой карты становится выходом тыловых динамиков и звук идет на усилитель. Но как оказалось такой финт проходит только с Windows Media Player, т.к. он дублирует сигнал с фронтальных колонок на тыловые, а ни sndrec32 ни MPLAY32 этого не делают и транслируют звук только на основные - фронтальные динамики, а Windows Media Player в скрытом режиме не работает по-моему...
Попробуйте на нём локально этот (http://forum.script-coding.com/viewtopic.php?pid=7802#p7802) и следующий за ним пример.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.