Jump to content
Macro Express Forums

rberq

Members
  • Posts

    1,200
  • Joined

  • Last visited

  • Days Won

    61

Posts posted by rberq

  1. Here are two macros to play with and refine as desired.  They are not 100 percent checked out.  The first just initializes some variables, and probably never has to be manually run.  The second macro seems to be working pretty well.  It dynamically tiles up to eight windows of any sort.  When a window has focus, invoke the macro to add it to the list to be tiled.  Up to three windows are tiled horizontally in one row.  Four through eight windows are tiled in two rows.  On my monitor, eight tiles are pretty small to work with.  If you close any window previously selected, all other selected windows are dropped from the tiling.  


    <COMMENT Value=" "/>
    <LOG ERRORS Filename="C:\\Temp\\MacroExpressProLogFiles\\MacroExpressPro_Macro_Log_File.txt" Hide_Errors="TRUE"/>
    <LOG MESSAGES Filename="C:\\Temp\\MacroExpressProLogFiles\\MacroExpressPro_Macro_Log_File.txt" Message="Macro executed: Tile_1" Stamp="TRUE"/>
    <COMMENT Value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
    <KEYSTROKE SPEED Delay="10"/>
    <MOUSE SPEED Delay="30"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Line Feed (New Line) character ascii 10"/>
    <VARIABLE SET TO ASCII CHAR Value="10" Destination="%LINEFEED%"/>
    <COMMENT Value="Carriage Return character ascii 13"/>
    <VARIABLE SET TO ASCII CHAR Value="13" Destination="%CARRIAGERETURN%"/>
    <COMMENT Value="Carriage Return / Line Feed combination characters ascii 13 + ascii 10"/>
    <VARIABLE SET TO ASCII CHAR Value="13" Destination="%CRLF%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%CRLF%" Variable="%LINEFEED%" NoEmbeddedVars="FALSE"/>
    <COMMENT Value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Macro clears the variables used in cascading windows, and saves them for use by the cascading macro"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Clear variables previously stored, if any, then save them for use by tiling macro"/>
    <REPEAT START Start="1" Step="1" Count="9" Save="TRUE" Variable="%indx%"/>
    <IF VARIABLE Variable="%indx%" Condition="\x00" Value="9" IgnoreCase="FALSE"/>
    <VARIABLE SET STRING Option="\x00" Destination="%w_name[%indx%]%" Value="End of Table" NoEmbeddedVars="FALSE" _COMMENT="array"/>
    <ELSE/>
    <VARIABLE SET STRING Option="\x00" Destination="%w_name[%indx%]%" Value="*" NoEmbeddedVars="FALSE" _COMMENT="array"/>
    <END IF/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%w_top[%indx%]%" Value="0" _COMMENT="array"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%w_left[%indx%]%" Value="0" _COMMENT="array"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%w_width[%indx%]%" Value="0" _COMMENT="array"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%w_height[%indx%]%" Value="0" _COMMENT="array"/>
    <END REPEAT/>
    <COMMENT Value=" "/>
    <VARIABLE SAVE Option="\x01"/>
    <VARIABLE SAVE Option="\x02"/>
    <COMMENT Value=" "/>
    <VARIABLE SET STRING Option="\x00" Destination="%textbox%" NoEmbeddedVars="FALSE" _COMMENT="Diagnostic display of variables"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="Macro \"Tile_1\" has reset list of windows to be tiled" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <REPEAT START Start="1" Step="1" Count="9" Save="TRUE" Variable="%indx%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%w_name[%indx%]%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_top[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_left[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_width[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_height[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <END REPEAT/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 %textbox%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="923" Height="440" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0"/>
    <COMMENT Value=" "/>
    <MACRO RETURN/>
    <COMMENT Value=" "/>

     

     

     

     

     

    <COMMENT Value=" "/>
    <LOG ERRORS Filename="C:\\Temp\\MacroExpressProLogFiles\\MacroExpressPro_Macro_Log_File.txt" Hide_Errors="TRUE"/>
    <LOG MESSAGES Filename="C:\\Temp\\MacroExpressProLogFiles\\MacroExpressPro_Macro_Log_File.txt" Message="Macro executed: Tile_2" Stamp="TRUE"/>
    <COMMENT Value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
    <KEYSTROKE SPEED Delay="10"/>
    <MOUSE SPEED Delay="30"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Line Feed (New Line) character ascii 10"/>
    <VARIABLE SET TO ASCII CHAR Value="10" Destination="%LINEFEED%"/>
    <COMMENT Value="Carriage Return character ascii 13"/>
    <VARIABLE SET TO ASCII CHAR Value="13" Destination="%CARRIAGERETURN%"/>
    <COMMENT Value="Carriage Return / Line Feed combination characters ascii 13 + ascii 10"/>
    <VARIABLE SET TO ASCII CHAR Value="13" Destination="%CRLF%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%CRLF%" Variable="%LINEFEED%" NoEmbeddedVars="FALSE"/>
    <COMMENT Value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Macro tiles present window and all others previously selected for tiling"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Restore variables previously stored "/>
    <VARIABLE RESTORE Option="\x01"/>
    <VARIABLE RESTORE Option="\x02"/>
    <COMMENT Value=" "/>
    <COMMENT Value="If any previously selected window has been closed, clear entire table of windows "/>
    <COMMENT Value="Also clear if slot 9 of table does not equal \"End of Table\""/>
    <IF VARIABLE Variable="%w_name[9]%" Condition="\x01" Value="End of Table" IgnoreCase="FALSE" _COMMENT="is this table slot empty (asterisk)???"/>
    <MACRO RUN Use_ID="FALSE" Name="Tile_1" ID="-1" Wait="TRUE" _COMMENT="Run macro that clears table"/>
    <VARIABLE RESTORE Option="\x01"/>
    <VARIABLE RESTORE Option="\x02"/>
    <END IF/>
    <REPEAT START Start="1" Step="1" Count="8" Save="TRUE" Variable="%indx%"/>
    <IF VARIABLE Variable="%w_name[%indx%]%" Condition="\x01" Value="*" IgnoreCase="FALSE" _COMMENT="is this table slot empty (asterisk)???"/>
    <IF WINDOW Option="\x01" Title="%w_name[%indx%]%" Partial="FALSE" Wildcards="FALSE"/>
    <ELSE/>
    <MACRO RUN Use_ID="FALSE" Name="Tile_1" ID="-1" Wait="TRUE" _COMMENT="Run macro that clears table"/>
    <VARIABLE RESTORE Option="\x01"/>
    <VARIABLE RESTORE Option="\x02"/>
    <REPEAT EXIT/>
    <END IF/>
    <END IF/>
    <END REPEAT/>
    <COMMENT Value=" "/>
    <COMMENT Value="Find name of present window, store name in array if not already there "/>
    <REPEAT WITH WINDOWS ToRetrieve="\x01" SortOrder="\x01" Destination="%present_window%"/>
    <IF WINDOW Option="\x00" Title="%present_window%" Partial="FALSE" Wildcards="FALSE"/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 %present_window%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="278" Height="200" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/>
    <REPEAT START Start="1" Step="1" Count="8" Save="TRUE" Variable="%indx%"/>
    <IF VARIABLE Variable="%w_name[%indx%]%" Condition="\x00" Value="%present_window%" IgnoreCase="FALSE" _COMMENT="present window already in table???"/>
    <REPEAT EXIT/>
    <ELSE/>
    <IF VARIABLE Variable="%w_name[%indx%]%" Condition="\x00" Value="*" IgnoreCase="FALSE" _COMMENT="is this table slot empty (asterisk)???"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%w_name[%indx%]%" Variable="%present_window%" NoEmbeddedVars="FALSE" _COMMENT="yes, empty slot, insert name of present window into table"/>
    <REPEAT EXIT/>
    <END IF/>
    <END IF/>
    <END REPEAT/>
    <END IF/>
    <END REPEAT/>
    <COMMENT Value=" "/>
    <COMMENT Value="AT THIS POINT THE W_NAME ARRAY CONTAINS PREVIOUSLY SELECTED WINDOWS PLUS THE ONE SELECTED BY THIS RUN OF THE MACRO "/>
    <COMMENT Value=" "/>
    <COMMENT Value="Count how many window have been selected for tiling, previously and now "/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%win_count%" Value="0"/>
    <REPEAT START Start="1" Step="1" Count="8" Save="TRUE" Variable="%indx%"/>
    <IF VARIABLE Variable="%w_name[%indx%]%" Condition="\x01" Value="*" IgnoreCase="FALSE" _COMMENT="is this table slot empty (asterisk)???"/>
    <VARIABLE MODIFY INTEGER Option="\x07" Destination="%win_count%" _COMMENT="no, add to count of windows to be tiled"/>
    <END IF/>
    <END REPEAT/>
    <IF VARIABLE Variable="%win_count%" Condition="\x00" Value="0" IgnoreCase="FALSE" _COMMENT="If no windows to be tiled, exit from macro"/>
    <VARIABLE SAVE Option="\x01" _COMMENT="Save updated state of all variables "/>
    <VARIABLE SAVE Option="\x02"/>
    <MACRO RETURN/>
    <END IF/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 %win_count% windows to be tiled\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="278" Height="200" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Get display width and height, hard-code base location for top-left tile "/>
    <VARIABLE SET INTEGER Option="\x06" Destination="%scrn_width%"/>
    <VARIABLE SET INTEGER Option="\x07" Destination="%scrn_height%"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_base_top%" Value="0" _COMMENT="Change this if you want tiling to start at other than 0,0"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_base_left%" Value="0" _COMMENT="Change this if you want tiling to start at other than 0,0"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%scrn_height%" Value1="%scrn_height%" Value2="%tile_base_top%"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%scrn_width%" Value1="%scrn_width%" Value2="%tile_base_left%"/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value="Compute size for tiling maximum four windows across and two down "/>
    <IF VARIABLE Variable="%win_count%" Condition="\x00" Value="1" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_width%" Value1="%scrn_width%" Value2="2"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_height%" Value1="%scrn_height%" Value2="1"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_rows%" Value="1"/>
    <END IF/>
    <IF VARIABLE Variable="%win_count%" Condition="\x00" Value="2" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_width%" Value1="%scrn_width%" Value2="2"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_height%" Value1="%scrn_height%" Value2="1"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_rows%" Value="1"/>
    <END IF/>
    <IF VARIABLE Variable="%win_count%" Condition="\x00" Value="3" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_width%" Value1="%scrn_width%" Value2="3"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_height%" Value1="%scrn_height%" Value2="1"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_rows%" Value="1"/>
    <END IF/>
    <IF VARIABLE Variable="%win_count%" Condition="\x00" Value="4" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_width%" Value1="%scrn_width%" Value2="2"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_height%" Value1="%scrn_height%" Value2="2"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_rows%" Value="2"/>
    <END IF/>
    <IF VARIABLE Variable="%win_count%" Condition="\x03" Value="4" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_width%" Value1="%scrn_width%" Value2="4"/>
    <VARIABLE MODIFY INTEGER Option="\x03" Destination="%tile_height%" Value1="%scrn_height%" Value2="2"/>
    <VARIABLE SET INTEGER Option="\x00" Destination="%tile_rows%" Value="2"/>
    <END IF/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value="Plug winlow locations and sizes into arrays "/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%" _COMMENT="set leftmost tile position to negative location"/>
    <IF VARIABLE Variable="%win_count%" Condition="\x03" Value="0" IgnoreCase="FALSE" _COMMENT="If no windows to be tiled, exit macro."/>
    <ELSE/>
    <VARIABLE SAVE Option="\x01" _COMMENT="Save updated state of all variables "/>
    <VARIABLE SAVE Option="\x02"/>
    <MACRO RETURN/>
    <END IF/>
    <REPEAT START Start="1" Step="1" Count="%win_count%" Save="TRUE" Variable="%indx%"/>
    <VARIABLE MODIFY INTEGER Option="\x00" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <IF VARIABLE Variable="%w_name[%indx%]%" Condition="\x00" Value="*" IgnoreCase="FALSE" _COMMENT="is this table slot empty (asterisk)???  If so, quit tiling."/>
    <REPEAT EXIT/>
    <END IF/>
    <IF VARIABLE Variable="%tile_rows%" Condition="\x00" Value="2" IgnoreCase="FALSE" _COMMENT="If done with top row of 2 out of 4 total tiles, reset tile location pointers for bottom row of tiles"/>
    <AND/>
    <IF VARIABLE Variable="%win_count%" Condition="\x00" Value="4" IgnoreCase="FALSE"/>
    <AND/>
    <IF VARIABLE Variable="%indx%" Condition="\x00" Value="3" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x00" Destination="%tile_base_top%" Value1="%tile_base_top%" Value2="%tile_height%"/>
    <END IF/>
    <IF VARIABLE Variable="%tile_rows%" Condition="\x00" Value="2" IgnoreCase="FALSE" _COMMENT="If done with top row of 4 out of more than 4 total tiles, reset tile location pointers for bottom row of tiles"/>
    <AND/>
    <IF VARIABLE Variable="%win_count%" Condition="\x03" Value="4" IgnoreCase="FALSE"/>
    <AND/>
    <IF VARIABLE Variable="%indx%" Condition="\x00" Value="5" IgnoreCase="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x01" Destination="%tile_base_left%" Value1="%tile_base_left%" Value2="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x00" Destination="%tile_base_top%" Value1="%tile_base_top%" Value2="%tile_height%"/>
    <END IF/>
    <VARIABLE MODIFY INTEGER Option="\x06" Destination="%w_top[%indx%]%" Variable="%tile_base_top%"/>
    <VARIABLE MODIFY INTEGER Option="\x06" Destination="%w_left[%indx%]%" Variable="%tile_base_left%"/>
    <VARIABLE MODIFY INTEGER Option="\x06" Destination="%w_width[%indx%]%" Variable="%tile_width%"/>
    <VARIABLE MODIFY INTEGER Option="\x06" Destination="%w_height[%indx%]%" Variable="%tile_height%"/>
    <END REPEAT/>
    <COMMENT Value=" "/>
    <COMMENT Value="Place the window tiles on the screen "/>
    <MINIMIZE ALL WINDOWS/>
    <REPEAT START Start="1" Step="1" Count="8" Save="TRUE" Variable="%indx%"/>
    <IF VARIABLE Variable="%w_name[%indx%]%" Condition="\x00" Value="*" IgnoreCase="FALSE" _COMMENT="is this table slot empty (asterisk)???  If so, quit tiling."/>
    <REPEAT EXIT/>
    <END IF/>
    <WINDOW ACTIVATE Title="%w_name[%indx%]%" Exact_Match="TRUE" Wildcards="FALSE" _IGNORE="0x0006"/>
    <WINDOW SHOW Option="\x01" Title="%w_name[%indx%]%" Partial="FALSE" Wildcards="FALSE" _IGNORE="0x0006"/>
    <DELAY Flags="\x13" Time="999" _ENABLED="FALSE"/>
    <WINDOW MINIMIZE Option="\x01" Title="%w_name[%indx%]%" Partial="FALSE" Wildcards="FALSE" _IGNORE="0x0006" _ENABLED="FALSE"/>
    <WINDOW MOVE AND SIZE Use_Current="FALSE" Title="%w_name[%indx%]%" Exact_Match="TRUE" Use_Wildcards="FALSE" Left="%w_left[%indx%]%" Top="%w_top[%indx%]%" Width="%w_width[%indx%]%" Height="%w_height[%indx%]%" Monitor="0"/>
    <WINDOW RESIZE Option="\x01" Title="%w_name[%indx%]%" Partial="FALSE" Wildcards="FALSE" Method="\x00" Width="%tile_width%" Height="%tile_height%" _IGNORE="0x0006" _ENABLED="FALSE"/>
    <WINDOW REPOSITION Option="\x01" Title="%w_name[%indx%]%" Partial="FALSE" Wildcards="FALSE" Method="\x00" Left="%tile_base_left%" Top="%tile_base_top%" Monitor="0" _IGNORE="0x0006" _ENABLED="FALSE"/>
    <DELAY Flags="\x13" Time="999" _ENABLED="FALSE"/>
    <TEXT BOX DISPLAY Title="halt" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 Press Enter to continue with next window\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="278" Height="200" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/>
    <END REPEAT/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value=" "/>
    <COMMENT Value="Save updated state of all variables  "/>
    <VARIABLE SAVE Option="\x01" _COMMENT="Save updated state of all variables "/>
    <VARIABLE SAVE Option="\x02"/>
    <COMMENT Value=" "/>
    <COMMENT Value="Diagnostic display of variables "/>
    <VARIABLE SET STRING Option="\x00" Destination="%textbox%" NoEmbeddedVars="FALSE" _COMMENT="Diagnostic display of variables"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="tile rows = " NoEmbeddedVars="FALSE" _COMMENT="************************"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%tile_rows%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="tile height = " NoEmbeddedVars="FALSE" _COMMENT="************************"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%tile_height%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="tile width = " NoEmbeddedVars="FALSE" _COMMENT="************************"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%tile_width%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="Window Name - Top - Left - Height - Width" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <REPEAT START Start="1" Step="1" Count="8" Save="TRUE" Variable="%indx%" _COMMENT="************************"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%w_name[%indx%]%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_top[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_left[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_height[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x06" Destination="%textbox%" Value="   " NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY INTEGER Option="\x04" Destination="%w_width[%indx%]%" Variable="%text%"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%text%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%textbox%" Variable="%CRLF%" NoEmbeddedVars="FALSE"/>
    <END REPEAT/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 %textbox%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="923" Height="440" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/>
    <COMMENT Value=" "/>
    <MACRO RETURN/>
    <COMMENT Value=" "/>

     

     

  2. After the web site has loaded, the macro can type ALT-d to highlight the URL.  Then copy the URL to clipboard, set a text variable from the clipboard, and check for the value of x.  Something like this:

     

    REPEAT UNTIL COUNT NOT EQUAL COUNT (that is, repeat forever)

       LOAD WEBSITE

       WAIT FOR WEBSITE TO LOAD

       TYPE ALT-d (highlights the URL)

       TYPE CTRL-c (copy URL to clipboard)

       VARIABLE SET STRING URLNAME FROM CLIPBOARD

       REMOVE ALL EXCEPT LAST CHARACTER FROM URLNAME

       IF URLNAME EQUALS 1 THRU 9

       ELSE

          REPEAT EXIT

       ENDIF

    END REPEAT

  3. 4 hours ago, acantor said:

    I was able to prove (to myself, anyways) that the restore instruction needed time before the variable was available.

    Maybe a difference in ME versions?  I am running ME Pro 4.9.1.1.  I can't make it fail, saving and restoring many million-byte variables and immediately checking the result of the restore, with no delay allowed. 

     

    <COMMENT Value="Make lots of big variables to be saved and restored"/>
    <VARIABLE SET STRING Option="\x00" Destination="%many_bytes%" Value="a" NoEmbeddedVars="FALSE"/>
    <REPEAT START Start="1" Step="1" Count="20" Save="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x07" Destination="%many_bytes%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <END REPEAT/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 many_bytes = %many_bytes%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="1195" Height="483" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%a%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%b%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%c%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%d%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%e%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%f%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%g%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%h%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%i%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%j%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%k%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%l%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%m%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%n%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%o%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%p%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%q%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%r%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%s%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%t%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%u%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%v%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%w%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%x%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%y%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%z%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/>
    <COMMENT Value=" "/>
    <VARIABLE SET INTEGER Option="\x0D" Destination="%length%" Text_Variable="%z%"/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 length of z = %length%\r\n\\par z = %many_bytes%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="1195" Height="483" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/>
    <COMMENT Value="Make two variables to be tested "/>
    <VARIABLE SET STRING Option="\x00" Destination="%clip1%" Value="clip1" NoEmbeddedVars="FALSE"/>
    <VARIABLE SET STRING Option="\x00" Destination="%clip2%" Value="clip2" NoEmbeddedVars="FALSE"/>
    <COMMENT Value=" "/>
    <VARIABLE SAVE Option="\x00"/>
    <COMMENT Value=" "/>
    <VARIABLE SET STRING Option="\x00" Destination="%clip1%" Value="     " NoEmbeddedVars="FALSE"/>
    <VARIABLE SET STRING Option="\x00" Destination="%clip2%" Value="     " NoEmbeddedVars="FALSE"/>
    <VARIABLE RESTORE Option="\x01"/>
    <VARIABLE MODIFY STRING Option="\x08" Destination="%clip2%" Variable="%clip1%" NoEmbeddedVars="FALSE"/>
    <COMMENT Value=" "/>
    <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 clip1=%clip1%\r\n\\par clip2=%clip2%\\f1 \r\n\\par \r\n\\par }\r\n" Left="Center" Top="Center" Width="278" Height="200" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0"/>
    <COMMENT Value=" "/>
    <MACRO RETURN/>

     

     

  4. 9 hours ago, acantor said:
    Variable Restore: Restore Text Variables
    Delay: 300 milliseconds
    Text Type (Simulate Keystrokes): %Clip1%

    I like your idea of the right arrow key as a visual cue.  Also putting a delay after the Clipboard Copy, lest the set-string-from-clipboard should happen before the clipboard has been populated. 

     

    However, I would be shocked and dismayed if ME requires an explicit delay after a Restore Variables command.  (Though I confess I haven't tested it.)  If there is a timing problem, perhaps a longer Keystroke Speed command would make the typing more reliable. 

  5. If you wrote the ctrl-1 macro, then copied it to make the ctrl-2 macro, then ctrl-2 will still contain variable %Clip1% with a null value.  So when ctrl-2 saves the variables, %Clip2% will be saved correctly, but %Clip1% will be saved as null, and subsequently restored as null.  So ctrl-2 will in fact wipe out %Clip1%.  Likewise, running macro ctrl-3 will wipe out %Clip1% and %Clip2%, ctrl-4 will wipe out %Clip1% and %Clip2% and %Clip3%, and so on. 

     

    Click on the Variables tab in your ctrl-x macros and if there are "unauthorized" %Clip-x% variables, delete them. 

     

    If you coded all the ctrl-x macros from scratch, then ignore everything I said. 

  6. How about using a single macro to copy all four cells:

     

    Manually click into cell B1

    Ctrl-1 to start macro

        Macro types Ctrl-c to copy the cell into clipboard

        Macro saves clipboard to T[1] variable

        Macro types ESC to exit from copy mode

        Macro types ArrowRight several times to get to cell F1

     

        Macro types Ctrl-c to copy the cell into clipboard

        Macro saves clipboard to [T2] variable

        Macro types ESC to exit from copy mode

        Macro types ArrowRight several times to get to cell H1

     

        Continue with similar coding until the four cells have been copied into T[1] through T[4]

     

    Likewise, your second macro can type T[1] into the cell you manually select, navigate by typing ArrowRight to the next cell, type T[2] into that cell, and so on.  Let the two macros do the navigation from cell to cell, rather than you doing it manually.

     

  7. 1 hour ago, acantor said:

    My "aha" moment was realizing the second half of the script was unnecessary. All I had to do was change the pattern once, and then undo.

     

    Clever.  I didn't think of "undo".

     

    I like your third solution best, because there is no need to navigate through secondary panels.  Just a couple quick keystrokes and it's done.  In case the view has been previously shifted so the active cell is not visible, adding the ArrowRight-Arrow left before selecting row and column will bring it back into view.

  8. This version works very fast (again, using Excel 2010.)  The hotkey to activate it is RightArrow.  The macro clears the background color (if any) of the current cell, TABs right to the next cell, and sets background color red.  Similar macros could be written for left/up/down arrows, so that the moved-to cell will be colored and others not colored.  In England, they will be coloured / not coloured. 

     

    Note keystroke speed zero -- Excel is successfully buffering keystrokes, which helps the process run fast.  There is one problem with this macro -- notice that the macro TABs to the next cell rather than simulating right arrow.  That's because a simulated right arrow is the hotkey that starts the macro running again, and again, and again ....  Using TAB avoids the problem for left/right movement, but I'm not sure what to do about up and down movement.  

     

    //  
    // Highlight Excel cell by making its background red
    Keystroke Speed: 0 milliseconds
    // clear color of current cell, if any
    Text Type (Simulate Keystrokes): <CTRLD>1<CTRLU> // format cells
    Text Type (Simulate Keystrokes): pff             // assure "fill" tab
    Text Type (Simulate Keystrokes): <ALTD>c<ALTU>   // background color
    Text Type (Simulate Keystrokes): <ENTER>         // select no color
    Text Type (Simulate Keystrokes): <TAB><TAB><TAB><TAB><TAB><ENTER> // tab to OK and exit
    // arrow right to next cell
    Text Type (Simulate Keystrokes): <TAB>   
    // set color of next cell to red
    Text Type (Simulate Keystrokes): <CTRLD>1<CTRLU> // format cells
    Text Type (Simulate Keystrokes): pff             // assure "fill" tab
    Text Type (Simulate Keystrokes): <ALTD>c<ALTU>   // background color
    Text Type (Simulate Keystrokes): <ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ENTER> // select red
    Text Type (Simulate Keystrokes): <TAB><TAB><TAB><TAB><TAB><ENTER> // tab to OK and exit
    Macro Return
    //  

     

    <COMMENT Value=" "/>
    <COMMENT Value="Highlight Excel cell by making its background red "/>
    <KEYSTROKE SPEED Delay="0"/>
    <COMMENT Value="clear color of current cell, if any "/>
    <TEXT TYPE Action="0" Text="<CTRLD>1<CTRLU>" _COMMENT="format cells"/>
    <TEXT TYPE Action="0" Text="pff" _COMMENT="assure \"fill\" tab"/>
    <TEXT TYPE Action="0" Text="<ALTD>c<ALTU>" _COMMENT="background color"/>
    <TEXT TYPE Action="0" Text="<ENTER>" _COMMENT="select no color"/>
    <TEXT TYPE Action="0" Text="<TAB><TAB><TAB><TAB><TAB><ENTER>" _COMMENT="tab to OK and exit"/>
    <COMMENT Value="arrow right to next cell"/>
    <TEXT TYPE Action="0" Text="<TAB>"/>
    <COMMENT Value="set color of next cell to red"/>
    <TEXT TYPE Action="0" Text="<CTRLD>1<CTRLU>" _COMMENT="format cells"/>
    <TEXT TYPE Action="0" Text="pff" _COMMENT="assure \"fill\" tab"/>
    <TEXT TYPE Action="0" Text="<ALTD>c<ALTU>" _COMMENT="background color"/>
    <TEXT TYPE Action="0" Text="<ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ENTER>" _COMMENT="select red"/>
    <TEXT TYPE Action="0" Text="<TAB><TAB><TAB><TAB><TAB><ENTER>" _COMMENT="tab to OK and exit"/>
    <MACRO RETURN/>
    <COMMENT Value=" "/>

     

     

  9. In Excel 2010, these keystrokes enter the "format cells" dialog and change the current cell background color to red.  Stands out nicely.  Would probably be a different key sequence for different generations of Excel.  Also we would want a second macro to change the cell color back to No Color. 

     

    I wanted to use "Background color" instead of "Fill effects" but, for reasons unknown, ALT-c doesn't work to get to "Background color".   It seems to be a feature of Excel that non-intuitive navigation is the rule.   Incidentally, Excel 2010 places a heavy border around the current cell instead of requiring an up-to-date eyeglass prescription like later Excel versions.

     

    //  
    Text Type (Simulate Keystrokes): <CTRLD>1<CTRLU>    // format cells
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): p            // protection tab
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ARROW LEFT>        // left to fill tab
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ALTD>i<ALTU>        // fill effects
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <TAB><TAB>        // tabs and arrows to select fill colors
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ENTER>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <TAB>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN><ARROW DOWN>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ENTER>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <TAB><TAB>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ENTER>    // apply colors
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <TAB><TAB><TAB><TAB>
    Delay: 250 milliseconds
    Text Type (Simulate Keystrokes): <ENTER>        // done
    Delay: 250 milliseconds
    Macro Return
    //  

     

  10. Sounds very interesting. 

     

    I am kind of thinking out loud here, so what follows may be useless.

     

    Could you use the Windows Task Scheduler, on the server, to start Macro Express?  Or just start ME when the server starts up.  The macro itself could be started by the scheduler within Macro Express. 

     

    Or (see Command Line Options in Macro Express Help) the /A option can start the macro with program MEPROC.EXE via a Windows-scheduled batch file. 

     

    I have run macros repeatedly or continuously on a server using those methods.  Mine did not use the mouse/keyboard/monitor, however.  I'm not sure whether this would work in your case.  Since ME would be starting and running independently of your remote session, I don't know whether it would use imaginary peripherals. 

     

    Maybe you could just buy a cheap PC and dedicate it to be always remotely connected to the server, so as to avoid impacting your primary machine?  Or just forget about the VPS server and run the macro on the dedicated PC?

  11. 7 hours ago, Brian White said:

    It would defeat the purpose if I had to keep a remote connection open between my PC and the VPS.

    Has anyone successfully run a macro that needs mouse, keyboard, and monitor on a VPS?

     

    It sounds like the macro is to run only when your remote connection is open.  Yes?  No?  Could you start Macro Express itself right after (or as part of) initiating the connection, and kill it when disconnecting?  Or does the macro need to continue running after you disconnect, doing stuff that no longer needs keyboard/mouse/monitor?  

  12. 25 minutes ago, koden said:

     

    It works but sometimes fails and I think it's because of this jumping up and down.

     

    Sometimes tabbing from one field to the next doesn't take the fields in the order that you see them on the screen, but in a seemingly random order (but not really random).  So successive TABs might go from the top of the window to some field near the bottom then back to the top.  If the window is bigger than the screen, that can make it jump around like you describe.  


    You might be able to use the browser's "find" command to get where you want to go.  For example, one of my macros uses the following sequence to find "forgot your password?" text within the window, then tabs backwards to get to the fields where name and password are typed.  

     

      Text Type (Simulate Keystrokes): 'forgot your password // single quote initiates Firefox Quick Search for hyperlink text
      Delay: 250 milliseconds
      Text Type (Simulate Keystrokes): <SHIFTD><TAB><TAB><TAB><TAB><SHIFTU>
      Delay: 250 milliseconds
        Text Type (Simulate Keystrokes): signonname<TAB>
        Text Type (Simulate Keystrokes): password<TAB>

     

  13. 6 hours ago, koden said:

    But not sure it's much better than the TAB.

    TAB ten times is definitely better, if that's all you have to do.  I thought you were having trouble getting focus on the appropriate window, or making sure it had loaded, before you could even do the tabs -- that's why the other suggestions.

     

    The command "Get Pixel Color" is under System commands.  I agree it's hard to find -- there are several commands I have trouble locating whenever I want to use them.  Get Pixel Color can be very useful; play around with it a bit when you have the time. 

  14. If the new window always opens in a predictable location, perhaps you could check for a unique color at one or more places to test whether it has opened successfully.  Then maybe click the mouse within the window to make it active, and then TAB to the date field.  You will probably need some "delay" commands among the color checks and TABs, to keep the macro from outrunning the screen changes.

  15. 5 hours ago, koden said:

     

    is there a quick short key to stop a running macro

    In Options | Preferences you can set a hot key that aborts running macros.

     

    You could prompt for a text variable rather than an integer.  Then use Variable Modify String to extract and examine individual digits.  After verifying, there is an option of Variable Modify String to convert string to integer. 

  16. Use two macros.  The first macro (example below) will prompt for the number of times to run the second macro, then run it.

     

    //  
    Variable Set Integer %count%: Prompt    ["set integer" option to prompt for number of repetitions]
    Repeat Start (Repeat %count% times)    [run the second macro multiple times]
      Macro Run: macro_2
    End Repeat
    //  

     

    Edit: I see you posted this in the Macro Express 3 forum.  You will need to use one of the pre-defined integer variable (N1, N2, N3....) instead of %count% in my example. 

     

  17. 3 hours ago, koden said:

    I can't get to the lower part without a mouse click.

    I hate to use mouse....

    Nothing improper about using the mouse -- it's fast, and if it works reliably then why not?  You might need a quarter-second delay after the mouse click if the system doesn't respond instantly.  

  18. 3 hours ago, koden said:

    to be in excell column 1 and row 1 and ctrl+C put into variabel T1, tab ctrl+c put into var. 2 a.s.o.

    I know how to jump between the windows and tab around and that kind...

    You could put that logic into a "REPEAT 1000 times" loop.  It would be pretty time-consuming to run.  However, the biggest problem is that something would get out-of-sync long before the macro finished a thousand repetitions.  Timing issues within Windows will doom the process, where just a single tab from field to field fails, or a single copy-to-clipboard takes too long, or alt+tab to the other window is too slow. 

     

    I would recommend exporting the whole spreadsheet to a comma delimited file -- either manually, or code the macro to do it -- then use ASCII FILE PROCESS to read the file, extract the data fields, and paste/type them into the web form.  You may still have timing or other issues on the web side, but accessing the data accurately will be vastly faster and more reliable than pulling fields one at a time from the spreadsheet.  Macro Express Help has a pretty good explanation of ASCII FILE PROCESS. 

  19. 4 hours ago, acantor said:

    Please share!

    It's hardly worth sharing two lines of code.  For the application where it pops up frequently, the box has its own window title, so that's what triggers the macro.  Then it's just a mouse move relative to the window, and a mouse click.  This works for the simplified Captcha box only -- no good for the version where you have to figure out how many squares contain trees or motorcycles or traffic lights.  Contrary to Asimov's laws of robotics, my robot is completely amoral and willing to lie.😮

  20. Set counter to zero

    Repeat 500 times

        Add one to counter

        <TEXTTYPE:<CTRL>c

        Repeat counter times

             <TEXTTYPE:<ENTER>

        Repeat end

        Repeat counter times

              <TEXTTYPE:<ARROW UP>

        Repeat end

    Repeat end

     

    Watch out for timing issues -- if the macro typing gets ahead of how fast Excel can handle it, you will not be in a happy place.😞

  21. 3 hours ago, Sebastian42 said:

    I have no idea how to recognise or create an invisible character

    If you suspect an invisible (usually leading or trailing) character, you can display its invisibleness (new word, invented today!) in a text box.

    Let's say you wonder about variable %text% which appears to contain ABC.  In a text box, display >>>%text%<<<.

    If it really contains only ABC, the display will be >>>ABC<<<.  No "white space" between the variable and the brackets.

    If there is a non-displayable character at beginning or end, the display will be >>> ABC<<< or >>>ABC <<<

×
×
  • Create New...