Войти

Показать полную графическую версию : Воспроизвести wav файл на удаленном компьютере


Страниц : [1] 2

cambit
26-08-2014, 13:12
Привет всем! Имеется необходимость воспроизвести 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)
Что изменить в нем для выполнения моей задачи?

Iska
26-08-2014, 15:05
objWMIService.Create "sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav""", Null, Null, intProcessID

cambit
26-08-2014, 16:48
Апппп... А тогда что именно заменить?

Iska
26-08-2014, 17:40
Последнюю строку из приведённого Вами кода.

cambit
26-08-2014, 18:47
Еще пара уточнений - во второй строке server - имя или IP-адрес компьютера, Share - расшаренная папка, a %computername%.txt - что такое? - файл со списком компьютеров?
И как я понимаю, на удаленном компьютере обязательно должна быть расшаренная папка с правами на запись фалов?

Iska
26-08-2014, 19:02
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» — по указанному пути.

cambit
26-08-2014, 20:15
Спасибо, все работает! А если учетная запись на удаленном компьютере отличается от локального - можно ее указать отдельно (пусть даже и в открытом виде)?

Iska
26-08-2014, 21:23
Да, можно:
WScript.CreateObject("WbemScripting.SWbemLocator"). _
ConnectServer("PC3", "root\cimv2", "UserAccount", "Password"). _
Get("Win32_Process").Create _
"sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav"""

cambit
26-08-2014, 21:45
Спасибо огромное, но задача походу усложняется - на время проигрывания файла нужно включить реле - т.е. например в какой нибудь разряд LPT порта записать 1. а после окончания воспроизведения записать туда 0. Походу нужно выполнить на удаленной машине другой скрипт...

Iska
26-08-2014, 22:55
cambit, эта задача явно не для скрипта.

P.S. Для начала: Проект PCPORTS (http://www.kernelchip.ru/pcports.php).

cambit
26-08-2014, 23:08
Эт я знаю - эту задачу (включение реле) выполнит другая программа, а вот ее запустить на удаленной машине нужно из скрипта. Т.е. делим задачу на 2 части :
1-я - запустить скрипт Sound.vbs на удаленной машине.
2-я - скрипт Sound.vbs сначала запускает прогу Port_on.exe, затем проигрывает файл.wav, после окончания воспроизведения закрывает прогу Port_on.exe

Iska
26-08-2014, 23:15
cambit, покажите, что из себя представляет «Port_on.exe».

cambit
26-08-2014, 23:21
Во-во! Как раз попробую сделать на основе http://www.kernelchip.ru/pcports.php
Мож прям оттуда запустить sndrec32?

Iska
26-08-2014, 23:41
Мож прям оттуда запустить sndrec32? »
Можно и так. А можно и напрямую воспроизводить, не через запуск внешнего приложения. Только для скриптов целая куча способов: VBScript: проигрывание audio-файлов — Серый форум (http://forum.script-coding.com/viewtopic.php?id=1008), VBScript: воспроизведение аудио — Серый форум (http://forum.script-coding.com/viewtopic.php?id=1031), а уж для больших ЯВУ явно будет поболе.

cambit
26-08-2014, 23:59
Так и "sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav""" оттуда-же.

Ну тогда конечно лучше так:
1. Запустить приложение, устанавливающее "1" на какой-либо вывод LPT.
2. Воспроизвести файл.
3. Запустить приложение, устанавливающее "0" на тот же вывод LPT.

Iska
27-08-2014, 00:08
Так и
"sndrec32.exe /embedding /play /close ""C:\Windows\Media\Notify.wav"""
оттуда-же. »
«Есссстессственно» ;).

Ну тогда конечно лучше так: »
Так у Вас есть уже приложение «устанавливающее … на какой-либо вывод LPT»? И насчёт «лучше» — не уверен. Метод «.Create()» класса «Win32_Process» не ожидает завершения приложения, посему несколько усложнится задача отслеживания его (приложения) завершения.

cambit
30-08-2014, 10:01
Вопрос с портом отпал, и решился очень оригинальным способом - коммутацией выходов звуковой карты путем внесения изменений в реестр. Т.о. в указанный выше код нужно добавить выполнение двух рег-файлов -до и после воспроизведения и, раз невозможно отследить окончание воспроизведения, паузу в несколько секунд (подберу точно позже).

Iska
30-08-2014, 10:41
двух рег-файлов »
Покажите их оба.

cambit
01-09-2014, 21:12
От, бл.. , тут опять проблема... Суть решения проблемы была в переключении режима работы динамиков с стерео на квадрофонические (т.е. - шнур со входа усилителя втыкаем в синий выход звуковой карты и при нормальном воспроизведении аудиофайла синий вход является линейным входом и на усилитель звук, естественно, не идет, когда же файл воспроизводится удаленно - программа должна была переключить динамики в квадрофонический режим, и синий разъем звуковой карты становится выходом тыловых динамиков и звук идет на усилитель. Но как оказалось такой финт проходит только с Windows Media Player, т.к. он дублирует сигнал с фронтальных колонок на тыловые, а ни sndrec32 ни MPLAY32 этого не делают и транслируют звук только на основные - фронтальные динамики, а Windows Media Player в скрытом режиме не работает по-моему...

Iska
01-09-2014, 21:32
Попробуйте на нём локально этот (http://forum.script-coding.com/viewtopic.php?pid=7802#p7802) и следующий за ним пример.




© OSzone.net 2001-2012