|
Post by zeak on Oct 23, 2018 23:10:25 GMT
Hi all,
I'm new on here but have been using MMM for awhile now, only recently have started getting into conditions. I've been trying for the last week to make part of my macro to detect when you mouse over and click on a button by using the pixel colour action, but with no success. either the scrip loops out and crashes the program or it misses the timing of when you click the button.
Here is a sample of my code
1 | IF | PIXEL COLOR | Color [R=179, G=179, B=179]::At Location [X:750 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::750 | ELSE | 1 | IF | PIXEL COLOR | Color [R=179, G=179, B=179]::At Location [X:800 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::800 | ELSE | 1 | IF | PIXEL COLOR | Color [R=179, G=179, B=179]::At Location [X:850 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::850 | ELSE | 1 | IF | PIXEL COLOR | Color [R=179, G=179, B=179]::At Location [X:900 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::900 | ELSE | 1 | IF | PIXEL COLOR | Color [R=179, G=179, B=179]::At Location [X:950 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::950 | ELSE | 1 | IF | PIXEL COLOR | Color [R=179, G=179, B=179]::At Location [X:1000 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::1000 2 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 2::1000::1 | MESSAGE PROMPT | Worked::Worked::0 3 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 0 | STOP 4 | IF | INTEGER VARIABLE | %INTEGER4% | IS | 0 | GOTO MACRO LIN
If someone could point me in the right direction it would be much appreciated. Cheers, Zeak
|
|
|
Post by Steve on Oct 24, 2018 0:00:48 GMT
Hi Zeak, Good to hear your getting into conditions. Thank you for posting your code. I have noticed a few problems with your code and the way you have built your conditions. Line 1: - You have nested multiple ELSE statements. Only one ELSE can be used per line. - Your PIXEL COLOR condition has the wrong syntax. It is written incorrectly. If you are unsure of the correct way to write conditions I suggest using the ' Add Condition' tool (right click on the macro and select 'Add Condition'). This structures conditions correctly. Line 2: - Your condition syntax is incorrect. The GREATER THAN is looking for math or a number. 2::1000::1 would be failing. Line 4: - I think maybe you just didn't paste it all in I think I have your after. Paste this in a give it a try: 1 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER4%::0 2 | IF | PIXEL COLOR | At Location [X:750 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::2 3 | IF | PIXEL COLOR | At Location [X:800 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::3 4 | IF | PIXEL COLOR | At Location [X:850 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::4 5 | IF | PIXEL COLOR | At Location [X:900 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::5 6 | IF | PIXEL COLOR | At Location [X:950 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::6 7 | IF | PIXEL COLOR | At Location [X:1000 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::7 8 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 1 | MESSAGE PROMPT | Worked::Worked::0 | AND | 8 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 1 | STOP 9 | IF | INTEGER VARIABLE | %INTEGER4% | IS | 0 | GOTO MACRO LINE | 1
Line 1: Define INTEGER4 to 0 Line 2-7: If the pixel at X 750,800,850,900,950, or 1000, and at Y 150 changes 2 times within 1 second then define integer4 to a number higher than 1 Line 8: If INTEGER4 is greater than 1 (if the pixel did change 2 times in 1 second), then message prompt 'Worked'. AND also IF integer4 is greater than 1 then STOP the macro here. Line 9: Integer is 0 (the pixel condition lines 2 through 7 did not detect 2 changes in 1 second) then go back to line 1 and keep looping. I tested it detected the pixel change by dragging a window over the range. Hope this helps
|
|
|
Post by zeak on Oct 24, 2018 1:16:20 GMT
Hi Steve, Thanks for the quick reply.
Yea your code works, does take a few clicks to finally hit the right line but it works.
Would be nice if it could just watch for user input "click" and put the X Y as a Integer.
Thanks again for the help. Zeak.
PS. I'll post up my completed micro when it done, give you an idea what its used for. Cheers.
|
|
|
Post by Steve on Oct 24, 2018 2:32:13 GMT
Hi Steve, Thanks for the quick reply. Yea your code works, does take a few clicks to finally hit the right line but it works. Would be nice if it could just watch for user input "click" and put the X Y as a Integer. Thanks again for the help. Zeak. PS. I'll post up my completed micro when it done, give you an idea what its used for. Cheers. Thanks Zeak. You can watch the user click for the X Y as the Integer. This can be done when adding the Pixel color and location through when using 'Add Condition' to define a Pixel statement.
|
|
|
Post by zeak on Oct 24, 2018 5:14:34 GMT
Sorry Steve, I'm not understanding. So can the location be updated on the fly as the macro is running?
|
|
|
Post by Steve on Oct 24, 2018 22:15:28 GMT
I think I may have misunderstood what you were implying. It is possible to update the Pixel X and Y location during playback by using variables like %integer% with %mouse_x% and %mouse_y% but it starts to get really complicated and must be tailed to your individual environment, as well as user behavior.
|
|
|
Post by zeak on Oct 29, 2018 23:30:46 GMT
Well Steve,
Here is my mess of a macro.
* | CLEAR VARIABLES 1 | RUN ACTION | DEFINE STRING VARIABLE | %STRING%:: 2 | RUN ACTION | DEFINE STRING VARIABLE | %STRING1%:: 3 | RUN ACTION | DEFINE STRING VARIABLE | %STRING2%:: 4 | RUN ACTION | DEFINE STRING VARIABLE | %STRING3%:: 5 | RUN ACTION | DEFINE STRING VARIABLE | %STRING4%:: 6 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER%::0 7 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER1%::0 8 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::0 9 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER2%::0 10 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER4%::0 * | QUESTION - MOVE INGREDIENT 11 | RUN ACTION | INPUT BOX | Moving Items Location?::MOVE LOCATION::PROMPT_YES_NO::STRING 12 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER%::1 | AND | 12 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 13 | IF | INTEGER VARIABLE | %INTEGER% | IS | 1 | GOTO MACRO LINE | 20 | ELSE | 13 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 14 * | QUESTION - UPDATE INGREDIENT STATUS 14 | RUN ACTION | INPUT BOX | Updating Items Status::UPDATE STATUS::PROMPT_YES_NO::STRING 15 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER%::2 | AND | 15 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 16 | IF | INTEGER VARIABLE | %INTEGER% | IS | 2 | GOTO MACRO LINE | 29 | ELSE | 16 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 17 * | QUESTION - UPTATE INGREDIENT EXPIRY 17 | RUN ACTION | INPUT BOX | Updating Items Expiry::UPDATE EXPIRY::PROMPT_YES_NO::STRING 18 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER%::3 | AND | 18 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 19 | IF | INTEGER VARIABLE | %INTEGER% | IS | 2 | GOTO MACRO LINE | 36 | ELSE | 19 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 999 * | IF MOVE - YES * | MOVE - SITE 20 | RUN ACTION | INPUT BOX | Change Site?::SITE::PROMPT_YES_NO::STRING 21 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER1%::2 | AND | 21 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 22 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 2 | GOTO MACRO LINE | 23 | ELSE | 22 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 0 | GOTO MACRO LINE | 24 23 | RUN ACTION | INPUT BOX | New Site please::SITE::STRING1 * | MOVE - LOCATION 24 | RUN ACTION | INPUT BOX | Change Location?::LOCATION::PROMPT_YES_NO::STRING 25 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER1%::+1 | AND | 25 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 26 | IF | INTEGER VARIABLE | %INTEGER1% | GREATER THAN EQUAL TO | 1 | GOTO MACRO LINE | 27 | ELSE | 26 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 0 | GOTO MACRO LINE | 999 27 | RUN ACTION | INPUT BOX | New Location please::LOCATION::STRING2 28 | RUN ACTION | GOTO MACRO LINE | 36 * | IF STATUS - YES 29 | RUN ACTION | INPUT BOX | Update Status to: 1.INAC 2.ISOLATE 3.OK::UPDATE STATUS::INTEGER1 30 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 1 | DEFINE STRING VARIABLE | %STRING1%::INAC 31 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 2 | DEFINE STRING VARIABLE | %STRING1%::ISOLATE 32 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 3 | DEFINE STRING VARIABLE | %STRING1%::OK 33 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER1%::0 34 | RUN ACTION | GOTO MACRO LINE | 36 * | IF EXPIRY - YES 35 | RUN ACTION | INPUT BOX | Please enter new expiry date (DD/MM/YYYY)::UPDATE EXPIRY::INTEGER1 * | QTY TO CHANGE 36 | RUN ACTION | INPUT BOX | Number of Items to change?::QTY CHANGE::INTEGER3 37 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 36 * | FIND SEARCH BUTTON 38 | RUN ACTION | MESSAGE PROMPT | Please "Click Search" button until prompted otherwise.::FIND SEARCH::0 39 | IF | PIXEL COLOR | At Location [X:750 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::750 40 | IF | PIXEL COLOR | At Location [X:800 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::800 41 | IF | PIXEL COLOR | At Location [X:850 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::850 42 | IF | PIXEL COLOR | At Location [X:900 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::900 43 | IF | PIXEL COLOR | At Location [X:950 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::950 44 | IF | PIXEL COLOR | At Location [X:1000 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::1000 45 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 0 | MESSAGE PROMPT | Search Button location registed, Click OK to continue.::FOUND SEARCH::0 | AND | 45 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 0 | GOTO MACRO LINE 47 46 | IF | INTEGER VARIABLE | %INTEGER4% | IS | 0 | GOTO MACRO LINE | 38 47 | IF | INTEGER VARIABLE | %INTEGER% | IS | 1 | GOTO MACRO LINE | 50 48 | IF | INTEGER VARIABLE | %INTEGER% | IS | 2 | GOTO MACRO LINE | 65 49 | IF | INTEGER VARIABLE | %INTEGER% | IS | 3 | GOTO MACRO LINE | 78 * | MOVE 50 | 1310 | 90 | 1000 | Left Click Down 51 | 1310 | 90 | 500 | Left Click Release 52 | X | X | 500 | Keypress right 53 | X | X | 500 | Keypress Ctrl+ | a 54 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 3 | Keypress %STRING1% 55 | X | X | 500 | Keypress tab 56 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 1 | Keypress %STRING2% | ELSE | 56 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 3 | Keypress %STRING2% 57 | X | X | 500 | Keypress enter 58 | X | X | 500 | Keypress enter 59 | X | X | 500 | Keypress Ctrl+ | enter 60 | X | X | 500 | Keypress Ctrl+ | enter 61 | %INTEGER4% | 140 | 500 | Left Click Down 62 | %INTEGER4% | 140 | 1000 | Left Click Release 63 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::-1 64 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 999 | ELSE | 64 | RUN ACTION | GOTO MACRO LINE | 50 * | STATUS 65 | 1200 | 90 | 1000 | Left Click Down 66 | 1200 | 90 | 500 | Left Click Release 67 | X | X | 500 | Keypress right 68 | X | X | 500 | Keypress tab 69 | X | X | 500 | Keypress tab 70 | X | X | 500 | Keypress tab 71 | X | X | 500 | Keypress %STRING1% 72 | X | X | 500 | Keypress enter 73 | X | X | 500 | Keypress Ctrl+ | enter 74 | %INTEGER4% | 140 | 500 | Left Click Down 75 | %INTEGER4% | 140 | 1000 | Left Click Release 76 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::-1 77 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 999 | ELSE | 77 | RUN ACTION | GOTO MACRO LINE | 65 * | EXPIRY 78 | 1200 | 90 | 1000 | Left Click Down 79 | 1200 | 90 | 500 | Left Click Release 80 | X | X | 500 | Keypress right 81 | X | X | 500 | Keypress Ctrl+ | a 82 | X | X | 500 | Keypress %STRING1% 83 | X | X | 500 | Keypress enter 84 | X | X | 500 | Keypress Ctrl+ | enter 85 | %INTEGER4% | 140 | 500 | Left Click Down 86 | %INTEGER4% | 140 | 1000 | Left Click Release 87 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::-1 88 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 999 | ELSE | 88 | RUN ACTION | GOTO MACRO LINE | 78 CONTINUE 999 | RUN ACTION | INPUT BOX | Do you wish to change something else?::CONTINUE?::PROMPT_YES_NO::STRING 1000 | IF | STRING VARIABLE | %STRING% | IS | YES | GOTO MACRO LINE | 1 | ELSE | 1000 | IF | STRING VARIABLE | %STRING% | IS | NO | GOTO MACRO LINE | 1001 1001 | RUN ACTION | EXIT
|
|
|
Post by Steve on Oct 29, 2018 23:44:02 GMT
Zeak nice macro. I have a suggestion to make your code flow a little better. Try using FOR EACH LINE IN statements to reduce the flow a little. For example your lines 1 through 10 where you clear your variables. This can be done in one line: 1 | FOR | EACH | LINE IN | E:\Macro\clearvariables.mmmacro | RUN For this to work the file clearvariables.mmmacro has the ten lines we need. It looks like this: clearvariables.mmmacro1 | RUN ACTION | DEFINE STRING VARIABLE | %STRING%:: 2 | RUN ACTION | DEFINE STRING VARIABLE | %STRING1%:: 3 | RUN ACTION | DEFINE STRING VARIABLE | %STRING2%:: 4 | RUN ACTION | DEFINE STRING VARIABLE | %STRING3%:: 5 | RUN ACTION | DEFINE STRING VARIABLE | %STRING4%:: 6 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER%::0 7 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER1%::0 8 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::0 9 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER2%::0 10 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER4%::0 Cheers, Steve
|
|
|
Post by zeak on Oct 30, 2018 0:05:35 GMT
Thanks Steve, I'll give that a try.
Had to fix up the macro but because it didn't like looking at line 999 for some reason. when I changed it to a normal listed row it worked properly.
* | CLEAR VARIABLES 1 | RUN ACTION | DEFINE STRING VARIABLE | %STRING%:: 2 | RUN ACTION | DEFINE STRING VARIABLE | %STRING1%:: 3 | RUN ACTION | DEFINE STRING VARIABLE | %STRING2%:: 4 | RUN ACTION | DEFINE STRING VARIABLE | %STRING3%:: 5 | RUN ACTION | DEFINE STRING VARIABLE | %STRING4%:: 6 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER%::0 7 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER1%::0 8 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::0 9 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER2%::0 10 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER4%::0 * | QUESTION - MOVE INGREDIENT 11 | RUN ACTION | INPUT BOX | Moving Items Location?::MOVE LOCATION::PROMPT_YES_NO::STRING 12 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER%::1 | AND | 12 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 13 | IF | INTEGER VARIABLE | %INTEGER% | IS | 1 | GOTO MACRO LINE | 20 | ELSE | 13 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 14 * | QUESTION - UPDATE INGREDIENT STATUS 14 | RUN ACTION | INPUT BOX | Updating Items Status::UPDATE STATUS::PROMPT_YES_NO::STRING 15 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER%::2 | AND | 15 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 16 | IF | INTEGER VARIABLE | %INTEGER% | IS | 2 | GOTO MACRO LINE | 31 | ELSE | 16 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 17 * | QUESTION - UPTATE INGREDIENT EXPIRY 17 | RUN ACTION | INPUT BOX | Updating Items Expiry::UPDATE EXPIRY::PROMPT_YES_NO::STRING 18 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER%::3 | AND | 18 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 19 | IF | INTEGER VARIABLE | %INTEGER% | IS | 2 | GOTO MACRO LINE | 38 | ELSE | 19 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 93 * | IF MOVE - YES * | MOVE - SITE 20 | RUN ACTION | INPUT BOX | Change Site?::SITE::PROMPT_YES_NO::STRING 21 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER1%::2 | AND | 21 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 22 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 2 | GOTO MACRO LINE | 23 | ELSE | 22 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 0 | GOTO MACRO LINE | 25 23 | RUN ACTION | INPUT BOX | New Site please::SITE::STRING1 24 | IF | STRING VARIABLE | %STRING1% | IS | | GOTO MACRO LINE | 23 * | MOVE - LOCATION 25 | RUN ACTION | INPUT BOX | Change Location?::LOCATION::PROMPT_YES_NO::STRING 26 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE INTEGER VARIABLE | %INTEGER1%::+1 | AND | 25 | IF | STRING VARIABLE | %STRING% | IS | YES | DEFINE STRING VARIABLE | %STRING%:: 27 | IF | INTEGER VARIABLE | %INTEGER1% | GREATER THAN EQUAL TO | 1 | GOTO MACRO LINE | 27 | ELSE | 27 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 0 | GOTO MACRO LINE | 93 28 | RUN ACTION | INPUT BOX | New Location please::LOCATION::STRING2 29 | IF | STRING VARIABLE | %STRING2% | IS | | GOTO MACRO LINE | 28 30 | RUN ACTION | GOTO MACRO LINE | 40 * | IF STATUS - YES 31 | RUN ACTION | INPUT BOX | Update Status to: 1.INAC 2.ISOLATE 3.OK::UPDATE STATUS::INTEGER1 32 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 0 | GOTO MACRO LINE | 30 33 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 1 | DEFINE STRING VARIABLE | %STRING1%::INAC 34 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 2 | DEFINE STRING VARIABLE | %STRING1%::ISOLATE 35 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 3 | DEFINE STRING VARIABLE | %STRING1%::OK 36 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER1%::0 37 | RUN ACTION | GOTO MACRO LINE | 40 * | IF EXPIRY - YES 38 | RUN ACTION | INPUT BOX | Please enter new expiry date (DD/MM/YYYY)::UPDATE EXPIRY::INTEGER1 39 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 0 | GOTO MACRO LINE | 38 * | QTY TO CHANGE 40 | RUN ACTION | INPUT BOX | Number of Items to change?::QTY CHANGE::INTEGER3 41 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 40 * | FIND SEARCH BUTTON 42 | RUN ACTION | MESSAGE PROMPT | Please "Click Search" button until prompted otherwise.::FIND SEARCH::0 43 | IF | PIXEL COLOR | At Location [X:750 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::750 44 | IF | PIXEL COLOR | At Location [X:800 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::800 45 | IF | PIXEL COLOR | At Location [X:850 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::850 46 | IF | PIXEL COLOR | At Location [X:900 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::900 47 | IF | PIXEL COLOR | At Location [X:950 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::950 48 | IF | PIXEL COLOR | At Location [X:1000 Y:150] | CHANGES::2::1::0 | DEFINE INTEGER VARIABLE | %INTEGER4%::1000 49 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 0 | MESSAGE PROMPT | Search Button location registed, Click OK to continue.::FOUND SEARCH::0 | AND | 49 | IF | INTEGER VARIABLE | %INTEGER4% | GREATER THAN | 0 | GOTO MACRO LINE 51 50 | IF | INTEGER VARIABLE | %INTEGER4% | IS | 0 | GOTO MACRO LINE | 43 51 | IF | INTEGER VARIABLE | %INTEGER% | IS | 1 | GOTO MACRO LINE | 54 52 | IF | INTEGER VARIABLE | %INTEGER% | IS | 2 | GOTO MACRO LINE | 69 53 | IF | INTEGER VARIABLE | %INTEGER% | IS | 3 | GOTO MACRO LINE | 82 * | MOVE 54 | 1310 | 90 | 1000 | Left Click Down 55 | 1310 | 90 | 500 | Left Click Release 56 | X | X | 500 | Keypress right 57 | X | X | 500 | Keypress Ctrl+ | a 58 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 3 | Keypress %STRING1% 59 | X | X | 500 | Keypress tab 60 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 1 | Keypress %STRING2% | ELSE | 60 | IF | INTEGER VARIABLE | %INTEGER1% | IS | 3 | Keypress %STRING2% 61 | X | X | 500 | Keypress enter 62 | X | X | 500 | Keypress enter 63 | X | X | 500 | Keypress Ctrl+ | enter 64 | X | X | 500 | Keypress Ctrl+ | enter 65 | %INTEGER4% | 140 | 500 | Left Click Down 66 | %INTEGER4% | 140 | 1000 | Left Click Release 67 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::-1 68 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 93 | ELSE | 68 | RUN ACTION | GOTO MACRO LINE | 54 * | STATUS 69 | 1200 | 90 | 1000 | Left Click Down 70 | 1200 | 90 | 500 | Left Click Release 71 | X | X | 500 | Keypress right 72 | X | X | 500 | Keypress tab 73 | X | X | 500 | Keypress tab 74 | X | X | 500 | Keypress tab 75 | X | X | 500 | Keypress %STRING1% 76 | X | X | 500 | Keypress enter 77 | X | X | 500 | Keypress Ctrl+ | enter 78 | %INTEGER4% | 140 | 500 | Left Click Down 79 | %INTEGER4% | 140 | 1000 | Left Click Release 80 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::-1 81 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 93 | ELSE | 77 | RUN ACTION | GOTO MACRO LINE | 69 * | EXPIRY 82 | 1200 | 90 | 1000 | Left Click Down 83 | 1200 | 90 | 500 | Left Click Release 84 | X | X | 500 | Keypress right 85 | X | X | 500 | Keypress Ctrl+ | a 86 | X | X | 500 | Keypress %STRING1% 87 | X | X | 500 | Keypress enter 88 | X | X | 500 | Keypress Ctrl+ | enter 89 | %INTEGER4% | 140 | 500 | Left Click Down 90 | %INTEGER4% | 140 | 1000 | Left Click Release 91 | RUN ACTION | DEFINE INTEGER VARIABLE | %INTEGER3%::-1 92 | IF | INTEGER VARIABLE | %INTEGER3% | IS | 0 | GOTO MACRO LINE | 93 | ELSE | 92 | RUN ACTION | GOTO MACRO LINE | 82 * | CONTINUE 93 | RUN ACTION | INPUT BOX | Do you wish to change something else?::CONTINUE?::PROMPT_YES_NO::STRING 94 | IF | STRING VARIABLE | %STRING% | IS | YES | GOTO MACRO LINE | 1 | ELSE | 94 | IF | STRING VARIABLE | %STRING% | IS | NO | GOTO MACRO LINE | 95 95 | RUN ACTION | EXIT
I also added checks to make sure the STRING and INTEGERs are being entered in and not just skipped.
|
|
|
Post by zeak on Oct 30, 2018 0:08:39 GMT
its annoying that relist rows doesn't update the row number after ELSE, AND, OR and the ACTION row if its a GOTO MACRO LINE.
EDIT: Is there a way to bring INPUT BOX to the front without un-minimizing the MMM program its self.
|
|
|
Post by Steve on Oct 30, 2018 0:19:04 GMT
Yeah it is a little annoying. GOTO needs to be a HEADING not a LINE. Something like this: GOTO MACRO HEADING | Macro Start
At the moment GOTO MACRO LINE is bound to the actual macro line number. So above with your GOTO MACRO LINE 1001, this will never find line 1001 and will check each line number until it ends. The real line number for your line 1001 is line 91. Defining GOTO LINE 1001 takes the macro to the end regardless.
GOTO MACRO HEADING will be making it's way into an upcoming update.
|
|
|
Post by Steve on Oct 30, 2018 0:22:04 GMT
EDIT: Is there a way to bring INPUT BOX to the front without un-minimizing the MMM program its self. Yes - uncheck 'On Top' or/and disable 'On Top enabled at startup from the program options. When the main macro is 'on top' is remands in front of every window.
|
|
|
Post by zeak on Nov 5, 2018 4:30:52 GMT
I know this is going more into Ideas for Improvements but would it be possible to make this program find a picture on screen and output into a string or multiple integers for X and Y locations??
Example
1 | IF | PICTURE | FROM FILE | C:\Users\User\Documents\SearchButton.png | IS THE SAME | DEFINE INTEGER VARIABLE | %MOUSE_X% | %MOUSE_Y%
1 | IF | PICTURE | FROM FILE | C:\Users\User\Documents\SearchButton.png | IS THE SAME | CONTINUE
OR
If you could just make the program wait for user to click and then output the X and Y location of the click as MOUSE_X and MOUSE_Y to be later used.
|
|
|
Post by zeak on Nov 6, 2018 5:09:49 GMT
Hey Steve,
Could let me know what is going wrong with this piece of code, it seems to detect to mouse before its even near the location. I've got a feeling the AND is not working in between them and they are just reading the GREATER THEN and LESS THEN on their own.
1 | IF | MOUSE POSITION EQUALS | {X=700,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::725 | AND | 1 | IF | MOUSE POSITION EQUALS | {X=750,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::725 2 | IF | MOUSE POSITION EQUALS | {X=750,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::775 | AND | 2 | IF | MOUSE POSITION EQUALS | {X=800,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::775 3 | IF | MOUSE POSITION EQUALS | {X=800,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::825 | AND | 3 | IF | MOUSE POSITION EQUALS | {X=850,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::825 4 | IF | MOUSE POSITION EQUALS | {X=850,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::875 | AND | 4 | IF | MOUSE POSITION EQUALS | {X=900,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::875 5 | IF | MOUSE POSITION EQUALS | {X=900,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::925 | AND | 5 | IF | MOUSE POSITION EQUALS | {X=950,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::925 6 | IF | MOUSE POSITION EQUALS | {X=950,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::975 | AND | 6 | IF | MOUSE POSITION EQUALS | {X=1000,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::975 7 | IF | MOUSE POSITION EQUALS | {X=1000,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::1025 | AND | 7 | IF | MOUSE POSITION EQUALS | {X=1050,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::1025 8 | IF | INTEGER VARIABLE | %INTEGER% | IS | 0 | GOTO MACRO LINE | 1 9 | IF | INTEGER VARIABLE | %INTEGER% | IS NOT | 0 | MESSAGE PROMPT | %INTEGER%::YES::0 | AND | 9 | RUN ACTION | STOP
|
|
|
Post by Steve on Nov 6, 2018 5:52:49 GMT
Hi, The macro code look fine, works as you have written and there are no errors. The MMM event log can help troubleshoot your macro. Maybe you are not understanding MOUSE POSITION EQUALS with GRATER THAN or LESS THAN Your line 1: 1 | IF | MOUSE POSITION EQUALS | {X=700,Y=130} | GREATER THAN | DEFINE INTEGER VARIABLE | %INTEGER%::725 | AND | 1 | IF | MOUSE POSITION EQUALS | {X=750,Y=155} | LESS THAN | DEFINE INTEGER VARIABLE | %INTEGER%::725 This reads like this: - If the mouse position equals an X and Y value greater than 700 for X and 130 for Y then define the integer variable %integer% to 725 - the outcome for this line will be to define %integer% to 725 only if X is greater than 700 and if Y is greater than 130. Both X and Y need to be greater. Then the next condition to run after the AND on line 1 - If the mouse position equals an X and Y value less than 750 for X and 155 for Y then define the integer variable %integer% to 725 - the outcome for this line will be to define %integer% to 725 only if X is less than 750 and if Y is less than 155. Both X and Y need to be less. Hope this helps
|
|
|
Post by zeak on Nov 12, 2018 0:52:11 GMT
So from what I can understand, your AND is not a logical AND to define that both conditions have to equal true to define the integer but instead it is more or less a CONTINUE for the line?
|
|
|
Post by Steve on Nov 12, 2018 1:48:37 GMT
Yeah AND is more or less 'and then do this' rather than a logical AND. IF CONDITION 1 = TRUE [ACTION] AND [CONDITION 2 - ACTION] AND [CONDITION 3 - ACTION] If condition 1 fails then condition 2 and 3 never occur. So 'and then do this'.
|
|
|
Post by zeak on Nov 20, 2018 22:57:48 GMT
Hi Steve,
The reason I am trying to do a MOUSE POSITION EQUALS with GRATER THAN and LESS THAN instead of MOUSE POSITION NEAR is because NEAR is to big of a area for the selection area I am requiring. Is the any other options for NEAR or a way to get the AND to be logical.
|
|
|
Post by Steve on Nov 21, 2018 4:17:08 GMT
A PIXEL RANGE change condition will detect a mouse movement within the selected range. Have you considered PIXEL RANGE ( www.turnssoft.com/conditions.html#pixelrange)? Something like: 1 | IF | PIXEL RANGE | At Location [X:700 Y:134]::Size [W:50 H:50] | CHANGES::1::0::0 | DEFINE INTEGER VARIABLE | %INTEGER%::725
|
|
|
Post by zeak on Nov 22, 2018 0:34:05 GMT
As always thanks for the help. Just wondering could you show me an example of what you mentioned in this post.
It is possible to update the Pixel X and Y location during playback by using variables like %integer% with %mouse_x% and %mouse_y% but it starts to get really complicated and must be tailed to your individual environment, as well as user behavior.
|
|