Hatena::Groupuwsc

CX's UWSC Diary

Windows 自動化ツール「UWSC」を使って何が出来るかを探求する日記です。構文をマスターしたい方はこちらをどうぞ→UWSC 基礎文法最速マスター
こくばん.in」投稿サンプル
アインシュタイン マリオとクッパ 千円札(見本) 猫
eピアノ」「Google Moog」自動演奏サンプル
eピアノ Google Moog
はてなロクロ」投稿サンプル
マリオ テトリス デフォルトさん はてなロゴ 全自動マリオ 3Dプロッタ
はてなハイク」投稿サンプル
デフォルトさん カラーパレット カラーパレット マリオ ルイージ カラーパレット 日本地図
 | 

2008-03-09こくばん.in - 猫

| 18:14 |  猫 - CX's UWSC Diary を含むブックマーク はてなブックマーク -  猫 - CX's UWSC Diary

  • ソース

kokuban_cat_plotter.uws [ダウンロード]

kokuban_cat_plotter.bmp [ダウンロード]

// ---------------------------------------------------------
// File : kokuban_cat_plotter.uws
// ---------------------------------------------------------
// 
// <使用上の注意>
// ・このスクリプトはWindows 自動化ソフト「UWSC」を使った「こくばん.in」自動化スクリプトです。
// ・以下の環境でのみスクリプトの動作確認済みです。
//   ・解像度:1280x1024, Windows XP(クラシックモード) + IE7(ウィンドウ最大化、ツールバー無し)。タスクバーは下に配置。
// ・中断する場合は [Alt] + [F2] です。動作中にウィンドウを切り替えないでください。誤動作します。
//
// <使用ツール>
// ■ UWSC Free版 Ver4.4
// http://www.uwsc.info/download.html
// 
// <スクリプトを作成した人>
// id:cx20
// 
// <変更履歴>
// 2008/03/09 Ver0.01 とりあえず版作成。

Option Explicit

Public g_winID_kokuban = 0

g_winID_kokuban = こくばんのウィンドウIDを取得()
Ifb g_winID_kokuban = -1 Then
    MsgBox( "こくばん.in が起動していない為、スクリプトを終了します。" )
    ExitExit
EndIf

// 「こくばん.in」ページをアクティブ化
ACW(g_winID_kokuban)

Public g_x = 314 // 描画開始位置(IE7 最大化時)
Public g_y = 317 // 描画開始位置
Public g_height = 778-g_y
Public g_width  = 944-g_x
Public g_r = 25  // 円の半径
Public g_pi = 3.14159265 // PI
Public g_wait = 5 // 実行までの待ち時間(ミリ秒)
//Public g_wait = 0 // 実行までの待ち時間(ミリ秒)

// 「ペイント」のウィンドウIDを取得
Public g_winID_mspaint = GETID("ペイント")
Ifb g_winID_mspaint = -1 Then
   MsgBox( "ペイントが起動していない為、スクリプトを終了します。" )
   ExitExit
EndIf

//黒板に何か描く
ペイントの内容を黒板に描く

Function こくばんのウィンドウIDを取得()
    Dim winID = 0

    // 「こくばん.in」のウィンドウIDを取得(IE6 版)
    winID = GETID("こくばん.in - Microsoft Internet Explorer","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf
    
    // 「こくばん.in」のウィンドウIDを取得(IE7 版)
    winID = GETID("こくばん.in - Windows Internet Explorer","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    // 「こくばん.in」のウィンドウIDを取得(Firefox 版)
    winID = GETID("こくばん.in - Mozilla Firefox","MozillaUIWindowClass")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    Result = winID
Fend

Procedure ペイントの内容を黒板に描く()
    // 「ペイント」をアクティブ化
    ACW(g_winID_mspaint)

    Dim g_baseX = Status( g_winID_mspaint, ST_CLX ) + 61  // ツールボックスのサイズを考慮
    Dim g_baseY = Status( g_winID_mspaint, ST_CLY ) + 6   // ツールボックスのサイズを考慮
    Print "g_baseX = [" + g_baseX + "]"
    Print "g_baseY = [" + g_baseY + "]"
    
    Dim canvas_x = 220
    Dim canvas_y = 154
    Dim strCanvas[canvas_x][canvas_y]
    Dim x
    Dim y
    Dim pos_x
    Dim pos_y
    Dim color
    Dim last_pos_x
    Dim last_pos_y
    Dim last_color
    Dim strLine
    
    Dim nColorIndex
    // 画像データを配列にセット
    For y = 0 To canvas_y
        strLine = ""
        For x = 0 To canvas_x
            pos_x = g_baseX + x
            pos_y = g_baseY + y
            color = PEEKCOLOR( pos_x, pos_y )
            //Print "PEEKCOLOR( " + pos_x + ", " + pos_y + " ) = [" + color + "]"

            Select color
                Case $000000
                    strCanvas[x][y] = "0"
                Case $404040
                    strCanvas[x][y] = "1"
                Case $808080
                    strCanvas[x][y] = "2"
                Case $C0C0C0
                    strCanvas[x][y] = "3"
                Case $FFFFFF
                    strCanvas[x][y] = "4"
                Default
                    strCanvas[x][y] = "9"
            Selend

            strLine = strLine + strCanvas[x][y]
            
        Next
        Print strLine
    Next
    
    Dim nCount
    
    Dim nLarge
    //nLarge = 7 // ノーマル = 7 pixel
    nLarge = 3   // 極細ペン = 3 pixel
    Dim nDepth
    
    Dim mergin_x
    Dim mergin_y
    mergin_x = 0 // 22
    mergin_y = 10 // 88
    
    last_pos_x = g_x + 0 * nLarge + mergin_x
    last_pos_y = g_y + 0 * nLarge + mergin_y
    last_color = 0

    // 画像データを配列にセット
    For y = 0 To ( canvas_y - 1 )
        last_pos_x = g_x + 0 * nLarge + mergin_x
        last_pos_y = g_y + y * nLarge + mergin_y
        last_color = 0
        For x = 0 To ( canvas_x -1 )
            pos_x = g_x + x * nLarge + mergin_x
            pos_y = g_y + y * nLarge + mergin_y
            color = Int(strCanvas[x][y])
            //Print "ドット( [" + x + "], [" + y + "] ) = [" + color + "])"
            Ifb color <> last_color Or x = ( canvas_x -1 ) Then
                Dim n
                For n = 1 To last_color
                    BTN(LEFT, DOWN, last_pos_x, last_pos_y, g_wait)
                    BTN(LEFT, UP,   pos_x     , pos_y     , g_wait)
                Next
                last_pos_x = pos_x
                last_pos_y = pos_y
            EndIf
            last_color = color
        Next
    Next
Fend

Procedure 黒板に何か描く()
    Dim x
    Dim y
    Dim pos_x
    Dim pos_y
    Dim max_x
    Dim max_y
    max_x = 90
    max_y = 66

    Dim nLarge
    //nLarge = 7 // ノーマル = 7 pixel
    nLarge = 3   // 極細ペン = 3 pixel
    Dim nColor
    Dim nDepth
    For y = 0 To max_y - 1 Step 5
        For x = 0 To max_x -1 Step 5
            pos_x = g_x + x * nLarge
            pos_y = g_y + y * nLarge
            nColor = Int(Random(6))
            チョークを色番号で選択( nColor )
            nDepth = Int(Random(5)+1)
            指定回数ドットを描く( pos_x, pos_y, nDepth )
        Next
    Next
Fend


Procedure 指定回数ドットを描く( x, y, nCount )
    Dim i
    For i = 1 To nCount
        BTN(LEFT,CLICK, x, y, g_wait)
    Next
Fend

Procedure チョークを選択( dotChar )
    Dim nColor
    nColor = 色番号を取得( dotChar )
    チョークを色番号で選択( nColor )
Fend

Procedure チョークを色番号で選択( nColor )
    Dim x
    Dim y
    Dim nSpace
    x = 342 // 白チョーク位置(暫定)
    y = 801 // 白チョーク位置(暫定)
    nSpace = 81 // チョークの位置の間隔
    BTN(LEFT, DOWN, x + nSpace * nColor, y, g_wait)
    BTN(LEFT, UP,   x + nSpace * nColor, y, g_wait)
Fend

Function 色番号を取得( dotChar )
    Public HashTbl colorTable
    // 色名→色番号変換
    colorTable["無"] = -1 // 透明
    colorTable["白"] = 0  // 白
    colorTable["赤"] = 1  // 赤
    colorTable["青"] = 2  // 青
    colorTable["緑"] = 3  // 緑
    colorTable["黄"] = 4  // 黄色
    colorTable["茶"] = 5  // 茶色

    Result = colorTable[dotChar]
Fend
 |