Xphere Posted May 2, 2005 Share Posted May 2, 2005 (edited) How would i do this in v3? im still looking, but any help would be great. ok fine well at least someone saw the poor attempt i made, can some one point me in a better direction Edited May 2, 2005 by Xphere Link to comment Share on other sites More sharing options...
Toppy Posted May 2, 2005 Share Posted May 2, 2005 OMG ! Goto on this forum !Please remove this topic ASAP, or people will start acting extremely mad ! Link to comment Share on other sites More sharing options...
Kerberuz Posted May 2, 2005 Share Posted May 2, 2005 How would i do this in v3?im still looking, but any help would be great.LineWait: If ProcessExists("Launch.exe") Then Goto, LineActiveLaunch Goto, LineWait LineActiveLaunch: $list = ProcessList("Launch.exe") If $list[0][0] > 1 then goto, LineDamtheHam Goto, LineWait LineDamntheHam: Sleep(5000) If $list[0][0] < 1 then goto, LineWait If $list[0][0] > 1 then goto, LineKill LineKill: $howmany = $list[0][0] For $1 = $howmany to 0 Step -1 ProcessClose("Launch.exe") Next Goto, LineWait<{POST_SNAPBACK}>Look in the help file for these.WhileFunc Kerby Link to comment Share on other sites More sharing options...
Xphere Posted May 2, 2005 Author Share Posted May 2, 2005 Look in the help file for these.WhileFunc<{POST_SNAPBACK}>thank you, will do Link to comment Share on other sites More sharing options...
w0uter Posted May 2, 2005 Share Posted May 2, 2005 (edited) i am not sure about what ur code is suppose to do. but i think that its suppose to kill all instances of launch.exe if so you can use: While 1 $PID = ProcessExists("Launch.exe") If $PID Then ProcessClose($PID) WEnd for a complex problem theres almost always an easy solution Edited May 2, 2005 by w0uter My UDF's:;mem stuff_Mem;ftp stuff_FTP ( OLD );inet stuff_INetGetSource ( OLD )_INetGetImage _INetBrowse ( Collection )_EncodeUrl_NetStat_Google;random stuff_iPixelSearch_DiceRoll Link to comment Share on other sites More sharing options...
Xphere Posted May 2, 2005 Author Share Posted May 2, 2005 Launch.exe is actually supposed to run, but i have users that click and click over and over again with out waiting for the program to launch.Then i get multiple instances of launch.exe and it seems when i get more then 3 or 4 randomly it just locks up. so im trying to make sure launch.exe doesnt run too long, and not more then 1 instance or 2. basically launch.exe runs for a few seconds, processes some arguments and then loads another program. so launch.exe should never run very long, and rarely more then 2 or 3 instances at most.so im trying to control that.i am not sure about what ur code is suppose to do. but i think that its suppose to kill all instances of launch.exeif so you can use:While 1 $PID = ProcessExists("Launch.exe") If $PID Then ProcessClose($PID) WEndfor a complex problem theres almost always an easy solution <{POST_SNAPBACK}> Link to comment Share on other sites More sharing options...
ILikeStuff Posted May 2, 2005 Share Posted May 2, 2005 (edited) Here is the code i place at the beginning of the script to prevent multiple launches of the same scriptIf UBound(ProcessList(@ScriptName)) > 2 then ExitBasically, if there is more than one instance of the script (@Scriptname) loaded in memory, the script terminates itself. You need the >2 because the first entry of the array it returns is the number of processes returned. It could also be done as$ProcessArray = ProcessList(@ScriptName) If $ProcessArray[0][0] > 1 then ExitLaunch.exe is actually supposed to run, but i have users that click and click over and over again with out waiting for the program to launch.Then i get multiple instances of launch.exe and it seems when i get more then 3 or 4 randomly it just locks up. so im trying to make sure launch.exe doesnt run too long, and not more then 1 instance or 2. basically launch.exe runs for a few seconds, processes some arguments and then loads another program. so launch.exe should never run very long, and rarely more then 2 or 3 instances at most.so im trying to control that.<{POST_SNAPBACK}>EDIT:added explanation Edited May 2, 2005 by ILikeStuff Link to comment Share on other sites More sharing options...
Xphere Posted May 2, 2005 Author Share Posted May 2, 2005 Thats useful too but im really trying to run the script and have it run from windows booting indefinately. so i need something that will continually run and check for launch.exe and when it exists. to make sure it doesnt exist too long or get opened too many times.thank you thoHere is the code i place at the beginning of the script to prevent multiple launches of the same scriptIf UBound(ProcessList(@ScriptName)) > 2 then ExitBasically, if there is more than one instance of the script (@Scriptname) loaded in memory, the script terminates itself.EDIT:added explanation<{POST_SNAPBACK}> Link to comment Share on other sites More sharing options...
herewasplato Posted May 2, 2005 Share Posted May 2, 2005 Launch.exe is actually supposed to run, but i have users that click and click over and over again with out waiting for the program to launch.<snipped>so im trying to control that.<{POST_SNAPBACK}>It sounds like the same topic started in this post.Anyway, it also sounds like you can change things on each users' computer(s). The "process kill" method will work, but I would like to sugggest a totally different approach. Change the shortcut that normally starts "Launch" to start your script. Your script will start launch. If you include the code from FAQ #14 in the manual, the users will get a message box of your choice if they click again and/or perhaps a small splash screen asking them to be patient while the app loads. That same script can time/kill the app if it is on too long... the script can exit if it notices that the process has been killed by the user. If there are too many users/computers to make these changes on, then toss my idea.If "Launch' is a complied AutoIt script - then just include the code suggeested above into it... [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Xphere Posted May 2, 2005 Author Share Posted May 2, 2005 (edited) You know i had thought about that approach, but i dismissed it a while ago thinking it wouldnt be the best way to do it. However having a msg box coming up to tell them to be patient is a good idea. Actually i think i'll have the script first check for itself and then run functions based on that. Thank you i like that idea. Unfortunatly launch.exe is not a script..*edit*btw "herewasplato" in response to your post in the other thread that i forgot about. I'll just respond here so i dont bring back another topic. The day i started that topic i was incredibly stressed and sleep deprived, no offense taken about my english skills. They are horrible even on a good day. Looking at that post im surprised anyone got anything logical from that post. Thank you for trying to understand it none the less.*/edit*It sounds like the same topic started in this post.Anyway, it also sounds like you can change things on each users' computer(s). The "process kill" method will work, but I would like to sugggest a totally different approach. Change the shortcut that normally starts "Launch" to start your script. Your script will start launch. If you include the code from FAQ #14 in the manual, the users will get a message box of your choice if they click again and/or perhaps a small splash screen asking them to be patient while the app loads. That same script can time/kill the app if it is on too long... the script can exit if it notices that the process has been killed by the user. If there are too many users/computers to make these changes on, then toss my idea.If "Launch' is a complied AutoIt script - then just include the code suggeested above into it...<{POST_SNAPBACK}> Edited May 2, 2005 by Xphere Link to comment Share on other sites More sharing options...
ILikeStuff Posted May 2, 2005 Share Posted May 2, 2005 (edited) Ok, how about this:$ProcessName = "Launch.exe";process to watch $ProcessTimeLimit = 15000;Time First Process can exist in milliseconds $Timer = 0 ;Initialize the variable $FirstProcessPID = 0 ;Initialize the variable $CurrentProcessList = 0;Initialize the variable $ProcessCount = 0 ;Initialize the variable $SleepInterval = 250 ;how long of a delay you want in milliseconds in executing the loops so as not to hog the cpu Do While Not $FirstProcessPID Sleep($SleepInterval) $FirstProcessPID = ProcessExists($ProcessName) $Timer = TimerInit() WEnd While ProcessExists($FirstProcessPID) $CurrentProcessList = ProcessList($ProcessName) If $CurrentProcessList[0][0] > 1 Then For $ProcessCount = 1 to $CurrentProcessList[0][0] If $CurrentProcessList[$ProcessCount][1] <> $FirstProcessPID then ProcessClose($CurrentProcessList[$ProcessCount][1]) Next EndIf If TimerDiff($Timer) > $ProcessTimeLimit then ProcessClose($FirstProcessPID) Sleep($SleepInterval) WEnd $FirstProcessPID = 0 Until 0But I think herewasplato's suggestion is a much more elegant solutionThats useful too but im really trying to run the script and have it run from windows booting indefinately. so i need something that will continually run and check for launch.exe and when it exists. to make sure it doesnt exist too long or get opened too many times.thank you tho<{POST_SNAPBACK}> Edited May 2, 2005 by ILikeStuff Link to comment Share on other sites More sharing options...
Xphere Posted May 2, 2005 Author Share Posted May 2, 2005 Thank you for taking the time to write that out. Obviously im a very early stage student at this. So any code i can read through is helpfull.Ok, how about this:$ProcessName = "Launch.exe";process to watch $ProcessTimeLimit = 15000;Time First Process can exist in milliseconds $Timer = 0 ;Initialize the variable $FirstProcessPID = 0 ;Initialize the variable $CurrentProcessList = 0;Initialize the variable $ProcessCount = 0 ;Initialize the variable $SleepInterval = 250 ;how long of a delay you want in milliseconds in executing the loops so as not to hog the cpu Do While Not $FirstProcessPID Sleep($SleepInterval) $FirstProcessPID = ProcessExists($ProcessName) $Timer = TimerInit() WEnd While ProcessExists($FirstProcessPID) $CurrentProcessList = ProcessList($ProcessName) If $CurrentProcessList[0][0] > 1 Then For $ProcessCount = 1 to $CurrentProcessList[0][0] If $CurrentProcessList[$ProcessCount][1] <> $FirstProcessPID then ProcessClose($CurrentProcessList[$ProcessCount][1]) Next EndIf If TimerDiff($Timer) > $ProcessTimeLimit then ProcessClose($FirstProcessPID) Sleep($SleepInterval) WEnd $FirstProcessPID = 0 Until 0But I think herewasplato's suggestion is a much more elegant solution<{POST_SNAPBACK}> Link to comment Share on other sites More sharing options...
Xphere Posted May 3, 2005 Author Share Posted May 3, 2005 Ok, so one more question.The only programming languages i work with are proprietary languages for building automation controls. They use goto, and line within their code. Other then that ive only worked with LPC in a LimaMud which is executed completely differently.Im guessing there is something entirely inefficient or elementary about goto and line vrs the suggestions ive gotten in this topic. Being that im trying to learn, would anyone care to enlighten me on this subject?OMG ! Goto on this forum !Please remove this topic ASAP, or people will start acting extremely mad ! <{POST_SNAPBACK}> Link to comment Share on other sites More sharing options...
herewasplato Posted May 3, 2005 Share Posted May 3, 2005 See last post in this old thread.However, I get lost in my old code no matter how it is written. Ain't senility grand! [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Xphere Posted May 3, 2005 Author Share Posted May 3, 2005 Thank you.See last post in this old thread.However, I get lost in my old code no matter how it is written. Ain't senility grand!<{POST_SNAPBACK}> Link to comment Share on other sites More sharing options...
Xphere Posted May 4, 2005 Author Share Posted May 4, 2005 Ok, so heres my revised script. Go easy on me here, this is my first attempt. I cant test this script locally because i dont have the application locally and i cat test this on the computer its going on until tomorrow. So i wanted to put it up here so people can tell me how much i messed this up. Basically the user clicks on a shortcut that will launch this script and it needs to be able to send these arguments to it. -o -SGraphics "-NJackson\CX\Jackson Site" So if i were just going to run the program with out the script i would end up with. c:\program files\continuum\Launch.exe -o -SGraphics "-NJackson\CX\Jackson Site" So the quick upshot is, I need to keep my users from trying to open this too many times. So the Script is suppposed to Check for itself. If its already running then put up a msgbox and stop itself as well as not run another instance of Launch.exe. But if the script is not running then there also Shouldnt be a Launch.exe running so it should run launch.exe and send the appropriate arguments to launch.exe. I hope that made sense and i hope my script isnt too butchered (wow i really cant spell) I would be greatly indebted if someone could look through this code and tell me how bad i messed up. Thanks $PCC_WindowName = "PCC Process Control" $ALL_ARGS = $CmdLine[1] & " " & $CmdLine[2] & " " & $CmdLine[3] If WinExists($PCC_WindowName) Then NoticeBox() Else AutoItWinSetTitle($PCC_WindowName) Run ('c:\program files\continuum\Launch.exe' & $ALL_ARGS) PCC_KeepAlive() Func PCC_KeepAlive() While ProcessExists("Launch.exe") Sleep(1000) WEnd Exit EndFunc Func NoticeBox() MsgBox ( 0, "Notice!", "Please be patient your application is already loading") Exit EndFunc Link to comment Share on other sites More sharing options...
herewasplato Posted May 4, 2005 Share Posted May 4, 2005 (edited) Good job - See below for slight modification: ;;;;;;;;;;;;;;;added this line $PCC_WindowName = "PCC Process Control" $ALL_ARGS = $CmdLine[1] & " " & $CmdLine[2] & " " & $CmdLine[3] If WinExists($PCC_WindowName) Then NoticeBox() Else AutoItWinSetTitle($PCC_WindowName) Run ('c:\program files\continuum\Launch.exe' & $ALL_ARGS) PCC_KeepAlive() EndIf;;;;;;;;;;;;;;;added this line Func PCC_KeepAlive() While ProcessExists("Launch.exe") Sleep(1000) WEnd Exit EndFunc Func NoticeBox() MsgBox ( 0, "Notice!", "Please be patient your application is already loading") Exit EndFunc Edited May 4, 2005 by herewasplato [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Xphere Posted May 4, 2005 Author Share Posted May 4, 2005 Thank you, just wanted to ask becuase i really wasnt sure if i did the $ALL_ARGS line correctly to combine the args into one variable. I just wasnt sure if i needed to encase all the $cmdline combo's in another set of quotes. Well that and i was wondering how i tell when the user has clicked on ok in that msg box. I was reading the help file and didnt really see how that gets handled or how you can interact with what they click on. I didnt want the script to end until they click ok. thank you for your helpGood job - See below for slight modification:;;;;;;;;;;;;;;;added this line$PCC_WindowName = "PCC Process Control" $ALL_ARGS = $CmdLine[1] & " " & $CmdLine[2] & " " & $CmdLine[3] If WinExists($PCC_WindowName) Then NoticeBox() Else AutoItWinSetTitle($PCC_WindowName) Run ('c:\program files\continuum\Launch.exe' & $ALL_ARGS) PCC_KeepAlive() EndIf;;;;;;;;;;;;;;;added this line Func PCC_KeepAlive() While ProcessExists("Launch.exe") Sleep(1000) WEnd Exit EndFunc Func NoticeBox() MsgBox ( 0, "Notice!", "Please be patient your application is already loading") Exit EndFunc<{POST_SNAPBACK}> Link to comment Share on other sites More sharing options...
Xphere Posted May 4, 2005 Author Share Posted May 4, 2005 (edited) ok, ran into technical problems.. i got a few sorted out. and narrowed down what im hopeing is my last problem with the script. Aparently, When passing this " -o -SGraphics "-NJackson\CX\Jackson Site" " to the script, cmdline[1], and [2] are fine, however somehow only "-NJackson" gets sent to the third one. Im sure there is a good reason for that. So what do i do? does that mean then CX will be [4] and Jackson will be [5] and Site will be [6] ? is there a way to capture that whole thing as one? or do i need to take em how they are and concat them in the script? id like to be able to grab everything inbetween the quotes in a easy fashion becuase other wise this script will only work for this set of arguments, and not another set with a different or longer path. Any insight on this would be greatly appreciated. Im gonna go back to reading the manual in the mean time. *edit* Should i use $CmdLineRaw and then remove the scriptname from that and then use that? I guess im just wondering what "\" in a argument is going to do, or how is that parsed.. Still looking. Sorry if im abusing this forum *edit* Edited May 4, 2005 by Xphere Link to comment Share on other sites More sharing options...
herewasplato Posted May 4, 2005 Share Posted May 4, 2005 ...wasnt sure if i did the $ALL_ARGS line correctly...<{POST_SNAPBACK}>I was not sure either - never used that, so could not comment on it. From the looks of your next post, that area needs some attention.You know what it should look like on the "Target:" line of a shortcut... so, how does MsgBox(0,"$ALL_ARGS",$ALL_ARGS) make it look?$ALL_ARGS = $CmdLine[1] & " " & $CmdLine[2] & " " & $CmdLine[3]MsgBox(0,"$ALL_ARGS",$ALL_ARGS) ;add this line hereAlso, do you need a space between the "exe" and the single quote or are you handling that another way? ---exe ' & $ALL_ARGSAbout the MsgBox question:From manual - Return ValueSuccess: Returns the ID of the button pressed. - see table -$ans = (0, "Notice!", "Please be patient your application is already loading")If $ans = 1 Then;;;;;;they pressed okEndIf [size="1"][font="Arial"].[u].[/u][/font][/size] 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