Сергей Красиков
05-04-2020, 12:22
Добрый день, помогите дописать код будильника.
В скрипте реализован запуск аудиофайла с последовательной регулировкой в цикле громкости системы через 50 сек. (сброс до нуля) и через следующие 10 сек. (увеличение). И так до завершения воспроизведения трека. Появилась необходимость прописать сброс контекстных меню, которые я сам вызываю ПКМ, когда он (этот чёртов будильник) будит меня ( :) ), т.к. при их наличии микшер активируется, но громкость не регулируется.
Что найдено на данный момент. Решено пойти по пути сброса всех окон или выполнить нажатие ЛКМ, таким образом убрать вызванное меню. Насколько я понял, язык VBS сам не умеет эмулировать клик по кнопкам мыши, поэтому было найдено решение применить приложение Excel через объект и использовать его в попытке переместить курсор в нужное место и там кликнуть по ЛКМ, тем самым решить проблему. Но вот беда, в первой части повторения в цикле микшер успешно понижает громкость, а после эмуляции клика, микшер вызывается, но не активируется.
Вот проблемный кусок кода (полный скрипт прикреплю в файле):
Set obj_sh = CreateObject("WScript.Shell")
pause = 100
wmp_vol = 70
WScript.Sleep pause
With obj_sh
For iter_cycl = 1 to 1
WScript.Sleep 5000
Set volmix = .Exec("%SystemRoot%\System32\SndVol.exe")
.AppActivate "Volume Mixer"
WScript.Sleep pause
For vol_cycl = 1 to iter_cycl + 1
.SendKeys "{PGDN}"
Next
WScript.Sleep pause
volmix.Terminate
Set volmix = Nothing
WScript.Sleep 1000
'------------------------
Set object = CreateObject("shell.application")
object.MinimizeAll
Set object = Nothing
On Error Resume Next
Set excel = WScript.CreateObject("Excel.Application")
x = "0"
y = "0"
excel.ExecuteExcel4Macro ("CALL(""user32"",""SetCursorPos"",""JJJ""," & x & "," & y & ")")
excel.ExecuteExcel4Macro ("CALL(""User32"",""mouse_event"",""JJJJJJ""," & "2" & ")")
WScript.Sleep pause
excel.ExecuteExcel4Macro ("CALL(""User32"",""mouse_event"",""JJJJJJ""," & "4" & ")")
WScript.Sleep pause
Set excel = Nothing
On Error GoTo 0
'--------------------------
Set volmix = .Exec("%SystemRoot%\System32\SndVol.exe")
.AppActivate "Volume Mixer"
WScript.Sleep pause
For vol_cycl = 1 to iter_cycl + 1
.SendKeys "{PGUP}"
Next
WScript.Sleep pause
volmix.Terminate
Set volmix = Nothing
Next
End With
Set obj_sh = Nothing
А может имеется более лаконичное решение? Спасибо.
В скрипте реализован запуск аудиофайла с последовательной регулировкой в цикле громкости системы через 50 сек. (сброс до нуля) и через следующие 10 сек. (увеличение). И так до завершения воспроизведения трека. Появилась необходимость прописать сброс контекстных меню, которые я сам вызываю ПКМ, когда он (этот чёртов будильник) будит меня ( :) ), т.к. при их наличии микшер активируется, но громкость не регулируется.
Что найдено на данный момент. Решено пойти по пути сброса всех окон или выполнить нажатие ЛКМ, таким образом убрать вызванное меню. Насколько я понял, язык VBS сам не умеет эмулировать клик по кнопкам мыши, поэтому было найдено решение применить приложение Excel через объект и использовать его в попытке переместить курсор в нужное место и там кликнуть по ЛКМ, тем самым решить проблему. Но вот беда, в первой части повторения в цикле микшер успешно понижает громкость, а после эмуляции клика, микшер вызывается, но не активируется.
Вот проблемный кусок кода (полный скрипт прикреплю в файле):
Set obj_sh = CreateObject("WScript.Shell")
pause = 100
wmp_vol = 70
WScript.Sleep pause
With obj_sh
For iter_cycl = 1 to 1
WScript.Sleep 5000
Set volmix = .Exec("%SystemRoot%\System32\SndVol.exe")
.AppActivate "Volume Mixer"
WScript.Sleep pause
For vol_cycl = 1 to iter_cycl + 1
.SendKeys "{PGDN}"
Next
WScript.Sleep pause
volmix.Terminate
Set volmix = Nothing
WScript.Sleep 1000
'------------------------
Set object = CreateObject("shell.application")
object.MinimizeAll
Set object = Nothing
On Error Resume Next
Set excel = WScript.CreateObject("Excel.Application")
x = "0"
y = "0"
excel.ExecuteExcel4Macro ("CALL(""user32"",""SetCursorPos"",""JJJ""," & x & "," & y & ")")
excel.ExecuteExcel4Macro ("CALL(""User32"",""mouse_event"",""JJJJJJ""," & "2" & ")")
WScript.Sleep pause
excel.ExecuteExcel4Macro ("CALL(""User32"",""mouse_event"",""JJJJJJ""," & "4" & ")")
WScript.Sleep pause
Set excel = Nothing
On Error GoTo 0
'--------------------------
Set volmix = .Exec("%SystemRoot%\System32\SndVol.exe")
.AppActivate "Volume Mixer"
WScript.Sleep pause
For vol_cycl = 1 to iter_cycl + 1
.SendKeys "{PGUP}"
Next
WScript.Sleep pause
volmix.Terminate
Set volmix = Nothing
Next
End With
Set obj_sh = Nothing
А может имеется более лаконичное решение? Спасибо.