tpiper Posted April 6, 2009 Report Share Posted April 6, 2009 I have a timer set up that displays a reminder message for a user to close a program if they aren't using it. I have a repeat loop that contantly displays the reminder and a dialog box every few minutes. If they type yes in the dialog box then they are given more time. If they type no or hit cancel then the program closes, which is what I want. My problem is that I also want the program to automatically close if there is no response at all, such as if they are away from their computer for long periods of time and don't respond to the dialog box. I'm new to using Macro Express. I've tried using OR logic to terminate the program after a period of time but can't seem to get that to work. Also tried to control the cancel button in the dialog box with an automated click on the cancel button, but again didn't work. I'm sure there is a simple way to do this but can't seem to find the right way. Any help is appreciated! Tom Quote Link to comment Share on other sites More sharing options...
kevin Posted April 6, 2009 Report Share Posted April 6, 2009 Use the If Message command. It allows you to choose the types of buttons to display, which one is the default and a Default Time Out value. Quote Link to comment Share on other sites More sharing options...
tpiper Posted April 6, 2009 Author Report Share Posted April 6, 2009 Use the If Message command. It allows you to choose the types of buttons to display, which one is the default and a Default Time Out value. Kevin, I tried it and I can time out the the message box, but I don't see how this will terminate the program that I'm trying to close without clicking on a button. I need the macro to run such that if no button at all is clicked then the program will terminate after a certain period of time. What am I missing? Thanks, Tom Quote Link to comment Share on other sites More sharing options...
rberq Posted April 6, 2009 Report Share Posted April 6, 2009 Hmmm, I never used this before, but I just tried it. IF MESSAGE appears to return a boolean true/false value. IF MESSAGE:XXXX TEXT BOX DISPLAY: YES WAS SELECTED ELSE TEXT BOX DISPLAY: NO WAS SELECTED END IF Whatever you specify as default is the highlighted button on the display, and is also the boolean value returned on timeout. So in your case maybe this would work: IF MESSAGE:Are you still using the application? [with delay time of x minutes] [DO NOTHING, LEAVE THE APPLICATION RUNNING] ELSE CLOSE THE APPLICATION TEXT BOX DISPLAY: APPLICATION WAS ENDED BECAUSE YOU DIDN'T REPLY IN x MINUTES, YOU SLUGGARD! END IF Quote Link to comment Share on other sites More sharing options...
tpiper Posted April 7, 2009 Author Report Share Posted April 7, 2009 Thanks much...that did the trick. Your help is much appreciated! Tom Quote Link to comment Share on other sites More sharing options...
stevecasper Posted April 8, 2009 Report Share Posted April 8, 2009 Hmmm, I never used this before, but I just tried it. IF MESSAGE appears to return a boolean true/false value.IF MESSAGE:XXXX TEXT BOX DISPLAY: YES WAS SELECTED ELSE TEXT BOX DISPLAY: NO WAS SELECTED END IF Whatever you specify as default is the highlighted button on the display, and is also the boolean value returned on timeout. So in your case maybe this would work: IF MESSAGE:Are you still using the application? [with delay time of x minutes] [DO NOTHING, LEAVE THE APPLICATION RUNNING] ELSE CLOSE THE APPLICATION TEXT BOX DISPLAY: APPLICATION WAS ENDED BECAUSE YOU DIDN'T REPLY IN x MINUTES, YOU SLUGGARD! END IF I had never noticed the built-in time-out on this command. Awesome! My problem is that I also want the program to automatically close if there is no response at all, such as if they are away from their computer for long periods of time and don't respond to the dialog box. Personally, what I would do in this case (admittedly I don't know the full spectrum of what it is you do, so feel free to completely ignore me) would be to make the macro as unobtrusive as possible. <Begin Boring Personal Example>: I work with a Citrix application that times itself out ever 4-8 minutes (it is completely inconsistent). This was a problem when it would time out and then I'd run a macro that needed to call the app, which had timed out in the mean-time, requiring a sign in. Rather than building a series of commands to determine if the app had gone to a log-in page or to the page I actually wanted, I built a simple macro that would refresh the application automatically every 4 minutes. Unfortunately, that got to be a headache when I was using the app regularly or when it would refresh immediately after I reached the information I was looking for (the refresh takes the app back to the first page of a hundreds-of-pages-long document). I made some modifications so now any time the application is refreshed manually or via another macro accessing the application, the timer starts over. This way, if I don't use the app for 4 minutes, and neither do any of my other macros, I get a text box that pops up alerting the user that the app is refreshing and to be patient for a few seconds. Once the refresh is completed, the app is minimized, the text box goes away, and the user can get back to work. I can go hours without seeing the text box, or I can go an hour and see it 15 times, depending on whether or not and how often I'm using the app. <End Boring Personal Example> I guess my point is that you could probably build something around your macro, so that when the application in question does get used, the timer on the macro starts over, and only prompts the user if the application has definitely not been looked at. The code is pretty basic (and relies on a second, separate macro): The primary macro would look like this (I named the application "This App"): Launches on a schedule: Every 5 minutes If Window Title "This App" is running If Message: "Don't Forget to Close This App" Else Text Box Display: Closing Window Close: "This App" Text Box Close: No Response End If End If If This App is not running, nothing happens. If it is running, the If Message appears every 5 minutes as long as This App is running. --------------------------------------------------------- The secondary code, which blocks the If Message when it's clear that the User is actually using the application, looks like this: Launches whenever window title "This App" comes on top. Macro Disable: test 1 for tpiper Macro Enable: test 1 for tpiper This way, if This App comes to the top, the 5 minute timer for the primary macro gets reset to zero. If the User is clearly using the app, then they won't be bugged by a constant barrage of "Are you using this?" requests. Anyway, I hope this helps! Quote Link to comment Share on other sites More sharing options...
tpiper Posted April 8, 2009 Author Report Share Posted April 8, 2009 Steve, that's pretty slick! I'll give it try. But does this require two macro's to be running at the same time? I thought this wasn't possible in the non-pro version. Thanks, Tom I had never noticed the built-in time-out on this command. Awesome! Personally, what I would do in this case (admittedly I don't know the full spectrum of what it is you do, so feel free to completely ignore me) would be to make the macro as unobtrusive as possible. <Begin Boring Personal Example>: I work with a Citrix application that times itself out ever 4-8 minutes (it is completely inconsistent). This was a problem when it would time out and then I'd run a macro that needed to call the app, which had timed out in the mean-time, requiring a sign in. Rather than building a series of commands to determine if the app had gone to a log-in page or to the page I actually wanted, I built a simple macro that would refresh the application automatically every 4 minutes. Unfortunately, that got to be a headache when I was using the app regularly or when it would refresh immediately after I reached the information I was looking for (the refresh takes the app back to the first page of a hundreds-of-pages-long document). I made some modifications so now any time the application is refreshed manually or via another macro accessing the application, the timer starts over. This way, if I don't use the app for 4 minutes, and neither do any of my other macros, I get a text box that pops up alerting the user that the app is refreshing and to be patient for a few seconds. Once the refresh is completed, the app is minimized, the text box goes away, and the user can get back to work. I can go hours without seeing the text box, or I can go an hour and see it 15 times, depending on whether or not and how often I'm using the app. <End Boring Personal Example> I guess my point is that you could probably build something around your macro, so that when the application in question does get used, the timer on the macro starts over, and only prompts the user if the application has definitely not been looked at. The code is pretty basic (and relies on a second, separate macro): The primary macro would look like this (I named the application "This App"): Launches on a schedule: Every 5 minutes If Window Title "This App" is running If Message: "Don't Forget to Close This App" Else Text Box Display: Closing Window Close: "This App" Text Box Close: No Response End If End If If This App is not running, nothing happens. If it is running, the If Message appears every 5 minutes as long as This App is running. --------------------------------------------------------- The secondary code, which blocks the If Message when it's clear that the User is actually using the application, looks like this: Launches whenever window title "This App" comes on top. Macro Disable: test 1 for tpiper Macro Enable: test 1 for tpiper This way, if This App comes to the top, the 5 minute timer for the primary macro gets reset to zero. If the User is clearly using the app, then they won't be bugged by a constant barrage of "Are you using this?" requests. Anyway, I hope this helps! Quote Link to comment Share on other sites More sharing options...
stevecasper Posted April 8, 2009 Report Share Posted April 8, 2009 Steve, that's pretty slick! I'll give it try. But does this require two macro's to be running at the same time? I thought this wasn't possible in the non-pro version. Thanks, Tom Hey Tom, It does not require them both to run at the same time. The primary macro only runs every 5 minutes. The secondary macro only runs when "This App" comes to the top. If you're using a repeat loop within the primary macro in order to establish the every-5-minutes prompt, then the secondary macro won't be able to run (ever); however with the primary macro set on a schedule to run every 5 minutes, then you won't need a repeat loop inside it at all to perform this function. Thus you should only ever see one of 2 situations with this set-up: Situation 1: No macro is running for 5 minutes, then the primary macro runs, does it's thing, then stops running and the 5 minute timer starts over. Situation 2: No macro is running for 3 minutes, then the User brings This App to the top in order to use it. At this point the secondary macro runs very quickly disabling, then re-enabling the primary macro - effectively resetting the 5 minute timer. Quote Link to comment Share on other sites More sharing options...
tpiper Posted April 8, 2009 Author Report Share Posted April 8, 2009 Okay, thanks for the explanation. Tom Hey Tom, It does not require them both to run at the same time. The primary macro only runs every 5 minutes. The secondary macro only runs when "This App" comes to the top. If you're using a repeat loop within the primary macro in order to establish the every-5-minutes prompt, then the secondary macro won't be able to run (ever); however with the primary macro set on a schedule to run every 5 minutes, then you won't need a repeat loop inside it at all to perform this function. Thus you should only ever see one of 2 situations with this set-up: Situation 1: No macro is running for 5 minutes, then the primary macro runs, does it's thing, then stops running and the 5 minute timer starts over. Situation 2: No macro is running for 3 minutes, then the User brings This App to the top in order to use it. At this point the secondary macro runs very quickly disabling, then re-enabling the primary macro - effectively resetting the 5 minute timer. Quote Link to comment Share on other sites More sharing options...
tpiper Posted April 9, 2009 Author Report Share Posted April 9, 2009 Steve, after looking at the code and trying to follow the logic of what you're doing I didn't see where the 5 minute timer was set up. What did I miss? Thanks, Tom Hey Tom, It does not require them both to run at the same time. The primary macro only runs every 5 minutes. The secondary macro only runs when "This App" comes to the top. If you're using a repeat loop within the primary macro in order to establish the every-5-minutes prompt, then the secondary macro won't be able to run (ever); however with the primary macro set on a schedule to run every 5 minutes, then you won't need a repeat loop inside it at all to perform this function. Thus you should only ever see one of 2 situations with this set-up: Situation 1: No macro is running for 5 minutes, then the primary macro runs, does it's thing, then stops running and the 5 minute timer starts over. Situation 2: No macro is running for 3 minutes, then the User brings This App to the top in order to use it. At this point the secondary macro runs very quickly disabling, then re-enabling the primary macro - effectively resetting the 5 minute timer. Quote Link to comment Share on other sites More sharing options...
tpiper Posted April 9, 2009 Author Report Share Posted April 9, 2009 Nevermind, I found out what was happening. I overlooked the fact that it was set up as a scheduled macro...duh! Works great now. Thanks again, Tom Hey Tom, It does not require them both to run at the same time. The primary macro only runs every 5 minutes. The secondary macro only runs when "This App" comes to the top. If you're using a repeat loop within the primary macro in order to establish the every-5-minutes prompt, then the secondary macro won't be able to run (ever); however with the primary macro set on a schedule to run every 5 minutes, then you won't need a repeat loop inside it at all to perform this function. Thus you should only ever see one of 2 situations with this set-up: Situation 1: No macro is running for 5 minutes, then the primary macro runs, does it's thing, then stops running and the 5 minute timer starts over. Situation 2: No macro is running for 3 minutes, then the User brings This App to the top in order to use it. At this point the secondary macro runs very quickly disabling, then re-enabling the primary macro - effectively resetting the 5 minute timer. Quote Link to comment Share on other sites More sharing options...
stevecasper Posted April 9, 2009 Report Share Posted April 9, 2009 Nevermind, I found out what was happening. I overlooked the fact that it was set up as a scheduled macro...duh! Works great now. Thanks again, Tom Yup! Good luck! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.