------------------------
        MultiRun
    An AutoIt Script
  by Michael W. Bayley
------------------------


Contents
--------

1. Introduction
2. Installing MultiRun
3. Uninstalling MultiRun
4. Upgrading From Previous Versions
5. Launching MultiRun
6. MultiRun Menu Mode
7. Config Files (.mrn)
8. Logging
9. MultiRun Config Utility
10. MultiRun Copy Utility
11. Multi-User Support
12. Portability
13. Using relative paths
14. The Future
15. Credits
16. Licensing and Distribution
17. Contact Information


Appendices
----------

A1. Key Sequences
A2. Glossary


1. Introduction
---------------
MultiRun is a multiple program launcher with many options.  I originally wrote
this program several years ago, and I have recently upgraded the program to
meet several requirements that I had.  First, I wanted a program that was free.
Secondly, I wanted a program that could launch multiple programs and allow me
control over each program; and I mean a lot of control.  Lastly, I have
recently become interested in "portable" programs, or those that will run from
a USB flash drive on whatever system they are plugged in to.

MultiRun is written in AutoIt 3.  AutoIt is a powerful scripting language that
is distributed free of charge.  See the "Credits" section for details.  I think
MultiRun meets all of my requirements and it should meet yours.

Among other things, MultiRun can do the following...

    1. Launch multiple programs.
    2. Recognize if a program is already running and restrict the program
       to a single instance.
    2. Support multiple configurations for multiple users.
    3. Identify and position program windows.
    4. Send keystrokes to windows.
    5. Wait for a program to close or a set period after each program before
       launching the next one.
    6. Setup your flash drive to "autorun" a MultiRun profile.


2. Installing MultiRun
----------------------
MultiRun does not require an installation.  Simply unzip MultiRun to the
folder of your choice and it is ready to use.


3. Uninstalling MultiRun
------------------------
There is no uninstall process.  Simply delete all of the files and the folder
the program resides in.  MultiRun does not use the registry nor does it depend
on any system libraries or DLL files.


4. Upgrading From Previous Versions
-----------------------------------
There were no real changes to the profile file format in version 1.2, so
you can use the same upgrade utility to upgrade from either version 1.2 or
version 1.2.

To run the converter program you can use either of the two following
commands:

    MultiRun12to13.exe

    MultiRun12to13.exe <ConfigFile>

If the configuration file if not specified on the command line then you will
be asked to browse and select one.

You can also edit the .mrn configuration files manually if you prefer.
You will want to change the "VerMinor" value from either "1" or "2" to
"3".  In each of the program entry sections you would want to change any
of the "Width", "Height", "XPos", or "YPos" entries that are currently set
to "0" to "-9999".  Lastly, in each of the program entry sections you would
want to change any of the "Width", "Height", "XPos", or "YPos" entries that
are currently set to "-1" to "-9998".


5. Launching MultiRun
---------------------
MultiRun is launched with any of the following command lines:

    MultiRun.exe

    MultiRun.exe <ProfileName>

    MultiRun.exe <ConfigFile> <ProfileName>


If the "ConfigFile" parameter is not included then the default configuration
file "MultiRun.mrn" will be used.  If the "ProfileName" is not provided then
the default profile "(Default)" will be used.  If the configuration file is
supplied then a profile must be supplied.


6. MultiRun Menu Mode
---------------------
As a special feature, if you run MultiRun with the "default" profile and the
profile contains zero entries then MultiRun will enter a "Menu Mode".  In
"Menu Mode" MultiRun will present you a list of all valid available profiles
and let you select which profile to run.  This will allow you to use MultiRun
as a menu for various environments on a flash drive or other portable device.


7. Config Files (.mrn)
----------------------
The configuration files have an extension of .mrn.  These files are
specialized .ini files.  If you don't want to know about the internal format
of these files you can skip this section since the MultiRunConfig.exe
utility program will maintain these files for you.

The configuration files consist of four types of sections.  The "General
Settings" section, the "Profiles" section, one or more "Profile Entry"
sections, and one or more "Program Entry" sections.

    General Settings
    ----------------
    The "General Settings" section contains general program settings.  This
    includes program version information, a log file name and several settings
    for the configuration utility program.  This section is named "MultiRun"
    and there is just one of these sections.  The following entries may
    exist:

        ID                  The "ID" entry identifies the section as the
                            main program section.  This must be "1".

        ProgramID           This entry identifies the file as a MultiRun
                            configuration file.  This must be set to
                            "MultiRun".

        VerMajor            This entry shows the major version number of
                            the program used to create the configuration
                            file.  This entry is used to control compatibility
                            between versions.  The current version is "1".

        VerMinor            This entry shows the minor version (revision)
                            number of the program used to create the
                            configuration file.  This entry is used to
                            control compatibility between versions.  The
                            current revision number is "3".

        Log                 The "Log" entry is used to specify the name of a
                            log file.  The log file is useful when first
                            setting up a new profile to debug it.  The name
                            can include path information and may be relative
                            to the program folder.  If no log file name is
                            supplied then no log will be generated.  If this
                            entry is not provided then no log will be
                            generated.

        WarnProfileDelete   This entry is used by the configuration utility.
                            When set to "1" a confirmation dialog will be
                            displayed before deleting a profile.  If this
                            entry is not provided, the value will default to
                            "1".

        WarnProgramDelete   This entry is also used by the configuration
                            utility.  When set to "1" a confirmation dialog
                            will be displayed before deleting a program
                            from a profile.  If this entry is not provided,
                            the value will default to "1".

        UseRelativePaths    This entry is also used by the configuration
                            utility.  When set to "1" the program will
                            convert program and directory information
                            from absolute paths to paths that are relative
                            the MultiRun folder.  This allows MultiRun
                            to be used as a "portable" application on your
                            flash drive.  If this entry is not provided,
                            the value will default to "1".


    Profiles Section
    ----------------
    The profiles section is used to control the names and numbers of your
    profiles.  Each profile consists of one or more program entries to be
    executed by MultiRun.  The section is named "Profiles" and there is
    always just one instance of the section.  The following entries are
    contained in the "Profiles" section:

        ID                  The "ID" entry identifies the section as the
                            "profiles" section.  This must be "2".

        Items               This entry defines the number of "profiles"
                            contained in the configuration file.

        Item1 - ItemN       These entries are used to define the names of
                            the profiles.  Each entry uses a consecutive
                            number.


    Profile Entry Sections
    ----------------------
    The profiles entry sections are used to define each profile.  The section
    names are the profile names themselves.  There is one section for each
    profile the user has defined.  The following entries are contained in each
    profile section:

        ID                  The "ID" entry identifies the section as a
                            profile entry section.  This must be "3".

        Items               This entry defines the number of program entries
                            that are defined for that particular profile.


    Program Entry Sections
    ----------------------
    The program entry sections are used to define each program that belongs
    to a profile along with information on how to run the program.  Each
    program entry section is named "<ProfileName>-NN" where the <ProfileName>
    is the name of the profile the program belongs to and "NN" is a
    consecutive program number from "01" to "99".  Programs are executed in
    the order of the sequence numbers.  Each program entry section contains
    the following entries:

        ID                  The "ID" entry identifies the section as a
                            program entry section.  This must be "4".

        Program             This is the drive:\path\filename.ext of the
                            program executable.  This entry can use a full
                            path or for portability reasons, this entry can
                            be relative to the MultiRun folder.

        Directory           This entry is used to specify the program's
                            starting directory.  The starting directory is
                            the name of the folder where the executable will
                            be run from (the program does not need to be in
                            the starting directory).  This entry can use a
                            full path or for portability reasons, this entry
                            can be relative to the MultiRun folder.

        Params              This entry is used to store the command line
                            parameters for the program.  Note that file names
                            containing spaces should be put inside of double
                            quotes.  Note that AutoIt will strip off double
                            quotes if the entry starts and ends in a double
                            quote character.  If this is the case, you need
                            to add an extra set of double quotes around the
                            "Params" entry.

        ProgramMode         This entry is used to control how the program is
                            to be run.  Set the entry to "0" to run the
                            program in a normal window.  Set the entry to "1"
                            to run the program maximized.  Set the entry to
                            "2" to run the program minimized, and set the
                            entry to "3" to run the program hidden.

        SingleInstance      This entry is used to restrict the program to a
                            single instance.  Set the entry to "0" to allow
                            multiple program instances, or set it to "1" to
                            restrict the program to a single instance.  If
                            restricting the program to a single instance, the
                            program will be skipped if a copy of the program
                            is already running.

        TitleMode           In order for MultiRun to perform some of it's
                            operations, it must be able to identify a
                            program's window.  This entry is used to control
                            how the window title is matched.  Set this entry
                            to "0" to disable title matching.  Set the entry
                            to "1" to exactly match a window title.  Set the
                            entry to "2" to match the start of the title.  Set
                            the entry to "3" to match any title containing
                            the specified text, and set the entry to "4" to
                            match the starting and ending text.

        Title1              This entry contains the text to match to the
                            title for all title match modes. For Start/End
                            title matching this entry contains the text to
                            match at the start of the title.

        Title2              This entry is only used when matching starting and
                            ending title text.  It is used to contain the text
                            to match with the end of the title.

        Width               This entry is used for sizing and positioning the
                            program window.  Set the entry to "-1" to center
                            the window horizontally.  Set the entry to "0" to
                            leave the width at the default width when the
                            window is originally opened, or set to any other
                            positive number to set the window width.

        Height              This entry is used for sizing and positioning the
                            program window.  Set the entry to "-1" to center
                            the window vertically.  Set the entry to "0" to
                            leave the height at the default height when the
                            window is originally opened, or set to any other
                            positive number to set the window height.

        XPos                This entry is used for sizing and positioning the
                            program window.  Set the entry to "-1" to center
                            the window horizontally.  Set the entry to "0" to
                            leave the X position at the default location
                            when the window is originally opened, or set to
                            any other positive number to set the window's X
                            Location.

        YPos                This entry is used for sizing and positioning the
                            program window.  Set the entry to "-1" to center
                            the window vertically.  Set the entry to "0" to
                            leave the Y position at the default location
                            when the window is originally opened, or set to
                            any other positive number to set the window's Y
                            Location.

        Keys                This entry is used to specify keys to be sent to
                            the program window.  Title matching must be
                            enabled for this feature to function.  If this
                            entry is blank then no keys will be sent to the
                            window.  See the section on key sequences for
                            information on how to represent various    keys.

        Wait                This entry is used to specify a period of time
                            to delay after launching the program before
                            launching the next program.  Set this entry to
                            "-1" to wait until the program closes or to
                            any positive number to wait that number of
                            seconds.

        Timeout             This entry is only used when the "Wait" entry is
                            set to "-1" to wait for the program to close.
                            This entry specifies a timeout value in seconds
                            to wait for the program to close before giving
                            up and continuing with the next entry in the
                            profile.  Set this entry to "0" to wait "forever"
                            for the program to close.


8. Logging
----------
MultiRun supports a logging feature.  By supplying a log file name in either
the configuration file or through the con figuration utility you can enable
session logging.  Logging can be used just for those that like a record, or
more importantly as a debug tool when first putting together a new profile.

The log file is purged each time a new profile is run.


9. MultiRun Config Utility
--------------------------
Starting with version 1.1 I have added a MultiRun Configuration utility named
MultiRunConfig.exe.  This utility removes the need for users to manually edit
and configure the configuration files.  The configuration utility provides a
simple graphical user interface to allow you to create and edit MultiRun
profiles.  To launch the configuration utility use the following command
lines:

    MultiRunConfig.exe

    MultiRunConfig.exe <ConfigFile>

If the "ConfigFile" parameter is not supplied then the default configuration
file "MultiRun.mrn" will be used.


    Adding, Editing, and Deleting Profiles
    --------------------------------------
    From the main program dialog you can add, edit, or delete MultiRun
    profiles.
    
    To add a new profile, press the "Add" button.  You will then be asked to
    type in the new profile name.  The profile name must be unique and may
    not already exist.  The profile name may not contain any "[" or "]"
    (square bracket) characters.  Once you have entered the new profile name
    you will be taken to the "Profile Entry" edit dialog to enter the
    profile information.

    To edit an existing profile, select the profile you want to edit in the
    profile list and then press the "Edit" button.  You will be taken to the
    "Profile Entry" edit dialog where you can edit the profile information.

    To delete an existing profile, select the profile you want to delete in
    the profile list and then press the "Delete" button.  If you have the
    "Warn on Profile Delete" option enabled then you will be asked to confirm
    the deletion.  The profile will then be deleted.


    Configuration Utility Options
    -----------------------------
    There are several options on the main dialog that effect MultiRun and
    the MultiRunConfig.exe utility.
    
    "Warn on Profile Delete".  This option, when checked, will display a
    confirmation dialog prior to deleting a profile.  This is handy if you
    have a tendency to hit buttons by mistake.

    "Warn on Program Delete".  This option, when checked, will display a
    confirmation dialog prior to deleting a program entry from a profile.
    This is handy if you have a tendency to hit buttons by mistake.

    "Use Relative Paths".  This option, when checked, will automatically
    convert file and program path information in the "Program Executable"
    field of the Program Entry edit dialog when it is filled using the
    [...] "browse" button.  The program will be relative to the MultiRun
    directory.  This will also automatically convert the directory path in
    the "Start Directory" field of the Program Entry edit dialog when it is
    filled in using the [...] "Browse" button.  Lastly, when this option is
    checked, the [P] "Convert Path" button next to the "Command Line
    Parameters" filed of the "Program Entry" edit dialog will be available.
    This button, when pressed, will convert file and program paths in the
    "Parameters" field to relative paths.  These paths will be relative
    to the "Program Executable" location.

    "Create Autorun".  This option is if you are using MultiRun in a
    "Portable" environment on your flash drive and you would like to use
    MultiRun to launch a profile when the flash drive is plugged into the
    computer.  Pressing this button will create a "autorun.inf" file in
    the root directory of the drive containing MultiRun.  It will create
    an entry for the program and for the icon.  It will also add an XP
    compatible entry for the "Autoplay" feature.  You will be asked to
    confirm creating the file if the file already exists.

    "Log".  This option is to allow the generation of a log during MultiRun
    operations.  Generating a log is a good way of debugging your profiles
    when you first set them up.  The log entry can be absolute or it can be
    relative to the MultiRun directory.


    Adding, Editing, Deleting, and Reordering Program Entries
    ---------------------------------------------------------
    From the main program dialog you can add, edit, delete, and reorder
    programs within a MultiRun profile.
    
    To add a new program, press the "Add" button.  A new empty program
    entry will be created and you will be taken to the "Program Entry" edit
    dialog to enter the program information.

    To edit an existing program entry, select the program entry that you want
    to edit in the program list and then press the "Edit" button.  You will
    be taken to the "Program Entry" edit dialog where you can edit the program
    information.

    To delete an existing program entry, select the program entry that you want
    to delete in the program entry list and then press the "Delete" button.  If
    you have the "Warn on Program Delete" option enabled then you will be asked
    to confirm the deletion.  The program entry will then be deleted.

    You can use the "up" and "down" arrow buttons next to the program entry
    list to reorder the program entries.  The programs will be executed in the
    order shown within the program entry list.


    Editing Program Entries
    -----------------------
    The "Program Entries" edit dialog is the heart of the MultiRun
    configuration utility.  Here you will select the program to run and set
    all of the options available for the program.

        Program Information
        -------------------
        The "Program Information" section of the dialog contains information
        pertinent to launching the program.  This includes the executable,
        the starting directory, command line parameters and the window mode.
        
            Program Executable
            ------------------
            This is the drive:\path\filename.ext of the program executable.
            This field can contain a complete path or for portability reasons,
            this entry can be relative to the MultiRun folder.  There is a
            [...] "Browse" button next to this field that you can use to
            browse for the executable.  If the "Use Relative Paths" option is
            checked, the browse button will return a relative path whenever
            possible.


            Starting Directory
            ------------------
            This field is used to specify the program's starting directory.
            The starting directory is the name of the folder where the
            executable will be run from (the program does not need to be in
            the starting directory).  This field can contain a complete path
            or for portability reasons, this entry can be relative to the
            MultiRun folder.  There is a [...] "Browse" button next to this
            field that you can use to browse for the folder.  If the "Use
            Relative Paths" option is checked, the browse button will return
            a relative path whenever possible.


            Parameters
            ----------
            This field is used to store the command line parameters for the
            program.  Note that file names containing spaces should be put
            inside of double quotes.  There is a [P] path conversion button
            next to this field.  This button will convert any file parameters
            to a path relative to the executable program whenever possible.


            Run Mode
            --------
            This set of radio controls is used to control how the program is
            to be run.  You can select between "Normal Window", "Hidden
            Window", "Minimized", or "Maximized".  Note that when the window
            is hidden that none of the other control apply.


            Single Instance
            ---------------
            This check box is used to restrict the program to a single
            instance.  When unchecked it will allow multiple program
            instances.  When it is checked, MultiRun will restrict the
            program to a single instance.  If restricting the program to a
            single instance, the program will be skipped if a copy of the
            program is already running.


            Test
            ----
            The Test button is used to test launch your application.  Your
            application will be launched in an identical method to the main
            MultiRun code.  This will help ensure that everything is working
            correctly.


        Title Match Information
        -----------------------
        The "Title Match Information is required if you wish to use the
        window positioning or keystroke sending features of MultiRun.  This
        portion of the dialog controls how MultiRun will identify your
        application's window.

            Title Text 1
            ------------
            This field contains the text to match to the title for all title
            match modes. For Start/End title matching this field contains the
            text to match at the start of the title.  For other match modes
            this field contains the title text.  A [...] "Browse" button is
            provided next to this field that will display all active and
            visible window titles.


            Title Text 2
            ------------
            This field is only used when matching starting and ending title
            text.  It is used to contain the text to match with the end of
            the title.  A [...] "Browse" button is provided next to this
            field that will display all active and visible window titles.


            Match Mode
            ----------
            In order for MultiRun to perform some of it's operations, it must
            be able to identify a program's window.  This set of radio
            controls entry is used to control how the window title is matched.
            Set the "Disabled" setting to disable title matching.  When title
            matching is disabled, the "Window Positioning Information" and
            "Text Send Information" sections will be disabled.  Set this
            control to "Exact Match" to match the entire title text with the
            text in the "Title Text 1" field.  Set this control to "Contains"
            to match the text in the "Title Text 1" field with any part of
            the title.  Finally, set the control to "Start/End" to match the
            text in the "Title Text 1" field with the beginning of the
            window title and the text in the "Title Text 2" field with the
            end of the title.


            Test
            ----
            The "Test" button will allow you to test the program's title
            matching abilities under the exact same conditions as when the
            program is run by MultiRun.  Note that the program is not
            launched by this test and you will have to launch the program
            manually or with the "Test" button in the "Program Information"
            section of the dialog.
        
        
        Window Positioning Information
        ------------------------------
        The "Window Positioning Information" section of the dialog is used to
        specify how you want the program's window sized and positioned.
        There are four controls: X Position, Y Position, Width, and Height.
        You can select between three settings for each of the four controls.
        You can select "Default" to leave that control as is when Windows
        launches the program.  You can select "Centered" to center that
        control.  Note that setting the X and Y positions to "Default" and
        the Width and Height to "Centered" may not center the window if
        either the X or Y controls are past the center of the screen.  For
        centering with a default value, it is best to set the X and Y
        position to "Centered" and leave the Width and Height at default or
        set them to absolute values.  The third option is you may set the
        control to "Absolute" and enter a position or size in pixels for
        that control.

            X Position
            ----------
            This set of controls is used for positioning the program window.
            Set the control to "Default" to leave the window where it was
            located as launched by Windows, set it to "Centered" to have the
            window centered or specify an absolute screen X position in pixels.


            Y Position
            ----------
            This set of controls is used for positioning the program window.
            Set the control to "Default" to leave the window where it was
            located as launched by Windows, set it to "Centered" to have the
            window centered or specify an absolute screen Y position in pixels.


            Width
            -----
            This set of controls is used for sizing the program window.  Set
            the control to "Default" to leave the window width as it was
            when launched by Windows, set it to "Centered" to have the window
            centered or specify an absolute window width in pixels.


            Height
            ------
            This set of controls is used for sizing the program window.  Set
            the control to "Default" to leave the window height as it was
            when launched by Windows, set it to "Centered" to have the window
            centered or specify an absolute window width in pixels.


            Test
            ----
            The "Test" button will allow you to test the sizing and
            positioning of the program's window under the exact same
            conditions as when the     program is run by MultiRun.  Note that
            the program is not launched by this test and you will have to
            launch the program manually or with the "Test" button in the
            "Program Information" section of the dialog.


        Text Send Information
        ---------------------
        The "Text Send Information" section of the dialog is used to send
        keystrokes to your application after it has been launched
        by MultiRun.

            Key Sequence
            ------------
            This field is used to enter the text that will be sent to your
            application after it has been launched.  Control characters,
            alt characters and others are sent using a special sequence.
            See the section on "Key Sequences" for more information.


            Test
            ----
            The "Test" button will allow you to test the sending of
            keystrokes to the program's window under the exact same
            conditions as when the     program is run by MultiRun.  Note that
            the program is not launched by this test and you will have to
            launch the program manually or with the "Test" button in the
            "Program Information" section of the dialog.


        Program Delay Information
        -------------------------
        The "Program Delay Information" section is used to control a delay
        between launching of programs.  The delay takes place at the end
        of the sequence after all other options have been executed.

            Until Program Closes
            --------------------
            This check box is used to have MultiRun wait for the program
            to complete before launching the next program.  In the event
            that there are multiple instances of the program running,
            MultiRun will only wait on the instance that it launched.


            Timeout
            -------
            When MultiRun waits for a program to terminate, you can specify
            a timeout so that the program does not hang forever waiting if
            there is a problem with the launched program.  The timeout is
            specified in seconds.


            Seconds
            -------
            Use this radio control to set MultiRun to wait a fixed number
            of seconds between program launches.


            Test
            ----
            The "Test" button will allow you to test the delay period after
            your application is launched and the next application is
            processed by MultiRun.  Note that the program is not launched
            by this test and you will have to launch the program manually
            or with the "Test" button in the "Program Information" section
            of the dialog.


10. MultiRun Copy Utility
------------------------


11. Multi-User Support
----------------------
In order to support multiple users, MultiRun allows you to pass in the
configuration file on the command line.  This way, each user can have their
own set of profiles.  See the section on "Launching MultiRun" for more
details.


12. Portability
--------------
I am a big believer in "portable" software.  More and more people are carrying
around their computer environment on flash drive USB sticks.  MultiRun itself
is completely portable.  It does not store any information in the system
registry.  It keeps all of it's data files in it's local directory/folder.  It
also does not depend on any DLL libraries, OCX controls or other software
being installed on the computer.

To keep MultiRun a "portable" application, you should use the "Use Relative
Paths" option for programs and directories and also use relative paths in
all of your command line parameters.  There is a [P] "path" button next to
the command line parameters input box on the Program Entry dialog that will
convert path information for you.  Command line parameters are made relative
to the program you are running.


13. Using Relative Paths
------------------------
As mentioned in the previous section, you should use relative path information
if you want to keep the program "portable".  Program and starting directories
must be relative to the MultiRun directory.  Program command line parameters
should be relative to either the program you are running or the starting
directory that you supply.

When running is a portable environment, program and starting directories must
be relative to the directory GNRun is executed from.  Program command line
parameters should be relative to either the program you are running or the
starting directory that you supply.

Within the directory structure files may be accessed using using either of
two pathing methods.  The first is absolute pathing.  This method specifies
the entire "drive:\path]filename.ext" method (or in the instance of a
networked drive "\\computer\drive:\path\filename.ext").  The second method is
to use relative pathing which describes how to get to the file from the
current firectory.  Relative pathing uses two special path object.

    .       Specifies the current directory

    ..      Specifies "parent" directory (the directory that contains the
            current directory).

Please note that "relative" pathing can only describe files or directories
that are on the same drive as the current directory.  Assuming the following
directory tree, here are some file paths showing both the absolute and
relative paths:

    C:\
     |
     +-------- Directory_1
     |             |
     |             +------- SubDirectory_1
     |             |              |
     |             |              +-------- Apples.txt
     |             |
     |             +------- (SubDirectory_2)
     |             |              |
     |             |               +------- SubSubDirectory_A
     |             |              |              |
     |             |              |              +------ Bananas.txt
     |             |              |              |
     |             |              |              +------ Cherries.txt
     |             |              |
     |             |              +------- Lemons.txt
     |             |
     |             +------- Oranges.txt
     |
     +-------- Directory 2
                   |
                   +------- SubDirectory 3
                                  |
                                  +-------- Strawberries.txt

Assuming that the current directory is SubSubDirectory_A
(C:\Directory_1\SubDirectory_2\SubSubDirectory_A) here are abosolute and
relative paths for some of the files and directories in the tree:

    C:\Directory_1
    ..

    C:\Directory_1\SubDirectory_1\Apples.txt
    ..\SubDirectory_1\Apples.txt

    C:\Directory_1\SubDirectory_2
    .

    C:\Directory_1\SubDirectory_2\Lemons.txt
    .\Lemons.txt or Lemons.txt

    C:\Directory_1\SubDirectory_2\SubSubDirectory_A
    .\SubSubDirectory_A or SubSubDirectory_A

    C:\Directory_1\SubDirectory_2\SubSubDirectory_A\Bananas.txt
    .\SubSubDirectory_A\Bananas.txt or SubSubDirectory_A\Bananas.txt

    C:\Directory_2\SubDirectory_3\Straberries.txt
    ..\..\Directory_2\SubDirectory_3\Strawberries.txt

Note: In most circumstances the "." is not required (and not usually used)
in relative paths except when specifying the current directory (instead
of leaving it blank).


14. The Future
--------------
At this time, MultiRun is suiting my needs.  I don't really have any plans to
update it other than bug fixes unless I come across a need for something that
I don't have.  Here are a few things that I may consider adding in the future:

    Adding ShellExec support for non .exe files.  This would allow you to
    launch documents or any other type or files.  This would be somewhat
    non-portable though as it would depend on file associations on the
    computer you are running on.

    Multiple "RunKeys" entries.  This would allow sending a lot more
    text to a program without it becoming a bit unruly to edit in a single
    edit box.  I am not sure I really need to send large amounts of text
    to applications though.

    Sending "Keys" to a specific control.  This could be advantageous as
    it would definitely give more control over applications.  It would
    however complicate the program and require a bit more knowledge from
    users.


15. Credits
-----------

    AutoIt
    ------
    AutoIt is a great windows scripting language.  This entire application was
    written in AutoIt version 3.0.  If you are looking for a windows scripting
    language then you should definitely check out AutoIt

    AutoIt was written by Jonathan Bennet
    The homepage is http://www.autoitscript.com/autoit3
    The program is (c)1999-2007 Jonathan Bennet
    The program is distributed as freeware


16. Licensing and Distribution
------------------------------
MultiRun is being distributed as freeware with full source.  You may use
MultiRun for personal or business use with the understanding that MultiRun
is provided as-is with no warranties expressed or implied.  You use the
software at your own risk.

You may distribute MultiRun freely provided it is distributed in it's
original ZIP archive without omitting any files.  You may not charge for
MultiRun nor may you include it as part of any commercial package (although
you can refer to it and have them download it themselves).


17. Contact Information
-----------------------
I can't imagine why you would need to contact me, but if you absolutely
have to, you can email me at:

    mikeb_software@yahoo.com

There are of course no guarantees that I will have or take the time to
answer your email.  You can also visit my homepage at:

    http://www2.webng.com/MikeB

MikeB


A1. Key Sequences
-----------------
MultiRun Key Sequences are the same as those used by AutoIt.  Here is a
brief description as referenced by the AutoIt documentation (I highly
recommend you download AutoIt if you are looking for a fast, easy, and
powerful scripting language).

    Regular characters are just sent as is.  For special keys, use the
    following:
    
        ^    When preceding a character it defines the character as
            a "control" character.

        +    When preceding a character it defines the character as
            being a "shifted" character.

        !    When preceding a character it defines the character as
            being an "alt" character.

        #    When preceding a character it defines the character as
            being a "win" key character.

    You can send any ASCII character by enclosing it in parenthesis and
    defining it as ASC.  As an example, the capital "A" character can also
    be expressed as "(ASC 065)".

    Other special keys can be defined as follows:

        Symbol                    Key sent
        {!}                       ! 
        {#}                       # 
        {+}                       + 
        {^}                       ^ 
        {{}                       { 
        {}}                       } 
        {F1} - {F12}              Function keys 
        {UP}                      Up arrow 
        {DOWN}                    Down arrow 
        {LEFT}                    Left arrow 
        {RIGHT}                   Right arrow 
        {HOME}                    HOME 
        {END}                     END 
        {PGUP}                    PGUP 
        {PGDN}                    PGDN 
        {SPACE}                   SPACE 
        {ENTER}                   ENTER key on the main keyboard 
        {BS}                      BACKSPACE 
        {DEL}                     DELETE 
        {INS}                     INSERT 
        {ESC}                     ESCAPE 
        {TAB}                     TAB 
        {NUMLOCK}                 NUMLOCK 
        {CTRLBREAK}               Ctrl+Break 
        {PAUSE}                   PAUSE 
        {CAPSLOCK}                CAPSLOCK 
        {NUMPAD0} - {NUMPAD9}     Numpad digits 
        {NUMPADMULT}              Numpad Multiply 
        {NUMPADADD}               Numpad Add 
        {NUMPADSUB}               Numpad Subtract 
        {NUMPADDIV}               Numpad Divide 
        {NUMPADDOT}               Numpad period 
        {NUMPADENTER}             Enter key on the numpad 

        
A2. Glossary
------------
The following glossary defines terms pertuinent to MultiRun:

    Config File
    -----------
    MultiRun stores all of it's data in one or more configuration files.
    These files are specialized ".ini" files.  They contain information on
    the various profiles and programs to be run as part of those files.


    Portable
    --------
    A "Portable Application" is an application that is completely self
    contained.  The application does not use the system registry, it does
    not store it's data in system directories, and it does not depend on
    any DLL libraries, OCX controls, or other support files that would
    need to be installed on the system.
    
    Instead, "Portable Applications" store all their data locally within
    their directory structure, and all required DLL libraries are supplied
    with the application and reside in the applications directory.
    
    Furthermore, all references to other programs, directories, and files are
    stored as relative files to make them work regardless of what system
    they are running on.
    
    These applications are ideal for use on flash drives (like USB sticks)
    or other portable media and devices.


    Profile
    -------
    A MultiRun "profile" is a group of programs designed to be run in a
    specific sequence.  Each profile consists of a profile name, an entry
    in the "Profiles Section" in the configuration file, and one or more
    "Program Entries".


    Profile Entry
    -------------
    A "profile entry" is used within a configuration file to describe the
    profile.  It consists of a single section with the name of the profile
    itself and a count of how many program entries are included with that
    profile.


    Program Entry
    -------------
    A "program entry" is a section of the configuration file that describes
    a program to be run as part of a "profile".  The "program entry" is stored
    in a single section which is named as the profile name, a hyphen, and a
    two digit sequence number.  Each program entry contains the "Program
    Information" which defines the program, starting directory, command line
    parameters, program mode, and single instance flag.  Each entry also
    contains "Title Matching Information" which controls how the programs
    window is identified.  This includes two title text strings and a match
    mode.  The entry also contains a "Positioning Information" which is
    used to control the location and size of the program's window.  There
    is also the "Send Text Information" which controls which keystrokes, if
    any, will be sent to the application, and finally the entry contains
    "Program Delay Information" which is used to define how MultiRun will
    wait before proceeding to the next application.


