computergroove Posted June 4, 2008 Share Posted June 4, 2008 (edited) I have made a script that does 2 things: 1. When I start the program it brings up a window that asks for a user input. When the user enters some input (scans a barcode in a hand scanner) the script identifies the movie associated with that barcode and plays it on the screen. 2. When the video is done playing the user input screen becomes the active screen again so a user can scan another barcode to play a video. The customer has requested that after 20 seconds of inactivity the program start playing all the video files in random order. I have made a lot of progress on this. One of the problems I am having is that while the movie files are playing in random mode, I cannot make the user input field active without causing the video to exit full screen mode. I want the ability to accept user input at anytime and if a movie is playing I want the script to immediately start playing the new user video request. Here's my code so far: expandcollapse popup#Region;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_outfile=Barcode.exe #EndRegion;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstants.au3> #include <string.au3> #Include <File.au3> #Include <Array.au3> Global $Paused Global $file Global $AviList = _FileListToArray(@ScriptDir,"*.wmv") Global $time = 10;sec $timer = TimerInit() HotKeySet("{PAUSE}", "TogglePause") HotKeySet("{ESC}", "Terminate") $Form1 = GUICreate("Scan Barcode", 150, 22, 1, 1); creats a GUI window (Width, Height, Left, Top,) $edit_field = GUICtrlCreateInput("", 0, 0, 148, 21); ( "text", left, top , width , height) GUISetState() ; temp.txt is a file that has the encrypted file string stored in it ; barcode.ini is a file that is used as a temp file for storing the data If FileExists(@ScriptDir & "\" & "barcode.ini") Then;deletes the temp file barcode.ini in case of a computer crash FileDelete(@ScriptDir & "\" & "barcode.ini") EndIf FileOpen("temp.ini", 0); calls the file temp.txt for reading later ; Check if file opened for writing OK If $file = -1 Then MsgBox(0, "Error 101", "Cant find barcode.ini.") Exit EndIf $file = FileRead("temp.ini"); reads temp.txt and assigns the data to $file FileOpen("barcode.ini", 2);opens the file in write mode (it will create the file if it doesn't exist) $Decrypted_Data = _StringEncrypt (0 , $file, "1234"); decrypts the string "$file" - Tested FileWrite("barcode.ini", $Decrypted_Data); writes the data to barcode.ini FileClose("barcode.ini");closes the file While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE FileClose(@ScriptDir & "\" & "barcode.ini") FileDelete(@ScriptDir & "\" & "barcode.ini") Exit Case $edit_field $user_input = GUICtrlRead($edit_field); sets $user_input to whatever was typed in the edit box If IniRead("barcode.ini", "AviCodes", $user_input, "no entry") = "no entry" Then MsgBox(16, "Code not found", "The Barcode you entered "&$user_input&" does not have a video.",2) WinActivate("Scan Barcode") GUICtrlSetData($edit_field, "");erases not successful input Else $video_file = (@ScriptDir & "\" & IniRead("barcode.ini", "AviCodes", $user_input, "no entry")) RunWait (@ProgramFilesDir & "\Windows Media Player\mplayer2.exe /play /fullscreen /close "&$video_file&"") WinActivate("Scan Barcode") GUICtrlSetData($edit_field, "");erases not successful input EndIf EndSwitch If TimerDiff($timer) > 20000 Then _PlayRandom() EndIf WEnd Func _PlayRandom() Local $ArrayNumber; first item in the array which is the total number of listed names in the array Local $RandomArrayNo; The random array number for specifying which video file to play $ArrayNumber=$AviList[0]; the [0] specifies the first item in the array $RandomArrayNo = Random(2,$ArrayNumber); creates a number between 2 and the number represented by $ArrayNumber RunWait (@ProgramFilesDir & "\Windows Media Player\mplayer2.exe /play /fullscreen /close "&$AviList[$RandomArrayNo]&"") _PlayRandom() EndFunc Func TogglePause() $Paused = NOT $Paused While $Paused sleep(100) ToolTip('Script is "Paused"',0,0) WEnd ToolTip("") EndFunc Func Terminate() Exit 0 EndFunc Edited June 4, 2008 by computergroove Get Scite to add a popup when you use a 3rd party UDF -> http://www.autoitscript.com/autoit3/scite/docs/SciTE4AutoIt3/user-calltip-manager.html Link to comment Share on other sites More sharing options...
nobbe Posted June 4, 2008 Share Posted June 4, 2008 you would need a $pid when you start the external player so you can Kill it with the PID ;waits until no instance of notepad.exe exists ProcessWaitClose("notepad.exe") ; This will wait until this particular instance of notepad has exited $PID = Run("notepad.exe") ProcessWaitClose($PID) now for detecting the 20 sec idle i would add an adlib function to check if mouse or keyboard is pressed with _ispressed() or check in the main message loop (whatever works better) when idle for 20 sec - start a random movie with PID , if mouse is moving , kill process PID and display input again AdlibEnable("myadlib") ;... Exit Func myadlib() EndFunc Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now