tass_co Posted October 18, 2023 Report Share Posted October 18, 2023 Hello, Sometimes it takes a long time to copy/move my files. I wrote a code using the Macro application to shut down my computer as soon as this window is closed. However the If condition does not work properly with the File copy/move window. I'll be happy if you can help me. ps: I am using the Turkish language. I can find the copy window with the title "tamamlandı". (Of course Partial Matching. Full title ex "53% tamamlandı") <VARIABLE SET INTEGER Option="\x00" Destination="%N[1]%" Value="0"/> <REPEAT UNTIL Variable="%N[1]%" Condition="\x00" Value="1"/> <IF NOT WINDOW Option="\x01" Title=" tamamlandı" Partial="TRUE" Wildcards="FALSE"/> <VARIABLE SET INTEGER Option="\x00" Destination="%N[1]%" Value="1"/> <END IF/> <END REPEAT/> <DELAY Flags="\x01" Time="5"/> <MESSAGEBOX Caption="PENCERE" Message="PENCERE KAPANDI" Icon="0"/> Quote Link to comment Share on other sites More sharing options...
rberq Posted October 18, 2023 Report Share Posted October 18, 2023 I am using Macro Express Pro 6.6.1.1. I had a strange problem recently where "IF WINDOW IS FOCUSED" worked properly, but "IF WINDOW IS NOT FOCUSED" did not work. So you could flip your logic and see if that helps. I never did resolve whether my problem was Macro Express or just some dumb mistake by me -- I just took the path of least resistance and used the different instruction. Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 18, 2023 Author Report Share Posted October 18, 2023 1 hour ago, rberq said: I am using Macro Express Pro 6.6.1.1. I had a strange problem recently where "IF WINDOW IS FOCUSED" worked properly, but "IF WINDOW IS NOT FOCUSED" did not work. So you could flip your logic and see if that helps. I never did resolve whether my problem was Macro Express or just some dumb mistake by me -- I just took the path of least resistance and used the different instruction. Thank you for your answer. The code I am currently using works with Window Focusing logic. <WINDOW ACTIVATE Title="tamamlandı" Exact_Match="FALSE" Wildcards="FALSE" _IGNORE="0x0006"/> <WAIT FOR WINDOW TO LOSE FOCUS Title="tamamlandı" Partial="TRUE" Wildcards="TRUE" Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <DELAY Flags="\x01" Time="5"/> <POWER OFF COMPUTER/> However, the focus of the window may be lost when another application/notification etc. arrives and the PC may shut down before the copying/moving process is completed. Unfortunately I need to find a more stable solution. Quote Link to comment Share on other sites More sharing options...
Cory Posted October 18, 2023 Report Share Posted October 18, 2023 Use the MEP commands to manipulate the files. Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 18, 2023 Author Report Share Posted October 18, 2023 1 minute ago, Cory said: Use the MEP commands to manipulate the files. Thank you for your answer. Unfortunately, I don't know much about the application. Sorry for that. What do you mean by "Use the MEP commands to manipulate the files"? Could you give me an example? Quote Link to comment Share on other sites More sharing options...
rberq Posted October 18, 2023 Report Share Posted October 18, 2023 4 hours ago, tass_co said: However, the focus of the window may be lost when another application/notification etc. arrives and the PC may shut down before the copying/moving process is completed. Unfortunately I need to find a more stable solution. Yes, I know I said "focused" and your macro said "running". But my point was, you could try changing your logic to avoid using the "not" condition. See below. Also I notice there is a blank space before the word tamamlandi -- will there ALWAYS be a blank space there? And you might want to move the Delay before End Repeat instead of after, so as to make a less-intensive loop. Variable Set Integer %N[1]% to 0 Repeat Until %N[1]% Equals "1" If Window " tamamlandi" is running Else Variable Set Integer %N[1]% to 1 End If Delay: 5 seconds <<<<<<<<<< Here instead of after End Repeat ??? End Repeat MessageBox: PENCERE Quote Link to comment Share on other sites More sharing options...
acantor Posted October 18, 2023 Report Share Posted October 18, 2023 I wonder if something like this might do what you need to do: Repeat Start (Repeat 10 times) Window Activate: tamamlandi Delay: 500 milliseconds If Window "tamamlandi" is focused Continue Else Power Off Computer Macro Stop End If End Repeat MessageBox: "tamamlandi" did not appear within 5 seconds <REPEAT START Start="1" Step="1" Count="10" Save="FALSE"/> <WINDOW ACTIVATE Title="tamamlandi" Exact_Match="FALSE" Wildcards="FALSE"/> <DELAY Flags="\x02" Time="500"/> <IF WINDOW Option="\x00" Title="tamamlandi" Partial="TRUE" Wildcards="FALSE"/> <CONTINUE/> <ELSE/> <POWER OFF COMPUTER/> <MACRO STOP/> <END IF/> <END REPEAT/> <MESSAGEBOX Caption="\"tamamlandi\" did not appear within 5 seconds" Message="Try again!" Icon="4"/> Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 18, 2023 Author Report Share Posted October 18, 2023 1 hour ago, rberq said: Yes, I know I said "focused" and your macro said "running". But my point was, you could try changing your logic to avoid using the "not" condition. See below. Also I notice there is a blank space before the word tamamlandi -- will there ALWAYS be a blank space there? And you might want to move the Delay before End Repeat instead of after, so as to make a less-intensive loop. Variable Set Integer %N[1]% to 0 Repeat Until %N[1]% Equals "1" If Window " tamamlandi" is running Else Variable Set Integer %N[1]% to 1 End If Delay: 5 seconds <<<<<<<<<< Here instead of after End Repeat ??? End Repeat MessageBox: PENCERE There will always be a space in front of "tamamlandı". Because Windows always shows the percentage in the title when copying/moving files. I added the delay for measure. Location does not matter. I tried the code you shared. Unfortunately, it does nothing when the copy is completed. It stays in the if loop Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 18, 2023 Author Report Share Posted October 18, 2023 19 minutes ago, acantor said: I wonder if something like this might do what you need to do: Repeat Start (Repeat 10 times) Window Activate: tamamlandi Delay: 500 milliseconds If Window "tamamlandi" is focused Continue Else Power Off Computer Macro Stop End If End Repeat MessageBox: "tamamlandi" did not appear within 5 seconds <REPEAT START Start="1" Step="1" Count="10" Save="FALSE"/> <WINDOW ACTIVATE Title="tamamlandi" Exact_Match="FALSE" Wildcards="FALSE"/> <DELAY Flags="\x02" Time="500"/> <IF WINDOW Option="\x00" Title="tamamlandi" Partial="TRUE" Wildcards="FALSE"/> <CONTINUE/> <ELSE/> <POWER OFF COMPUTER/> <MACRO STOP/> <END IF/> <END REPEAT/> <MESSAGEBOX Caption="\"tamamlandi\" did not appear within 5 seconds" Message="Try again!" Icon="4"/> Thank you for your answer. I use 2 PCs. One is for download purposes only. The time it takes to copy files from one to another varies depending on file size. For example, I am transferring a 200GB file. ıt takes 1 hours. Therefore, I think the repetition time of the code you shared will sometimes be sufficient and sometimes not. Please correct me if I'm wrong. Quote Link to comment Share on other sites More sharing options...
Cory Posted October 18, 2023 Report Share Posted October 18, 2023 MEP = Macro Express Pro. It's the software this form is dedicated to. MEP has commands to manipulate files like moving them without using File Explorer. If MEP moves the files it knows when it's complete and can go to the command to shut down. All commands > Files and Folders > Move File/Files. Or whichever manipulation you are performing. There is a help section on it to get you started. Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 18, 2023 Author Report Share Posted October 18, 2023 1 minute ago, Cory said: MEP = Macro Express Pro. It's the software this form is dedicated to. MEP has commands to manipulate files like moving them without using File Explorer. If MEP moves the files it knows when it's complete and can go to the command to shut down. All commands > Files and Folders > Move File/Files. Or whichever manipulation you are performing. There is a help section on it to get you started. Oh sorry I thought you were talking about something else. I have to use File Explorer to copy files. Because I decide which files to copy by considering the space on the disks. Quote Link to comment Share on other sites More sharing options...
acantor Posted October 19, 2023 Report Share Posted October 19, 2023 You may be able to use Macro Express to decide when to copy a file -- without using File Explorer. Macro Express can determine the size of a file. // Assign the name of a file to variable %FileName% (not sure how to do this, but I think it's possible!) // (You'll need to figure out how to do this.) Variable Set Integer %SizeOfFile% to the size of %FileName% If Variable %FileSize% Is Greater Than "1000" Copy File/Files: "%FileName%" to "c:\Temporary\%FileName%" End If Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 19, 2023 Author Report Share Posted October 19, 2023 1 hour ago, acantor said: You may be able to use Macro Express to decide when to copy a file -- without using File Explorer. Macro Express can determine the size of a file. // Assign the name of a file to variable %FileName% (not sure how to do this, but I think it's possible!) // (You'll need to figure out how to do this.) Variable Set Integer %SizeOfFile% to the size of %FileName% If Variable %FileSize% Is Greater Than "1000" Copy File/Files: "%FileName%" to "c:\Temporary\%FileName%" End If Thank you for offering a different solution, but I do not want to complicate the code when there is a much easier way to do it. I want to make a command or application that will run when the copy window is closed. Quote Link to comment Share on other sites More sharing options...
Cory Posted October 19, 2023 Report Share Posted October 19, 2023 Seems simpler. Best of luck. Quote Link to comment Share on other sites More sharing options...
Cory Posted October 20, 2023 Report Share Posted October 20, 2023 I see one big problem in your original code. You don't have any delay in your repeat loop. This is a terrible practice. Use at least 100 or 1000 ms. It can get behind and suck up huge amounts of CPU. Try adding a delay. Also does the command to shutdown the computer work without the loop? I was thinking you might need ot run it with administrative privileges. Some commands just won't work without them. YOu might have addressed this before, but there's a space in "If Not Window" Also be aware that MEP is not capable of Unicode. Needs to be only ASCII/ANSI. Quote Link to comment Share on other sites More sharing options...
tass_co Posted October 21, 2023 Author Report Share Posted October 21, 2023 On 10/20/2023 at 3:03 AM, Cory said: I see one big problem in your original code. You don't have any delay in your repeat loop. This is a terrible practice. Use at least 100 or 1000 ms. It can get behind and suck up huge amounts of CPU. Try adding a delay. Also does the command to shutdown the computer work without the loop? I was thinking you might need ot run it with administrative privileges. Some commands just won't work without them. YOu might have addressed this before, but there's a space in "If Not Window" Also be aware that MEP is not capable of Unicode. Needs to be only ASCII/ANSI. Thank you again for your answer. As I said before, I don't know much about coding. As you said, I thought there might be a problem due to the "space" in the window title. Based on this, I tried to handle the "percentage" part and the code gave positive results. The working code is below. <VARIABLE SET INTEGER Option="\x00" Destination="%N[1]%" Value="0"/> <REPEAT UNTIL Variable="%N[1]%" Condition="\x00" Value="1"/> <IF WINDOW Option="\x01" Title="100% tamamlandı" Partial="TRUE" Wildcards="TRUE"/> <VARIABLE SET INTEGER Option="\x00" Destination="%N[1]%" Value="1"/> <DELAY Flags="\x01" Time="2"/> <END IF/> <DELAY Flags="\x01" Time="10"/> <END REPEAT/> <POWER OFF COMPUTER _ENABLED="FALSE"/> I would like to thank all my friends who responded and tried to help. Respects 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.