INTERACT FORUM
More => Old Versions => JRiver Media Center 20 for Windows => Topic started by: muzicman0 on February 21, 2015, 09:59:01 am
-
I have created a very basic script in VBS that I am using in Theater view to stop playback after a certain amount of time (I have 3 scripts, 30, 60, and 90 minutes). Used for watching TV at night, so when my wife falls asleep, the TV doesn't run all night.
I would like to add some sort of code to confirm the selection, because as it is, there is no feedback that the timer is actually running...I also would like it to work with a remote (my remote sends left/right cursor commands, so should be fairly easy).
Here is the code I am trying:
x=msgbox("Are you sure you want to stop playback after 30 minutes?" ,vbSystemModal + vbYesNo, "Stop Playback")
if x = vbYes then
Wscript.sleep 1800000
CreateObject("Wscript.Shell").Run "C:\Windows\System32\MC20.exe /MCC 10002"
end if
The problem is, that the msgbox doesn't have focus, so my remote commands are being sent to MC instead of the msgbox...
I was hoping someone here might have a more elegant solution, or perhaps there is a built-in way to do what I want...
For now, I just took out the msgbox, and am living with no feedback, or cancel option, but that is not a good longterm solution.
-
You could use WScript.Shell's Popup command instead of MsgBox. This allows you to set a timeout on the popup so it'll auto-dismiss.
http://ss64.com/vb/popup.html
-
Perfect, thanks...here is what I hope is the final code. It will kill any previous scripts running (as long as they aren't the same time choice - IE: if I had previously chosen a 30 minute timeout, and then choose a 90 minute timeout, then the script for the 90 minutes will kill the 30 minute script):
'Kill any of my scripts already running
Dim strScriptToKill1
Dim strScriptToKill2
strScriptToKill1 = "Stop Jriver_60.vbs"
strScriptToKill2 = "Stop Jriver_90.vbs"
Dim objWMIService, objProcess, colProcess
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcess = objWMIService.ExecQuery ( _
"Select * from Win32_Process " & _
"WHERE (Name = 'cscript.exe' OR Name = 'wscript.exe') " & _
"AND Commandline LIKE '%"& strScriptToKill1 &"%'" _
)
For Each objProcess in colProcess
objProcess.Terminate()
Next
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcess = objWMIService.ExecQuery ( _
"Select * from Win32_Process " & _
"WHERE (Name = 'cscript.exe' OR Name = 'wscript.exe') " & _
"AND Commandline LIKE '%"& strScriptToKill2 &"%'" _
)
For Each objProcess in colProcess
objProcess.Terminate()
Next
'Set the Stop time - with a 10 second timeout
Set objShell = Wscript.CreateObject("Wscript.Shell")
intButton = objShell.Popup("Stop playback in 30 minutes?", 10,"Stop Playback", 20)
if intButton = vbYes or intButton= -1 then
Wscript.sleep 1800000
CreateObject("Wscript.Shell").Run "C:\Windows\System32\MC20.exe /MCC 10002"
end if
I'm sure it could be more efficient, but I haven't done any real programming since VB6 days.
-
oh, and I also built a cancel all script which will kill all 3 choices. It seems to work well.