Using TWAPI with MS Paint

meh Here is an example of how to use TWAPI to 'draw' letters in an open MS paint window:

        ## Draws any text passed to the 'type' procedure in an active
        ## untitled MS Paint window.
        ## BUG: First line of text seems to call a newline one character
        ## before the actual line end.

        ## Maximum columns (characters across)
        set max_cols 20
        ## Maximum rows (lines of characters)
        set max_rows 8
        puts "MAX_X_LET\=$max_cols"
        puts "MAX_Y_LET\=$max_rows"

        #####
        puts "init"
        package require twapi
        puts "findwin"
        set win [lindex [split [twapi::find_windows -text "untitled - Paint"]] 0]
        puts "targetdraw"
        set origin_x [lindex [split [twapi::get_window_coordinates $win]] 0]
        set origin_y [lindex [split [twapi::get_window_coordinates $win]] 1]
        twapi::move_mouse [expr $origin_x+70] [expr $origin_y+50]
        puts "proceed"
        set lines 0
        set max_rows [expr $max_rows-1]

        proc select_curvetool {} {
                global win
                puts "select_curvetool"
                set origin_x [lindex [split [twapi::get_window_coordinates $win]] 0]
                set origin_y [lindex [split [twapi::get_window_coordinates $win]] 1]
                twapi::move_mouse [expr $origin_x+45] [expr $origin_y+175]
                twapi::click_mouse_button left
                twapi::move_mouse [expr $origin_x+30] [expr $origin_y+305]
                twapi::click_mouse_button left
        }

        proc select_brushtool {} {
                global win
                puts "select_brushtool"
                set origin_x [lindex [split [twapi::get_window_coordinates $win]] 0]
                set origin_y [lindex [split [twapi::get_window_coordinates $win]] 1]
                twapi::move_mouse [expr $origin_x+45] [expr $origin_y+135]
                twapi::click_mouse_button left
                twapi::move_mouse [expr $origin_x+25] [expr $origin_y+260]
                twapi::click_mouse_button left
        }

        proc select_circletool {} {
                global win
                puts "select_circletool"
                set origin_x [lindex [split [twapi::get_window_coordinates $win]] 0]
                set origin_y [lindex [split [twapi::get_window_coordinates $win]] 1]
                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+230]
                twapi::click_mouse_button left
                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+265]
                twapi::click_mouse_button left
        }

        proc reset_curvetool {} {
                puts "reset_curvetool"
                select_brushtool
                select_curvetool
        }

        proc drawletter {letter} {
                puts "drawletter $letter"
                set origin_x [lindex [split [twapi::get_mouse_location]] 0]
                set origin_y [lindex [split [twapi::get_mouse_location]] 1]
                string tolower $letter
                select_brushtool
                twapi::move_mouse $origin_x $origin_y
                switch $letter {
                                default {
                                                return
                                }
                                a {
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                after 10
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+10] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+30] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                b {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                select_curvetool
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+20]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+20]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                reset_curvetool
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                c {
                                                select_curvetool
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+20]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::click_mouse_button left
                                                twapi::click_mouse_button left
                                                select_brushtool
                                                twapi::move_mouse $origin_x [expr $origin_y+20]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                select_curvetool
                                                twapi::move_mouse $origin_x [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::click_mouse_button left

                                                select_brushtool
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                d {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                select_curvetool
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                e {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                f {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+30] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                g {
                                                select_curvetool
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::click_mouse_button left
                                                twapi::click_mouse_button left
                                                reset_curvetool
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::click_mouse_button left
                                                twapi::click_mouse_button left
                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+50]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+50]
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+30]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::click_mouse_button left
                                }
                                h {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                i {
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                j {
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+50]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                k {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                l {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                m {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                n {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                o {
                                                select_circletool
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                p {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                select_curvetool
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+20]
                                                twapi::click_mouse_button left
                                }
                                q {
                                                select_curvetool
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::click_mouse_button left

                                                select_brushtool
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                r {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                select_curvetool
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+20]
                                                twapi::click_mouse_button left

                                                select_brushtool
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                s {
                                                select_curvetool
                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+20]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse $origin_x [expr $origin_y+20]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+60]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::click_mouse_button left

                                                select_brushtool
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                t {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                twapi::move_mouse [expr $origin_x+20] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                u {
                                                select_curvetool
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::click_mouse_button left

                                                reset_curvetool
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::click_mouse_button left

                                                select_brushtool
                                                twapi::move_mouse $origin_x [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                v {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                w {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                x {
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                y {
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}

                                                twapi::move_mouse [expr $origin_x+20] [expr $origin_y+40]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                                z {
                                                twapi::move_mouse $origin_x $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse [expr $origin_x+40] [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                                twapi::move_mouse [expr $origin_x+40] $origin_y
                                                twapi::send_input {{mouse 0 0 -ldown}}
                                                twapi::move_mouse $origin_x [expr $origin_y+80]
                                                twapi::send_input {{mouse 0 0 -lup}}
                                }
                }
                twapi::move_mouse [expr $origin_x+40] $origin_y
        }

        proc newline {} {
                global win lines
                puts "newline"
                set cur_y [lindex [split [twapi::get_mouse_location]] 1]
                set origin_x [lindex [split [twapi::get_window_coordinates $win]] 0]
                twapi::move_mouse [expr $origin_x+70] [expr $cur_y+100]
                incr lines
        }

        proc advanceletter {} {
                global win
                puts "advanceletter"
                set cur_x [lindex [split [twapi::get_mouse_location]] 0]
                set cur_y [lindex [split [twapi::get_mouse_location]] 1]
                twapi::move_mouse [expr $cur_x+20] $cur_y
        }

        proc type {str} {
                global max_cols max_rows lines win
                puts "targetdraw"
                twapi::set_foreground_window $win
                set origin_x [lindex [split [twapi::get_window_coordinates $win]] 0]
                set origin_y [lindex [split [twapi::get_window_coordinates $win]] 1]
                twapi::move_mouse [expr $origin_x+70] [expr $origin_y+50]
                set strlen [string length $str]
                puts "recv \[$str\] \($strlen\)"
                set done 0
                while {$done<$strlen} {
                                set chklin [expr $done % $max_cols]
                                if {$chklin == [expr $max_cols-1]} {
                                                if {$lines >= $max_rows} {
                                                                puts "ERR_NOSPACE_Y"
                                                                set lines 0
                                                                return
                                                } else {
                                                                newline
                                                }
                                }
                                drawletter [string range $str $done $done]
                                advanceletter
                                incr done
                }
                set lines 0
        }

Basically you change max_cols and max_rows depending on the size of the MS paint drawing area avaliable, and then pass the text to be drawn to the 'type' procedure. If the script runs out of space for the text, it will stop execution and print "ERR_NOSPACE_Y". Characters are drawn within a 40x80 box. The script currently only draws letters, with all unknown characters represented as spaces.

I apologise if this is not the correct place for this, but I'm sure it will prove useful or entertaining for someone :)


ro: looks very entertaining! will try it out after some rest, looks like a great laugh :)