...есть у меня скриптик на VBS по контролю DLP-проектора, ничего кроме регистрации DynWrapX не нужно. Блокнот, вот и весь IDE

. В скрипте как раз реализован перехват клавиш, отсылка команд в порт, контроль DTR/RTS и речевой синтез. Думаю вполне можно приспособить под вашу задачу:
Код: Выделить всё
' Mitsubishielectric_Projector_EW270U_2.VBS
' Демонстрационный скрипт управления проектором Mitsubishielectric EW270U over RS-232 c голосовым сопровождением
' Поддержка следующих команд: включение-выключение, управление громкостью, переключения кадров и завершения скрипта
' Видео: http://www.youtube.com/watch?v=28PkWiXksl8, http://www.youtube.com/watch?v=9yZGb18nDzM
'
' Разработчик: Бадло Сергей Григорьевич aka raxp
' H-page: http://raxp.radioliga.com
'
' Зависимости:
' · Win OS 32/64-bit
' · COM-сервер DynWrapx.dll
' · SAPI (для озвучивания используется интерфейс по-умолчанию)
' · Физический RS-232 or virtual COM over USB
' · Подключенный проектор Mitsubishielectric моделей EW270U/EW230U-ST/EX240U/ES200U
'
' Региcтрация интерфейсов (обязательно первично однократно):
' · в данном скрипте задайте порт подключения проектора
' · запустите regdynwrapx.bat (на Windows Vista/7/8/8.1 запускать правой кнопкой мыши от имени Администратора)
' Использование:
' · запустите run_Mitsubishielectric_Projector_EW270U_2.cmd
' · для завершения нажмите 'Escape'
' Список команд
cmdon = chr(13)&"*pow=on#"&chr(13) ' активируем проектор 'Space'
cmdoff = chr(13)&"*pow=off#"&chr(13) ' вырубаем проектор 'Space'
cmdup = chr(13)&"*up#"&chr(13) ' 'Up'
cmddown = chr(13)&"*down#"&chr(13) ' 'Down'
cmdleft = chr(13)&"*left#"&chr(13) ' 'Left'
cmdright = chr(13)&"*right#"&chr(13) ' 'Right'
cmdvolup = chr(13)&"*vol=+#"&chr(13) ' громкость больше '+'
cmdvoldown = chr(13)&"*vol=-#"&chr(13) ' громкость меньше '-'
' подключаем голосовое сопровождение
' при надоедливости голоса speakon = false
Dim Speak
speakon = true ' разрешаем голосовое сопровождение
Set Speak = CreateObject("sapi.spvoice")
' регистрируем COM объект DynamicWrapperX в тихом режиме
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("regsvr32.exe dynwrapx.dll /s"),3, true
' создаем объект DynamicWrapperX
Set Wrap = CreateObject("DynamicWrapperX.2")
Wrap.Register "user32.dll", "GetAsyncKeyState", "i=l", "f=s", "r=l"
' Настройка порта COM6, на котором проектор
port = "COM6"
' регистрируем функи для работы с портом
Wrap.Register "KERNEL32.DLL", "CreateFile", "i=sllllll", "r=l"
Wrap.Register "KERNEL32.DLL", "WriteFile", "i=lslll", "r=l" ' ANSI
' вариант с Unicode - Wrap.Register "KERNEL32.DLL", "WriteFile", "i=lllll", "r=l"
Wrap.Register "KERNEL32.DLL", "CloseHandle", "i=l", "r=l"
Wrap.Register "KERNEL32.DLL", "EscapeCommFunction", "i=hu", "r=l"
' забиваем аттрибуты
GENERIC_WRITE = 1073741824
FILE_SHARE_READ = 1
FILE_SHARE_WRITE = 2
OPEN_EXISTING = 3
FILE_ATTRIBUTE_NORMAL = 128
cbWritten = " "
pcbWritten = Wrap.StrPtr(cbWritten)
' открываем нужный нам порт COMn
hFile = Wrap.CreateFile(port, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
' отключаем сигналы на DTR/RTS
Wrap.EscapeCommFunction hFile, 4
Wrap.EscapeCommFunction hFile, 6
' Информируем пользователя о начале работы
if (speakon = true) then
Speak.Speak "Готов измываться над проектором."
End if
p = true
' запускаем бесконечный цикл по условию нажатия 'Escape' с задержкой
Do While Wrap.GetAsyncKeyState(27) = "0"
'задержка на кол-во миллисекунд
WScript.Sleep 500
' отлавливаем нажатие SPace (пробела)
probel = Wrap.GetAsyncKeyState(32)
' отлавливаем нажатие Up
upt = Wrap.GetAsyncKeyState(38)
' отлавливаем нажатие Down
downt = Wrap.GetAsyncKeyState(40)
' отлавливаем нажатие Left
leftt = Wrap.GetAsyncKeyState(37)
' отлавливаем нажатие Right
rightt = Wrap.GetAsyncKeyState(39)
' отлавливаем нажатие Add (+) key
plus = Wrap.GetAsyncKeyState(187)
' отлавливаем нажатие SUBTRACT (-) key
minus = Wrap.GetAsyncKeyState(189)
if (probel = "1") then
p = not p
if (p = false) then
' активируем проектор
Wrap.WriteFile hFile, cmdon, Len(cmdon), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Проектор включен."
End if
End if
if (p = true) then
' вырубаем проектор
Wrap.WriteFile hFile, cmdoff, Len(cmdoff), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Проектор выключен."
End if
End if
End if
if (upt = "1") then
' посылаем
Wrap.WriteFile hFile, cmdup, Len(cmdup), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Вверх."
End if
End if
if (downt = "1") then
' посылаем
Wrap.WriteFile hFile, cmddown, Len(cmddown), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Вниз."
End if
End if
if (leftt = "1") then
' посылаем
Wrap.WriteFile hFile, cmdleft, Len(cmdleft), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Влево."
End if
End if
if (rightt = "1") then
' посылаем
Wrap.WriteFile hFile, cmdright, Len(cmdright), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Вправо."
End if
End if
if (plus = "1") then
' посылаем
Wrap.WriteFile hFile, cmdvolup, Len(cmdvolup), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Громкость больше."
End if
End if
if (minus = "1") then
' посылаем
Wrap.WriteFile hFile, cmdvoldown, Len(cmdvoldown), pcbWritten, 0
' озвучиваем
if (speakon = true) then
Speak.Speak "Громкость меньше."
End if
End if
Loop ' завершение цикла
' закрываем порт
Wrap.CloseHandle(hFile)
' озвучиваем
if (speakon = true) then
Speak.Speak "Программа завершена."
End if
Начиная с семерок запуск из под админа командным скриптом (cmd):
Код: Выделить всё
@echo off
Set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "xOS=x32"
echo System is %xOS%
echo.
if "%xOS%"=="x64" start "" "%windir%\syswow64\wscript.exe" "%~dp0Mitsubishielectric_Projector_EW270U_2.vbs"
if "%xOS%"=="x32" start "" "%windir%\system32\wscript.exe" "%~dp0Mitsubishielectric_Projector_EW270U_2.vbs"
Единственно чего нет, выбора куда воспроизводить аудио, но подозреваю, что это некритично. Если не нужен речевой синтез, а нужно воспроизводить именно аудиофайлы, то так:
Код: Выделить всё
Set wavv = CreateObject("SAPI.SpVoice")
set sap = CreateObject("SAPI.SpFileStream")
sap.Open "katalog\my1.wav"
wavv.SpeakStream sap
sap.Close
\
зы: да, сам скрипт регистрации:
Код: Выделить всё
@echo off
echo This script must be run with Admin Privilegies
echo.
:: Checking system version
Set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "xOS=x32"
echo System is %xOS%
echo.
:: Unregistering old DynwrapX library ver 1.0
regsvr32 /u /s "%windir%\system32\dynwrapx.dll"
if "%xOS%"=="x64" call :Reg_x64
if "%xOS%"=="x32" call :Reg_x32
echo.
pause
exit /B
:Reg_x32
echo Registering x32 library
copy /y "%~dp0dynwrapx\32\dynwrapx.dll" "%windir%\System32\*"
regsvr32 /s "%windir%\System32\dynwrapx.dll"
if %errorlevel%==0 (echo Registration - OK.) else (echo Registration - FAILED !!! Code: %errorlevel%)
Exit /B
:Reg_x64
echo Registering x32 library
copy /y "%~dp0dynwrapx\32\dynwrapx.dll" "%windir%\SysWOW64\*"
regsvr32 /s "%windir%\SysWOW64\dynwrapx.dll"
if %errorlevel%==0 (echo Registration - OK.) else (echo Registration - FAILED !!! Code: %errorlevel%)
echo.
echo Registering x64 library
copy /y "%~dp0dynwrapx\64\dynwrapx.dll" "%windir%\System32\*"
regsvr32 /s "%windir%\System32\dynwrapx.dll"
if %errorlevel%==0 (echo Registration - OK.) else (echo Registration - FAILED !!! Code: %errorlevel%)
Exit /B