Home Download FAQ Sample BBS Contact

update 2017/04/16
一部Windowsのバージョンによって 変更が必要な場合があるかもしれません

 UWSCサンプル

記録保存したスクリプトを無限ループで実行  #N1

記録保存したスクリプトを10回ループで実行  #N2

関数(Function)の使用  #N3

プロシージャ(Procedure)の使用  #N4

開いているウインドウを全て閉じる  #N5

メモ帳を起動し使用できるフォント名の取得  #N6

ボリュームを変える  #N7

常にIMEをオンにする  #N8

CTRLキーにてアクティブウィンドウの画像保存  #N9

SHIFTキーにてマウス下のオブジェクト画像をJPEGにて保存  #N10

csvファイルのデータを xxxx.exe アプリに 10秒毎に設定する  #N11

OKボタンにマウスを移動する  #N12

指定画像、ピクセルがあればクリック  #N13

マウスカーソル下のウィンドウのタイトルとクラス名を表示  #N14

全ウィンドウのタイトルとクラス名を取得する  #N15

アクティブウィンドウを基準にした任意の座標を調べる  #N16

カーソル位置の色を表示する  #N17

スクリーンセーバーの設定を変更する  #N18

レジストリより IEのバージョン取得  #N19

MSAgent と SpeechEngine の利用  #N20

クリップボードにコピーされた値を Excelに保存していく  #N21

メモ帳のボタン・メニューの変更(DLL(API)の呼び出し)  #N22

アクティブウィンドウの左上に時間を表示(デスクトップに文字を直書き)  #N23

WindowsXP/Windows2000 のデフラグの実行&シャットダウン  #N24

WMIによるBIOS、マザーボード情報の表示  #N25

IEにてActiveX警告のダイアログを自動で閉じる  #N26

掲示板のスレをテキストファイルとして保存する  #N27

デスクトップ、タスクバー、トレイの情報を取得  #N28

タスクトレイの '音量' をクリック  #N29

マウスカーソル下の文字と位置を取得、Shiftキーによりクリップボードへコピー  #N30

マウスカーソル下の文章を読み上げる  #N31

音声認識によるアプリの操作  #N32

Internet Explorer 上での文字設定、ボタンのクリック  #N33

IE にてGoogleを表示、日本語ページより検索 (RecIEにより生成されたもの)  #N34

Yahoo!ファイナンスを開き、データをExcelに送りグラフを作成  #N35

Firefox にてGoogleを表示、検索 & ニュース表示  #N36

Google Chrome にてGoogleを表示、検索 & ニュース表示  #N37

MS Edge にてGoogleを表示、検索 & ニュース表示  #N38

Javaのデモアプリ FileChooserDemo を起動、操作  #N39

メールからスクリプトを指定して実行する(basp21.dll を使用)  #N40

VBScript、JScriptを呼び出す(足し算をする)  #N41

スレッドを使い吹出しを複数を出す  #N42

Yahoo!検索Webサービスの利用  #N43

Vista/7 ガジェット 時計の設定変更  #N44

キーボードからのキーを一文字づつずらす  #N45

CLK_ACC指定時の位置、順番を確認する  #N46

スタートメニュー プログラムを ポップアップメニューにする  #N47

iTunesを起動しラジオの選択  #N48

タスクマネージャよりプロセス情報を読み取り、メモリ使用量でソート  #N49

マインスイーパー自動処理  #N50

PowerShellより C#を呼び出す(足し算をする)  #N51

PowerShellより .Net Frameworkを利用しフォームを作る  #N52

デフォルトプリンタの設定を変更する  #N53

1分間操作がなかったら場合にモニターをOFF状態にする  #N54

指定フォルダにあるjpgファイルをペイントにドロップする  #N55

指定ウィンドウの全オブジェクトの文字を種類別に取得する  #N56

OCRの利用(Office付属)  #N57

IE にてファイルのダウンロード処理  #N58

OpenOffice.org/LibreOffice 表計算(Calc)の操作、存在しない場合にはExcelにて  #N59

IE上のFlashからデータ取得(FXのレート取得)  #N60

マウスがクリック可能領域に入った時に そのオブジェクトの中心にマウスを移動する  #N61

IE上に表示されている文字 「です」を 「だす」に書き換える、カラーも変更  #N62

CDOを利用したメール送信  #N63

インプットボックスを利用した計算  #N64

CSVファイル情報をUWSファイルに取り込んだ形で使う  #N65

現在位置を Google マップ で表示する  #N66

オーディオ出力が2系統あり、指定WAVファイルのみ別系統で出力する  #N67

低レベルで記録したスクリプトのスピードを変える  #N68




// 記録保存したスクリプトを無限ループで実行  #N1
// 無限ループ
While True
    Call xxxx.uws      // xxxx.uws 記録保存したスクリプト名
    Sleep(10)          // 10秒の間を取る
Wend


// 記録保存したスクリプトを10回ループで実行  #N2
// 10回ループ
for 回数 = 1 to 10
    Call xxxx.uws      // xxxx.uws 記録保存したスクリプト名
    print 回数
next


// 関数(Function)の使用  #N3
public G = 0           // グローバル変数
a = 1                  // ローカル変数
b = 2
c = 計算(a, b)
print  c               // 3
print  G               // 99
// Mainプログラムはここで終わり(関数定義の前までになる)

// Function 戻り値あり(Result変数に戻り値を入れる)
Function 計算(ka, kb)        // 関数名 2バイト文字でもOK
    Result = ka + kb         //  関数の戻り値は  Result変数
    G = 99                   // グローバル変数
Fend


// プロシージャ(Procedure)の使用  #N4
あ = 0                 // 変数名 2バイト文字でもOK
い = 0
TETUZUKI(あ, い)
print あ               // 0
print い               // 99
// Mainプログラムはここで終わり(関数定義の前までになる)


// Procedure 戻り値なし
Procedure TETUZUKI(a, var b)
    a = 99
    b = 99            // var指定により呼び出し元の値は変更される
Fend


// 開いているウインドウを全て閉じる  #N5
for i = 0 to GETALLWIN()-1            // 全てのウインドウIDをゲット(ALL_WIN_ID[]変数に入る)
    if STATUS(ALL_WIN_ID[i], ST_CLASS) = "Shell_TrayWnd" then Continue    // タスクバーはスキップ
    if STATUS(ALL_WIN_ID[i], ST_VISIBLE) then CTRLWIN(ALL_WIN_ID[i], CLOSE)
next


// メモ帳を起動し使用できるフォント名の取得  #N6
id = EXEC("notepad.exe")
ClkItem(id, "フォント")
idfnt = GETID("フォント")
kz = GETITEM(idfnt, ITM_LIST, 1)
print "フォント数" + kz
for i = 0 to kz-1
    print ALL_ITEM_LIST[i]
next


// ボリュームを変える  #N7
ifb KINDOFOS() >= 12
    KBD(VK_VOLUME_UP)                    // Win2000以上ならばこれだけ
else
    volid = Exec("SNDVOL32.exe /t")      // メインボリュームのみ表示
    値 = GETSLIDER(volid, 1)             // 現在値
    SETSLIDER(volid, 値-10)              // 音量を少し上げる(レンジ0〜255)
endif


// 常にIMEをオンにする  #N8
while True
    if  ! GETKEYSTATE(TGL_IME) then KBD(VK_KANJI)
    Sleep(0.2)
wend


// CTRLキーにてアクティブウィンドウの画像保存  #N9
GETKEYSTATE(VK_CTRL)
while True
    ifb GETKEYSTATE(VK_CTRL)
        id = GETID(GET_ACTIVE_WIN)
        titl = STATUS(id, ST_TITLE)
        if titl <> "" then SAVEIMG(titl, id)    // タイトル名にて保存
    endif
    Sleep(0.2)
wend


// SHIFTキーにてマウス下のオブジェクト画像をJPEGにて保存  #N10
GETKEYSTATE(VK_SHIFT)
num = 1
while True
    ifb GetKeyState(VK_SHIFT)
        id = GETID(GET_FROMPOINT_OBJ)           // マウスカーソル下のオブジェクト
        SAVEIMG("Image"+num, id, , , , , , 50)  // "Image?.jpg" (圧縮率50%)にて保存
        num = num + 1
    endif
    Sleep(0.2)
wend


// csvファイルのデータを xxxx.exe アプリに 10秒毎に設定する  #N11
app = Exec("xxxx.exe")                          // xxxxアプリ起動
fid = FOpen("testdata.csv", F_READ)             // csvファイル(3列構成)
for i = 1 to FGET(fid, F_LINECOUNT)             // F_LINECOUNT指定で行数が得られる
    SendStr(app, FGet(fid, i, 1), 1, True)
    SendStr(app, FGet(fid, i, 2), 2, True)
    ss = Replace(Format(FGet(fid, i, 3), 5), " ", "0")   // 00000(5桁)の形にする
    SendStr(app, ss, 3, True)
    Sleep(10)
next
FClose(fid)


// OKボタンにマウスを移動する  #N12
while True
wid = -1
while True
    ifb wid <> GETID(GET_ACTIVE_WIN)          // アクティブウィンドウが変わった
        wid = GETID(GET_ACTIVE_WIN)
        CLKITEM(wid, "OK", CLK_BTN or CLK_MUSMOVE, False)  // クリックはしない
//        CLKITEM(wid, "OK", CLK_ACC or CLK_MUSMOVE, False)  // CLK_BTNではダメな場合に
    endif
    sleep(0.5)
wend
wend


// 指定画像、ピクセルがあればクリック  #N13
// エアロがオンだとCHKIMG,PEEKCOLOR関数は遅いので APIでデスクトップコンポジションをオフに
DEF_DLL DwmEnableComposition(long): long: dwmapi
if KINDOFOS()>=20 then DwmEnableComposition(0)   //  Vista/Win7 の場合にオフに(Win8.x/10 ではオフにできない)
STOPFORM(False)                                  // "再生中...xxxx"ウィンドウは出さない
MMV(G_SCREEN_W, G_SCREEN_H)                      // カーソルを画面端に(カーソルがソフト描画の場合に退避)
while True
    if GETKEYSTATE(VK_ESC) then exit          // ESCキーで終了
    ifb CHKIMG("check.bmp")                   // 画像があった
        BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)    // 左クリック
        break
    endif
    ifb PEEKCOLOR(320, 320) = $00FF00         // 指定ピクセルが緑
        KBD(VK_SPACE)                         // スペースキー
        break
    endif
    sleep(1)
wend
if KINDOFOS()>=20 then DwmEnableComposition(1)   //  オン


// マウスカーソル下のウィンドウのタイトルとクラス名を表示  #N14
While True
    id = GETID(GET_FROMPOINT_WIN)                    // マウスカーソル下のウィンドウ
    if id = GETID(GET_BALLOON_WIN) then Continue     // 吹き出し自体は無視
    moji = STATUS(id, ST_TITLE) + " , " + STATUS(id, ST_CLASS)
    Balloon(moji, G_MOUSE_X+8, G_MOUSE_Y, 3)
    Sleep(0.2)
Wend


// 全ウィンドウのタイトルとクラス名を取得する  #N15
n = GETALLWIN()
print "ウィンドウ数=" + n
for i=0 to n-1
    id = ALL_WIN_ID[i]
    print STATUS(ID, ST_TITLE) + " , " + STATUS(ID, ST_CLASS)
next


// アクティブウィンドウを基準にした任意の座標を調べる  #N16
While True
    x = G_MOUSE_X;  y = G_MOUSE_Y      // マウス位置
    id = GETID(GET_ACTIVE_WIN)         // アクティブウィンドウ
    ofx = x - STATUS(id, ST_X)         // 相対位置
    ofy = y - STATUS(id, ST_Y)
    moji = "x="+ofx + ", y="+ofy
    Balloon(moji, x, y, 3)
    Sleep(0.5)
Wend


// カーソル位置の色を表示する  #N17
While True
    x = G_MOUSE_X;  y = G_MOUSE_Y
    c = PeekColor(x, y)
    Balloon("赤="+赤色(c) + ",緑="+緑色(c) + ",青="+青色(c), x, y, 3)
    Sleep(0.5)
Wend
// PeekColorによる色は B,G,R
function  赤色(c)
    Result  =  c  and  $FF
fend
function 緑色(c)
    Result  =  (c  and  $FF00)  /  $100
fend
function  青色(c)
    Result  =  (c  and  $FF0000)  /  $10000
fend


// スクリーンセーバーの設定を変更する  #N18
// 注:XPまで
Exec("Control Desk.cpl")                        // 画面のプロパティを起動
id = getid("画面のプロパティ")
ClkItem(id, "スクリーン セーバー", CLK_TAB)
ClkItem(id, "伝言板", CLK_LIST)                 // 伝言板を選択し設定する
ClkItem(id, "設定", CLK_BTN, True, 1)
SendStr(GETID("伝言板"), "ほにゃらら", 1, True)
ClkItem(GETID("伝言板"), "OK")
ClkItem(id, "OK")


// レジストリより IEのバージョン取得  #N19
ws = CreateOleObj("Wscript.Shell")
s = ws.RegRead("HKLM\SOFTWARE\Microsoft\Internet Explorer\svcVersion")
if s="" then s = ws.RegRead("HKLM\SOFTWARE\Microsoft\Internet Explorer\Version")
MSGBOX(s)


// MSAgent と SpeechEngine の利用  #N20
// 注:Windows7 以上には MSAgentは無い
キャラ = "Merlin"                    // キャラクタ に Merlin を選択
obj = CreateOLEObj("Agent.Control.1")
obj.Connected=True
ss = GET_WIN_DIR + "\msagent\chars\" + キャラ +".acs"
obj.Characters.Load(キャラ, ss)
agt = obj.Characters(キャラ)
agt.show
agt.Play("Greet")
agt.speak("Hello")
agt.speak("日本語も喋れるかな")
Sleep(10)


// クリップボードにコピーされた値を Excelに保存していく  #N21
Excel = CreateOLEObj("Excel.Application")
Excel.Visible = True
Workbook = Excel.WorkBooks.Add
y = 1
x = 1
SENDSTR(0, "")
while True
    sleep(0.2)
    ss = GETSTR(0)
    ifb ss <> ""                        // クリップボードにある
        Excel.ActiveSheet.Cells[y,x].Value = ss
        SENDSTR(0, "")                  // クリップボードをクリア
        x = x + 1
        ifb x > 10                      // 横方向は10(J)まで
            x = 1
            y = y + 1
        endif
    endif
wend


// メモ帳のボタン・メニューの変更(DLL(API)の呼び出し)  #N22
// メモ帳の終了ボタン・メニューを使えなくする、キャプションの変更
DEF_DLL SetWindowTextA(HWND, string): user32.DLL
DEF_DLL EnableWindow(HWND, Bool): Bool: user32.DLL
DEF_DLL EnableMenuItem(HWND, UINT, UINT): DWORD: user32.DLL
DEF_DLL GetSubMenu(HWND, int): HWND: user32.DLL
DEF_DLL ModifyMenuA(HWND, Long, Long, Long, Long): Long: user32.DLL
MF_GRAYED = $1
MF_BYPOSITION = $400
SC_CLOSE = $F060
// 終了は ALT + F4 で
id = exec("notepad")
hwnd = GetSubMenu(GetCtlHnd(id, GET_MENU_HND), 0)    // メニュー → ファイル
EnableMenuItem(hwnd, 8, MF_BYPOSITION+MF_GRAYED)     // 終了をグレー
hwnd = GetCtlHnd(id, GET_SYSMENU_HND)                // システムメニュー
ModifyMenuA(hwnd, SC_CLOSE, MF_GRAYED, 0, 0)         // クローズボタンをグレー
ClkItem(id, "バージョン情報")
hwnd = GetCtlHnd(GETID("バージョン情報"), "OK")
SetWindowTextA(hwnd, "押せまい")                     // OKボタン書換え
EnableWindow(hwnd, False)


// アクティブウィンドウの左上に時間を表示(デスクトップに文字を直書き)  #N23
DEF_DLL GetDC(hwnd): hwnd: USER32
DEF_DLL ReleaseDC(hwnd, hwnd): int: USER32
DEF_DLL TextOutW(hwnd, int, int, wstring, int): Bool: GDI32
while ! GETKEYSTATE(VK_ESC)          // ESCキーにて終了
    w = GETID(GET_ACTIVE_WIN)
    GetTime()
    s = G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
    dc = GetDC(0)                    // デスクトップのDC
    TextOutW(dc, Status(w,ST_X)+2, Status(w,ST_Y)+2, s, Length(s))
    ReleaseDC(0, DC)
    Sleep(1)
wend


// WindowsXP/Windows2000 のデフラグの実行&シャットダウン  #N24
ifb (KINDOFOS()<12) or (KINDOFOS()>14)
    MSGBOX("Windows XP or 2000 のみです")
    Exit
endif
dim disk[5] = "(C:)", "(D:)", "STOP_DFRG"        // 調べるディスク名定義
exec(GET_SYS_DIR+"\mmc.exe dfrg.msc")            // デフラグ起動
id = getid("ディスク デフラグ")
dcnt = 0
While ClkItem(id, disk[dcnt], CLK_SHORT)
    ClkItem(id, "分析")
    ifb KINDOFOS() >= 13                         // Windows XP
        Repeat; sleep(1); Until id<>getid("ディスク デフラグ ツール")
        bnsekiid = getid("ディスク デフラグ ツール")
        wks = GetStr(bnsekiid, 1)
        sai_msg = "最適化してください"
    else
        bnsekiid = GetID("分析が完了しました", , -1)      // Windows2000
        wks = GetStr(bnsekiid, 1, STR_STATIC)
        sai_msg = "最適化することを推奨"
    endif
    ifb Pos(sai_msg, wks) > 0                             // では最適化
        ClkItem(bnsekiid, "最適化")
        While True
            Sleep(2)
            ifb KINDOFOS() >= 13                          // Windows XP
                wks = GetStr(getid("ディスク デフラグ ツール"), 1)
                ifb Pos("最適化が完了しました", wks) > 0 
                    ClkItem(getid("ディスク デフラグ ツール"), "閉じる")
                    Break
                endif
            else
                wks = GetStr(id, 1, STR_STATIC)
                if Pos("一時停止", wks) > 0 then ClkItem(GetID("デフラグ ツール"), "はい")
                ifb Pos("最適化済", wks) > 0 
                    ClkItem(GetID("最適化が完了"), "閉じる")
                    Break
                endif
            endif
        Wend
    else
        ClkItem(bnsekiid, "閉じる")            // 最適化必要なし
    endif
    dcnt = dcnt + 1                            // 次のディスクへ
Wend
POFF(P_POWEROFF or P_FORCE)                    // 電源断


// WMIによるBIOS、マザーボード情報の表示  #N25
Locator = CreateOleObj("WbemScripting.SWbemLocator")
consvr = Locator.ConnectServer()
biosset = consvr.ExecQuery("Select * From Win32_BIOS")       // BIOS情報
GETOLEITEM(biosset); wk = ALL_OLE_ITEM[0]
print wk.Manufacturer
print wk.Name
print wk.SerialNumber
print wk.SMBIOSBIOSVersion
baseset = consvr.ExecQuery("Select * From Win32_BaseBoard")  // マザーボード情報
GETOLEITEM(baseset); wk = ALL_OLE_ITEM[0]
print wk.Manufacturer
print wk.Product
print wk.SerialNumber
print wk.Version


// IEにてActiveX警告のダイアログを自動で閉じる  #N26
//  このスクリプトをスケジュールの '指定Windowが現れた時' に登録する
//  Title=Internet Explorer    Class=#32770    にて登録
STOPFORM(False)                  // 再生ボタンは出さない
id = GETID("Microsoft Internet Explorer", "#32770")
wks = getstr(id, 2, STR_STATIC)
msg = "現在のセキュリティの設定では、このページの ActiveX コントロールは実行できません"
if Copy(wks, 1, Length(msg)) = msg then ClkItem(id, "OK", Clk_Btn)


// 掲示板のスレをテキストファイルとして保存する  #N27
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
fp = FOPEN("掲示板.Log", F_WRITE)
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi")
While True
    sleep(1)
    Repeat
        sleep(0.1)
    Until (! IE.busy) and (IE.readyState=4)       // 接続表示待ち
    SendMessageA(ie.Hwnd, WM_ACTIVATE, 0, 0)
    p = -1
    atag = IE.document.body.all.tags("A")
    for i = 0 to atag.Length - 1                  // 次ページがあるか確認
        ifb atag.item[i].innerText = "[次のページ]"
            p = i
            break
        endif
    next
    wks = IE.document.body.innerText
    if p > 0 then atag.item[p].click()                    // 次ページ クリック
    wks = Replace(wks, "[HOME] [削除] [検索] [過去ログ] [管理人用]", "")
    wks = Replace(wks, "お名前<#CR>Email<#CR>URL<#CR>題  名 <#CR>本  文", "")
    FPUT(fp, wks)                                // 要らない部分を削除して保存
    if p < 0 then break                          // 終了
Wend
FCLOSE(fp)
IE.Quit


// デスクトップ、タスクバー、トレイの情報を取得  #N28
// デスクトップの情報を取得
for i = 0 to GETITEM(GETID("Program Manager","Progman"), ITM_ACCCLK)-1
    print ALL_ITEM_LIST[i]
next
for i = 0 to GETITEM(GETID("","WorkerW"), ITM_ACCCLK)-1
    print ALL_ITEM_LIST[i]
next
// タスクバー、トレイの情報を取得
for i = 0 to GETITEM(GETID("","Shell_TrayWnd"), ITM_ACCCLK)-1
    print ALL_ITEM_LIST[i]
next


// タスクトレイの '音量' をクリック  #N29
// 環境により 音量, Volume, スピーカー 等表示が違う
ifb ! CLKITEM(GETID("","Shell_TrayWnd"), "音量", CLK_TOOLBAR)
    ifb ! CLKITEM(GETID("","Shell_TrayWnd"), "Volume", CLK_TOOLBAR)
        ifb ! CLKITEM(GETID("","Shell_TrayWnd"), "スピーカー", CLK_ACC or CLK_SHORT)
            CLKITEM(GETID("","Shell_TrayWnd"), "output:", CLK_ACC or CLK_SHORT)
        endif
    endif
endif


// マウスカーソル下の文字と位置を取得、Shiftキーによりクリップボードへコピー  #N30
While True
    x = G_MOUSE_X;  y = G_MOUSE_Y                  // マウス位置
    id = GETID(GET_FROMPOINT_WIN)                  // アクティブウィンドウ
    if id = GETID(GET_BALLOON_WIN) then Continue   // 吹き出し自体は無視
    ofx = x - STATUS(id, ST_CLX)                   // 相対位置
    ofy = y - STATUS(id, ST_CLY)
    wks = PosACC(id, ofx, ofy, ACC_BACK)
    wks = wks + "<#cr>" + "x="+ofx+", y="+ofy
    Balloon(wks, x+10, y+10, 3)
    if GetKeyState(VK_SHIFT) then SendStr(0, wks)  // クリップボードへ
    Sleep(0.5)
Wend


// マウスカーソル下の文章を読み上げる  #N31
sv_s = ""
While True
    wks = PosACC(0, G_MOUSE_X, G_MOUSE_Y)    // マウスカーソル下の文章拾得
    ifb sv_s<>wks
        sv_s = wks
        Speak(wks, True, True)    // 読み上げ
    endif
    Sleep(0.5)
Wend


// 音声認識によるアプリの操作  #N32
// アクティブウィンドウのクリック可能なものを拾得、それを単語登録し使用
// 認識可能な単語は吹き出しにて表示
// コマンド発声前にShiftキーを叩いておくとチェックボックス等でOFF動作
id = -1
dim 単語登録[100]
While True
  ifb id <> GETID(GET_ACTIVE_WIN)  // アクティブウィンドウが変更されたか
      id = GETID(GET_ACTIVE_WIN)
      num = GETITEM(id, ITM_BTN+ITM_LIST+ITM_TAB+ITM_MENU+ITM_LSTVEW+ITM_TREEVEW+ITM_TOOLBAR,-1,0,True)  // クリック可能なものを全て拾う
      if num > resize(単語登録) then num = resize(単語登録)   // 数制限
      ifb num = 0
          Sleep(0.2);  Continue
      endif
      表示 = ""
      SETCLEAR(単語登録, "")
      for i = 0 to num-1
          単語登録[i] = 記号削除(ALL_ITEM_LIST[i])  // 邪魔な文字は削除
          if 単語登録[i]<>"" then 表示 = 表示 + 単語登録[i] + "<#CR>"
      next
      RECOSTATE(True, 単語登録)    // 単語登録、実行
      Balloon(表示, 0, 0, , , , , ,100)
  endif
  拾得音声 = DICTATE(False)        // 拾得
  ifb 拾得音声 <> ""               // 音声入力あった
      Balloon()
      print 拾得音声
      for i = 0 to num-1
          ifb 拾得音声 = 単語登録[i]
              chk_flg = ! GETKEYSTATE(VK_SHIFT)          // Shiftキーが押されてた時は Off動作
              CLKITEM(id, ALL_ITEM_LIST[i], 0, chk_flg)  // コマンド実行
              break
          endif
      next
      id = -1
  else
      if GETKEYSTATE(VK_LBUTTON) then id = -1  // ボタン操作があった時も更新
  endif
  Sleep(0.2)
Wend

// 制御コードなどの記号があるとエラーになるのでゴミ文字削除
Function 記号削除(ss)
  p = Pos("\", ss)
  if p > 0 then ss = Copy(ss, p+1, 999)
  ifb Pos("\", ss) > 0
      Result="";  Exit    // 階層化されている物まで拾うと数が多すぎになるので捨てる
  endif
  p = Pos("(", ss, -1)
  if p > 0 then ss = Copy(ss, 1, p-1)  // ( 以降は消す
  for i = 1 to Length(ss)
      mcd = ASC(Copy(ss,i,1))          // 英数字のチェック
      ifb mcd < $80
          if (mcd<$30) or (mcd>$7A) or ((mcd>=$3A)and(mcd<=$40)) or ((mcd>=$5B)and(mcd<=$60)) then ss=Copy(ss,1,i-1)+" "+Copy(ss,i+1,999)
      endif
  next
  Result = Replace(ss, " ", "")
Fend


// Internet Explorer 上での文字設定、ボタンのクリック  #N33
// エディトボックス、ボタンはHTMLソースの'NAME='や'VALUE=' から確認
ie = CreateOLEObj("InternetExplorer.Application")
ie.Visible = True
ie.Navigate("http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi")  // 掲示板
while True                                              // 接続表示待ち
    if (! ie.busy) and (ie.readyState=4) then Break
    sleep(0.1)
wend
IESETDATA(ie, "題名カキカキ", "subject", "", 2)   // タイトル書込み
IESETDATA(ie, True, "color", "#0000FF")           // 文字色=青


// IE にてGoogleを表示、日本語ページより検索 (RecIEにより生成されたもの)  #N34
Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
setOleEvent()
IE.Navigate("http://www.google.co.jp/")
BusyWait()
IESetData(IE,"検索文字","q") // TEXT
IESetData(IE,True,"btnG") // SUBMIT 
BusyWait()
IELink(IE,"日本語のページを検索")
BusyWait()
// OleEvent(IE);  IE.Quit()  // OleEventクリア & IE終了

//------
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Public Pub_url, Pub_docc, Pub_BeforNav_cnt, Pub_DocComp_cnt, Pub_inp_flg
Procedure BusyWait()
  Sleep(0.3)
  tm = GetTime()
  repeat
    ifb GetTime() - tm > 90  // TimeOut
       Pub_docc = ""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
       IE.Navigate(Pub_url)
       tm = GetTime()
    endif
    Sleep(0.2)
    ifb Pub_inp_flg
       Pub_inp_flg = False
       continue
    endif
    if IE.busy then continue
    if Pub_url = "" then break  // No read
    if (Pos("*"+Pub_url+"*",Pub_docc)) or (Pos("*"+IE.LocationURL+"*",Pub_docc)) or (Pub_BeforNav_cnt<=Pub_DocComp_cnt) then else continue
    errflg = False
    if IE.document.title = "503 Unavailable" then errflg = True
    if IE.document.title = "Service Unavailable" then errflg = True
    if IE.document.title = "503 Service Temporarily Unavailable" then errflg = True
    ifb errflg
       Sleep(90)  // 503: Wait&Retry
       tm = 0
       continue
    endif
    Sleep(0.3)
  until ! Pub_inp_flg
  Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
  SendMessageA(IE.Hwnd, WM_ACTIVATE, 0, 0)
Fend
Procedure setOleEvent()
  OleEvent(IE, "DWebBrowserEvents2", "BeforeNavigate2", "fucBeforNav")
  OleEvent(IE, "DWebBrowserEvents2", "DocumentComplete", "fucDocComp")
  OleEvent(IE, "DWebBrowserEvents2", "OnQuit", "fucQuit")
  Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0; Pub_inp_flg=False
Fend
Procedure fucBeforNav()
  ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
     if Pub_url="" then Pub_url = ""+EVENT_PRM[1]
     Pub_BeforNav_cnt = Pub_BeforNav_cnt + 1
  endif
  Pub_inp_flg = True
Fend
Procedure fucDocComp()
  ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
     Pub_docc = Pub_docc + "*"+EVENT_PRM[1]+"*"
     Pub_DocComp_cnt = Pub_DocComp_cnt + 1
  endif
  Pub_inp_flg = True
Fend
Procedure fucQuit()
  ExitExit
Fend


// Yahoo!ファイナンスを開き、データをExcelに送りグラフを作成  #N35
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = True
kcode = "4689.t"          // 銘柄コード
yys=2012; mms=1; dds=1    // 開始年月日
yye=2012; mme=3; dde=1    // 終了年月日
url = "http://info.finance.yahoo.co.jp/history/?code="+kcode+"&sy="+yys+"&sm="+mms+"&sd="+dds+"&ey="+yye+"&em="+mme+"&ed="+dde+"&tm=d="
IE.Navigate(url)
BusyWait(IE)
Excel = XLOPEN(True)      // Excel起動  Pro版の関数
Excel.Range("A1").ColumnWidth = 16   // A列の幅
dim head[] = "日付","始値","高値","安値","終値","出来高","調整後終値"
XLSETDATA(Excel, head, "A1")
// データ取得
body = IEGetSrc(IE, "BODY")
body = Copy(body, Pos("調整後終値*",body))     // 取得開始位置
body = Copy(body, 1, Pos("</TBODY>",body))     // 取得終了位置
num = Length(SPLIT(body, "</tr>"))-2           // 行数
dim sdat[num][7]
cnt = 1
for y = num to 1 step -1
    for x = 1 to 7     // 列
        sdat[y][x] = BetweenStr(body, "<td>", "</td>", cnt)
        cnt = cnt + 1
    next
next
XLSETDATA(Excel, sdat, "A2")              // 一括で設定  Pro版の関数
Excel.ActiveSheet.Name = IEGetData(IE,"TAG=H1")  // シート名に企業名
// グラフ作成
CONST xlColumns = 2
CONST xlLine = 4
RunGraph = Excel.ActiveSheet.ChartObjects.Add(440,10,400,400).Chart
RunGraph.ChartType = xlLine
rng = Excel.Range("A1","E"+num)
RunGraph.SetSourceData(Source:=rng, PlotBy:=xlColumns)

// 画面更新待ち
CONST WM_ACTIVATE = 06
DEF_DLL SendMessageA(Hwnd,Long,Long,Dword):Bool:user32.DLL
Procedure BusyWait(ie)
  Sleep(0.5)  // Wait
  Const TIME_OUT = 90
  tm = Gettime()
  repeat
    Sleep(0.2)
    ifb Gettime() - tm > TIME_OUT
      MsgBox("Time Out:BusyWait")
      ExitExit
    endif
  until (! ie.busy) and (ie.readyState=4)
  Sleep(0.5)
  SendMessageA(ie.Hwnd, WM_ACTIVATE, 0, 0)
Fend


// Firefox にてGoogleを表示、検索 & ニュース表示  #N36
id = GETID("Mozilla Firefox", "MozillaWindowClass")  // Firefoxは起動済みの事
CTRLWIN(id, ACTIVATE)
SENDSTR(id, "http://www.google.co.jp/", 1, True)    // URL
SCKEY(id, VK_RETURN)
表示完了待ち(id, ITM_BTN, "Google 検索")
SENDSTR(id, "検索文字", 3, True)            // 検索文字
ifb GETSTR(id, 3, STR_EDIT) = ""
    SENDSTR(id, "検索文字", 4, True)        // 3ではなく4の時
endif
CLKITEM(id, "Google 検索", CLK_BTN)         // 検索ボタン
表示完了待ち(id, ITM_LINK, "ニュース")
CLKITEM(id, "ニュース", CLK_LINK)           // ニュース

// 指定アイテムの文字が確認できるまで待つ
Procedure 表示完了待ち(id, kind, item)
  While True
    Sleep(0.4)
    for n in GETITEM(id, kind)
       if n = item then Exit
    next
  wend
Fend


// Google Chrome にてGoogleを表示、検索 & ニュース表示  #N37
// 必:起動オプション(accessibilityをOnにする)  "--force-renderer-accessibility"
path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
id = Exec(path + " --force-renderer-accessibility --process-per-tab --new-window http://www.google.co.jp/")
表示完了待ち(id, ITM_ACCCLK, "Google 検索")
SENDSTR(id, "検索文字", 2, True)            // 検索文字
CLKITEM(id, "Google 検索", CLK_BTN)         // 検索ボタン
表示完了待ち(id, ITM_LINK, "ニュース")
CLKITEM(id, "ニュース", CLK_LINK)           // ニュース

// 指定アイテムの文字が確認できるまで待つ
Procedure 表示完了待ち(id, kind, item)
  While True
    Sleep(0.4)
    for n in GETITEM(id, kind)
       if n = item then Exit
    next
  wend
Fend


// MS Edge にてGoogleを表示、検索 & ニュース表示  #N38
DOSCMD("start microsoft-edge:http://www.google.co.jp/")
id = GETID("Microsoft Edge", "", -1)
表示完了待ち(id, ITM_BTN, "Google 検索")
SENDSTR(id, "検索文字", 1, True)            // 検索文字
SCKEY(id, VK_RETURN)
表示完了待ち(id, ITM_LINK, "ニュース")
CLKITEM(id, "ニュース", CLK_LINK)           // ニュース

// 指定アイテムの文字が確認できるまで待つ
Procedure 表示完了待ち(id, kind, item)
  While True
    Sleep(0.4)
    for n in GETITEM(id, kind)
       if n = item then Exit
    next
  wend
Fend


// Javaのデモアプリ FileChooserDemo を起動、操作  #N39
// Javaアプリは ACC(アクセシビリティインターフェース)指定の必要あり
デモ名 = "FileChooserDemo"
パス = "C:\Program Files\Java\demo\jfc\"
DosCmd("java -jar <#DBL>"+パス+デモ名+"\"+デモ名+".jar<#DBL>", True)
id = GETID(デモ名, "SunAwtFrame", -1)
if ChkBtn(id, "Open", 1, True) then print "Open"    // Dialog Tyep チェック
if ChkBtn(id, "Save", 1, True) then print "Save"
Sleep(2)
ClkItem(id, "Custom", CLK_ACC, True)        // Custom クリック
SendStr(id, "書き込み", 1, True, True)      // 文字書き込み
ClkItem(id, "Metal", CLK_ACC, True)         // Look and Feel


// メールからスクリプトを指定して実行する(basp21.dll を使用)  #N40
// サブジェクトに UWSC xxxx.uws と書かれていればその xxxx.uws を実行
// スケジュールのタイマーにて一定間隔にて起動するよう指定しておく
bobj = CreateOLEObj("basp21")
output = bobj.RcvMail(サーバ, ユーザID, パスワード, "LIST", GET_CUR_DIR)
for i = Length(output)-1 to 0 step -1
    p = Pos("UWSC ", output[i])
    if p = 0 then continue
    wks = Trim(Copy(output[i], p+5, 9999))
    p = Pos(".uws", wks)
    if p = 0 then continue
    filnm = Copy(wks, 1, p+3)
    wk = bobj.RcvMail(サーバ, ユーザID, パスワード, "DELE "+(i+1), GET_CUR_DIR)   // 指定メール削除
    exec("uwsc.exe " + filnm)        // xxxx.uwsの実行
    break
next


// VBScript、JScriptを呼び出す(足し算をする)  #N41
scpt = CreateOleObj("ScriptControl")
pls1 = 5
pls2 = 9
// VBScriptを使う
scpt.language="VBScript"
src = "Function tasizan(a, b): tasizan = a + b: End Function"
scpt.AddCode(src)                               // ソースを登録
answer = scpt.Run("tasizan", pls1, pls2)        // 実行
print pls1 + " + " + pls2 + " = " + answer + "です(VBScript)"

// JScriptを使う
scpt.language="JScript"
src = "function tasizan(a, b){ return a + b; }"
scpt.AddCode(src)                               // ソースを登録
answer = scpt.Run("tasizan", pls1, pls2)        // 実行
print pls1 + " + " + pls2 + " = " + answer + "です(JScript)"


// スレッドを使い吹出しを複数を出す  #N42
PUBLIC clear_fuki = -1      // 消去する識別No.を指定する
Balloon("main")
thread create_fuki(1, "aaaa", 100, 100)        // スレッドにて吹出し生成
thread create_fuki(2, "bbbb", 200, 200)
thread create_fuki(3, "cccc", 300, 300)
sleep(3)
clear_fuki = 2      // bbbbbを消去
sleep(5)

// 吹出し生成 (pno=識別No.、msg=表示メッセージ、x,y=位置)
procedure create_fuki(pno, msg, x, y)
  Balloon(msg, x, y)
  while clear_fuki<>pno;  sleep(0.1);  wend    // 消去指定されるまで表示
Fend


// Yahoo!検索Webサービスの利用  #N43
url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=YahooDemo&"
key = "高校野球"            // 検索文字
xml = GetRXML(url + "query=" + Encode(Encode(key, CODE_UTF8), CODE_URL))
wkp = xml.getElementsByTagName("Result")
for i = 0 to wkp.Length-1
    print wkp.item[i].childNodes.item[0].text    // Title
    print wkp.item[i].childNodes.item[1].text    // Summary
    print wkp.item[i].childNodes.item[2].text    // Url
    print
next

// ResponseXMLの取得
Function GetRXML(url)
  oHttp = CreateOLEObj("MSXML2.XMLHTTP")
  oHttp.Open("GET", url, 0)
  oHttp.Send
  Result = oHttp.responseXML
Fend


// Vista/7 ガジェット 時計の設定変更  #N44
id = GETID("時計", "BasicWindow")
MOUSEORG(id, 2);  MMV(0, 0)              // メニューを有効にする為の処理
ifb ! CLKITEM(id, "設定", CLK_ACC)       // Vista
    CLKITEM(id, "オプション", CLK_ACC)   // Windows7
endif
MOUSEORG(id, 0)
clockid = GETID("", "SideBar_SettingsWindow")
CLKITEM(clockid, "次へ", CLK_ACC or CLK_BACK, False)    // フォーカス移す(JavaScriptの画像ボタン)
KBD(VK_SPACE)      // 時計を一つ変更
CLKITEM(clockid, "秒針を表示する", CLK_ACC)
CLKITEM(clockid, "OK", CLK_ACC)


// キーボードからのキーを一文字づつずらす  #N45
for k = VK_A to VK_Y
    SETHOTKEY(k, ,"fuckey")     // AからYまでキー登録
next
Sleep(100)
for k = VK_A to VK_Y
    SETHOTKEY(k)               // 解除
next

// 一文字ずらす
Procedure fuckey()
    KBD(HOTKEY_VK+1)
Fend


// CLK_ACC指定時の位置、順番を確認する  #N46
// Yahoo!にて "地図"の 位置、順番を確認
id = GETID("Yahoo! JAPAN")
for i = 1 to 99
    if ! ClkItem(id, "地図", CLK_ACC or CLK_MUSMOVE, False, i) then break
    Balloon(i, G_MOUSE_X, G_MOUSE_Y+20)
    Sleep(1)
next


// スタートメニュー プログラムを ポップアップメニューにする  #N47
PUBLIC pmenu[1000]   // メニュー表示用
PUBLIC pexe[1000]    // 実行の為のフルパス
PUBLIC cnt = 0
s = GET_APPDATA_DIR + "\Microsoft\Windows\Start Menu\Programs"  // ユーザーのスタートメニュー
reFolder(s, "")
s = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"      // パブリックのスタートメニュー
reFolder(s, "")
n = POPUPMENU(pmenu)
if n >= 0 then doscmd(pexe[n], True)    // 選択項目の実行

// 再帰処理で項目を取得
Procedure reFolder(path, fldernm)
   maxnum = GETDIR(path+"\"+fldernm)
   if (fldernm<>"") and (maxnum>0)
      pmenu[cnt] = fldernm         // サブメニュ項目
      cnt = cnt + 1
   endif
   for n = 0 to maxnum-1
       if fldernm = ""
          pmenu[cnt] = GETDIR_FILES[n]    // TOP項目
       else
          if n = 0
             pmenu[cnt] = "{" + GETDIR_FILES[n]  // サブメニュの始まり
          else
             pmenu[cnt] = GETDIR_FILES[n]
          endif
       endif
       pmenu[cnt] = Replace(pmenu[cnt], ".lnk", "")       // .lnk拡張子は表示しない
       pexe[cnt] = path+"\"+fldernm+"\"+GETDIR_FILES[n]   // フルパス
       cnt = cnt + 1
   next
   for n = 0 to GETDIR(path+"\"+fldernm, "\")-1
       reFolder(path+"\"+fldernm, GETDIR_FILES[n])    // 再帰で下のフォルダーを見る
   next
   if (fldernm<>"") and (maxnum>0)
      pmenu[cnt-1] = pmenu[cnt-1] + "}"   // TOPでなければサブメニュを閉じる
   endif
Fend


// iTunesを起動しラジオの選択  #N48
// ラジオ → "80's Flashback" → "ABF ANALOG"
itunes = CreateOLEObj("iTunes.Application")
id = GETID("iTunes", "iTunes", -1)         // ACCによる操作
ClkItem(id, "ラジオ", CLK_ACC)
ClkItem(id, "80's Flashback", CLK_ACC or CLK_SHORT)
while ! ClkItem(id, "ABF ANALOG", CLK_ACC or CLK_SHORT)
    Sleep(1)                               // クリックが確認できるまで
wend


// タスクマネージャよりプロセス情報を読み取り、メモリ使用量でソート  #N49
if KINDOFOS() >= 23 then Exit       // Win7以下用
id = Exec("taskmgr.exe")
id = GETID("タスク マネージャ", "#32770", -1)
ClkItem(id, "プロセス", CLK_TAB)
GETITEM(id, ITM_LSTVEW, 1, 0)       // イメージ名
imagenm = Slice(ALL_ITEM_LIST)      // 配列コピー
GETITEM(id, ITM_LSTVEW, 1, 4)       // 消費メモリ
memory = Slice(ALL_ITEM_LIST)
for n = 0 to Length(imagenm)-1
    memory[n] = Val(Token(" ", memory[n]))  // 数値部のみ切取り
next
QSort(memory, 0, imagenm)
for n = 0 to Length(imagenm)-1
    print imagenm[n] +"<#TAB>"+ memory[n]
next


// マインスイーパー自動処理  #N50
if KINDOFOS() < 20 then Exit  // Vista/ Win7
Public cell[32,32]            // 状態[x,y](地雷個数)
Public row, col               // 横、縦
Public id
id = GETID("マインスイーパ")
while True
   状態確認()
   クリック()
   Sleep(0.5)
   if GETID("負けました", "#32770", 0.01)>0 then break
   if GETID("勝ちました", "#32770", 0.01)>0 then break
wend

// ACCによる全ての状態を取得
Procedure 状態確認()
   GETITEM(id, ITM_ACCCLK)
   wks = ALL_ITEM_LIST[Length(ALL_ITEM_LIST)-1]  // 最終項目から縦横
   col = Val(Trim(BETWEENSTR(wks, "横", "、")))  // マインスイーパ側の表示が縦横で間違っている...
   row = Val(Trim(BETWEENSTR(wks, "縦", "の")))
   res = row +", "+col+"<#CR>"
   n = 0
   for y = 1 to col
      for x = 1 to row
         wks = ALL_ITEM_LIST[n]
         n = n + 1
         ifb Pos("開いていない", wks)>0
            cell[x,y] = -1                // 開いてない:-1
         elseif Pos("地雷はありません", wks)>0
            cell[x,y] = 0                 // 地雷なし:0
         else
            cell[x,y] = Val(Trim(BETWEENSTR(wks, "周囲に", "個の地雷")))  // 地雷個数
         endif
         res = res + format(cell[x,y], 3)
      next
      res = res + "<#CR>"
   next
   Balloon(res, 0, 0, 0, 8, "MS ゴシック",,,64)
Fend

// 解法は乱数による神託方式
Procedure クリック()
   while True
      x = RANDOM(row)+1
      y = RANDOM(col)+1
      ifb cell[x,y]<0
         flg = CLK_ACC or CLK_SHORT or CLK_MUSMOVE
         if y > col/2 then flg = flg or CLK_FROMLAST  // 位置が後半であれば後ろからサーチ
         ClkItem(id, "横 "+y +"、縦 "+x, flg)         // 表示がX, Yで逆
         break
      endif
   wend
Fend


// PowerShellより C#を呼び出す(足し算をする)  #N51
pls1 = 5
pls2 = 9
wks = "(" + pls1 + "," + pls2 + ")"
print PowerShell(CShp + "[Samplecls]::PlusFuc" + wks)
PowerShell(CShp + "[Samplecls]::PlusFuc2" + wks)

TextBlock CShp
$source=@"
using System.Windows.Forms;
public class Samplecls{
    public static string PlusFuc(string a, int b)
    {
        return "数値足算:" + (int.Parse(a) + b);
    }
    public static void PlusFuc2(string a, int b)
    {
        MessageBox.Show("文字足算:" + a + b.ToString());
    }
}
"@
Add-Type -Language CSharp -TypeDefinition $Source -ReferencedAssemblies System.Windows.Forms

EndTextBlock


// PowerShellより .Net Frameworkを利用しフォームを作る  #N52
PowerShell(netForm, True, 2)
id = GETID("test !!!", "WindowsForms", -1)
ACW(id, 100, 100)

TextBlock netForm
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object System.Windows.Forms.Form
$form.width = 300
$form.height = 200
$form.Text = "test !!!"
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(100, 50)
$label.Text = "ラベル"
$form.Controls.Add($label)
$button = New-Object System.Windows.Forms.Button
$button.Location = New-Object System.Drawing.Point(100, 100)
$button.Text = "ボタン"
$button.add_Click({$label.Text = "Hello world !"})
$form.Controls.Add($button)
$Form.ShowDialog()
EndTextBlock


// デフォルトプリンタの設定を変更する  #N53
// デフォルトプリンタの設定
obj = CreateOLEObj("WScript.Network")
obj.SetDefaultPrinter("プリンタ名")
// プロパティの表示
DOSCMD("rundll32 printui.dll,PrintUIEntry /p /n<#DBL>プリンタ名<#DBL>", True)


// 1分間操作がなかったら場合にモニターをOFF状態にする  #N54
DEF_DLL GetTickCount(): Dword: Kernel32
DEF_DLL GetLastInputInfo({Long, Dword}): Bool: User32
CONST DF_SIZE = 8
DIM wktm
while True
    GetLastInputInfo(DF_SIZE, wktm)
    if GetTickCount() - wktm > 60000   // 60秒以上変化なし
      POFF(P_MONIPOWER2)
      break
    endif
    sleep(1)
wend


// 指定フォルダにあるjpgファイルをペイントにドロップする  #N55
folder = "C:\Users\xxxx\Pictures"
paintID = exec("mspaint.exe")       // ペイントの起動
n = GETDIR(folder, "*.jpg")         // jpgファイル名の取得
for i = 0 to n-1
    file = GETDIR_FILES[i]
    DROPFILE(paintID, folder, file)  // 1つずつドロップ
    Balloon((i+1)+"/"+n+": " +file)
    sleep(5)                         // 5秒単位で次へ
next


// 指定ウィンドウの全オブジェクトの文字を種類別に取得する  #N56
id = GETID("xxxx")      // ウィンドウ指定
dim name[] = "ボタン", "リスト/コンボ", "タブ", "メニュー", "ツリービュ", "リストビュ", "エディト", "スタテック文字", "ステータスバー", "ツールバー", "ACCクリック可", "ACCテキスト", "ACCエディト"
dim kid[] =  ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVEW, ITM_LSTVEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_ACCCLK, ITM_ACCTXT, ITM_ACCEDIT
for x = 0 to Length(name)-1
    print name[x]
    for n in GETITEM(id, kid[x])  // GETITEM関数により種別指定で文字取得
        print "  " + n
    next
    print
next


// OCRの利用(Office付属)  #N57
CONST miLANG_ENGLISH = 9            // English
CONST miLANG_JAPANESE = 17          // 日本語
// メモ帳に文字を書き BMP保存
id = Exec("notepad.exe")
SendStr(id, "2011/01/01 I am hungry", 1, True)
SCKey(id, VK_END, VK_RETURN, VK_RETURN)   // キャレットを移動
SaveImg("test.bmp", id, 0, 0, 200, 32, True)
// BMPをOCRに読み込む
doc = CreateOLEObj("MODI.Document")
try
  doc.Create("test.bmp")
except
    doc.Create("test.bmp")
endtry
doc.OCR(miLANG_ENGLISH, False, False)
for i = 0 to doc.Images.Count-1
    print doc.Images[i].Layout.Text
next


// IE にてファイルのダウンロード処理  #N58
// IE(IE9以上) にてダウンロードのページが開いている事(http://www.uwsc.info/download.html)
ieid = GETID("Internet Explorer", "IEFrame")
ClkItem(ieid, "UWSC Free版", CLK_LINK or CLK_SHORT)   // Free版のUWSCをクリック
sleep(1)                                              // 間が必要
ClkItem(ieid, "\保存\名前を付けて保存", CLK_BTN)      // '保存'スプリットボタンの '名前を付けて保存'をクリック
setNameFileDlg("abc", ".zip")                         // ファイル名 abc.zip にてダウンロード
closeDlg(ieid)                                        // ダウンロード終了確認

// '名前を付けて保存'ダイアログに名前を設定し保存(fname:保存ファイル名、extens:拡張子)
Function setNameFileDlg(fname, extens)
   Result = False
   id = GETID("名前を付けて保存", "#32770", 5)
   if id < then Exit
   Sleep(1)
   pp = -1
   for n = 1 to 3       // 検索項目が付加される事がある為Edit順番を確認
      ifb Pos(extens, GetStr(id, n))>0
         pp = n
         break
      endif
   next
   if pp < 0 then Exit
   SendStr(id, fname + extens, pp, True)
   Result = ClkItem(id, "保存", CLK_BTN or CLK_MUSMOVE)
Fend
// ダウンロード終了確認、フォルダーを開く
Procedure closeDlg(ieid)
   while True
      Sleep(1)
      n = GETITEM(ieid, ITM_ACCTXT)
      if Pos("ダウンロードが完了", ALL_ITEM_LIST[n-1])>0
         CLKITEM(ieid, "フォルダーを開く", CLK_BTN)
         Exit
      endif
   Wend
Fend


// OpenOffice.org/LibreOffice 表計算(Calc)の操作、存在しない場合にはExcelにて  #N59
// Pro版のみ
try
  ex = XLOPEN(, XL_OOOC)   // OpenOffice.org もしくは LibreOffice の Calcの起動
except
  try
    ex = XLOPEN(, XL_NEW)  // Excelはあるか
  except
    msgbox("OOo Calcも Excelもありません")
    Exit
  endTry
endTry
anm = SPLIT("A B C D E F G H I")
XLSETDATA(ex, anm, "A1")
dim dd[9, 9]   // 9x9の値作成
for y = 1 to 9
   for x = 1 to 9
      dd[y, x] = y*10+x
   next
next
XLSETDATA(ex, dd, "A2")   // 一つずつ設定するよりも配列に入れて一度で渡す、その方が早いので
for x = 0 to 8
    fum = "=SUM("+anm[x]+"1:"+anm[x]+"9)" // 式 =SUM("A1:A9")
    XLSETDATA(ex, fum, 12, x+1)
next
ret = XLGETDATA(ex, "A12:I12")  // 値の取得(一列指定でも二次元で返される)
for x = 1 to 9
    print ret[1][x]
next


// IE上のFlashからデータ取得(FXのレート取得)  #N60
DEF_DLL SetParent(HWND, HWND): HWND: User32
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://aaa.bbb.ccc/")
while True                                              // 接続表示待ち
    if (! ie.busy) and (ie.readyState=4) then Break
    sleep(0.1)
wend
hnd = GetCtlHnd(IE.HWnd,"MacromediaFlashPlayerActiveX", 2)  // Flash(リアルタイムレート)
if hnd = 0
    // IE10以上では Flashは内臓の為ハンドルの取得はできないので、クライアント全体"Internet Explorer_Server"を指定
    flash_id = HndToID(GETCTLHND(IE.HWnd,"Internet Explorer_Server"))
else
    flash_id = HndToID(hnd)
    CtrlWin(HndToID(IE.HWnd), MIN)
    sleep(2)
    SetParent(hnd, NULL)                                        // FlashをIEからデスクトップに移動
    ACW(flash_id, G_SCREEN_W-STATUS(flash_id, ST_WIDTH), 0)
    sleep(1)
endif
DIM dd[9]  // 傾き計算 10*30秒
slp = 0
while True
   for n = 0 to GETITEM(flash_id, ITM_ACCTXT or ITM_BACK)-1
       if ALL_ITEM_LIST[n] = "米ドル円"
          bid = VAL(ALL_ITEM_LIST[n+3])
          ask = VAL(ALL_ITEM_LIST[n+6])
       endif
  next
  SHIFTARRAY(dd, 1)
  dd[0] = bid       // 最直近
  if dd[9]>0 then slp = slope(dd)*-100   // データがそろえば傾き計算
  Balloon("米ドル円 bid="+ bid +", ask="+ ask +", 傾き="+FORMAT(slp,7,5))
  sleep(30)
wend

// 回帰:傾き
Function slope(wk[])
   x=0;  y=0;  x2=0;  xy=0
   n = Length(wk)
   for i = 0 to n-1
       x = x + i
       y = y + wk[i]
       x2 = x2 + i * i
       xy = xy + i * wk[i]
   next
   Result = (xy * n - (x*y)) / (x2 * n - (x*x))
Fend


// マウスがクリック可能領域に入った時に そのオブジェクトの中心にマウスを移動する  #N61
sv_loc = ""
while True
   role = POSACC(0, G_MOUSE_X, G_MOUSE_Y, ACC_ROLE or ACC_BACK)       // オブジェクト種別の取得
   if (role="ボタン")or(role="メニュー項目")or(role="一覧項目")or(role="チェック ボックス")or(role="オプション ボタン")
      s = POSACC(0, G_MOUSE_X, G_MOUSE_Y, ACC_LOCATION or ACC_BACK)   // 位置、サイズの取得
      if sv_loc <> s
         sv_loc = s
         loc = SPLIT(s, ",", True, True)
         MMV(loc[0]+(loc[2]/2), loc[1]+(loc[3]/2))    // オブジェクトの中心にマウス移動
      endif
   else
      sv_loc = ""
   endif
   sleep(0.1)
wend


// IE上に表示されている文字 「です」を 「だす」に書き換える、カラーも変更  #N62
IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
s = IEGETSRC(IE, "body")
s = Replace(s, "です", "<font color='#FFFFFF' style='background-color:#996633'>だす</font>")
IESETSRC(IE, s, "body")


// CDOを利用したメール送信  #N63
Const SMTP_SERVER = "mail.xxx.yyy.zzz"  // SMTPメールサーバー名
Const SMTP_PORT = 587                   // ポートNo.
Const SMTP_AUTHEN = 1                   // SMTP認証: 0:なし、1:basic、2:NTLM
Const SMTP_SSL = True                   // SSL利用
Const SMTP_ID = "xxxxx"                 // ID
Const SMTP_PASWD = "yyyyy"              // Password
Const SMTP_TIMEOUT = 60                 // タイムアウト秒
Const MAILFROM = "from@xxx.yyy.zzz"     // 送信者メールアドレス
//
MailTo = "to@xxx.yyy.zzz"               // あて先メールアドレス
mailSubj = "題名"                       // 題名
MailBody = "内容"                       // 内容
//
Const cdoSendUsingPort = 2              // 外部SMTP
Const cdoPath = "http://schemas.microsoft.com/cdo/configuration/"
objCDO = CreateOLEObj("CDO.Message")
With objCDO
    With .Configuration.Fields
        .Item(cdoPath+"sendusing") = cdoSendUsingPort
        .Item(cdoPath+"smtpserver") = SMTP_SERVER
        .Item(cdoPath+"smtpauthenticate") = SMTP_AUTHEN
        .Item(cdoPath+"smtpserverport") = SMTP_PORT
        .Item(cdoPath+"smtpusessl") = SMTP_SSL
        .Item(cdoPath+"sendusername") = SMTP_ID
        .Item(cdoPath+"sendpassword") = SMTP_PASWD
        .Item(cdoPath+"smtpconnectiontimeout") = SMTP_TIMEOUT
        .Update
    EndWith
    .MimeFormatted = True
    .Fields.Update
    .From = MAILFROM
    .To = MailTo
    .Subject = mailSubj
    .TextBody = MailBody
    .Send
EndWith


// インプットボックスを利用した計算  #N64
// OKボタンで入力されて計算式を計算する、CANCELボタンで終了
PUBLIC x, y     // インプットボックスの位置
s = ""
thread locate
while True
   if x = ""
      s = INPUT("計算")
   else
      s = INPUT("計算", s, False, x, y)
   endif
   if s = EMPTY then Exit
   if s = "" then Continue
   n = Pos("=", s)
   if n > 0 then s = Copy(s, 1, n-1)
   try
     n = Eval(s)
   except
     Continue
   endtry
   s = s + "= " + n
wend

// インプットボックスの位置を保存
Procedure locate()
   while True
      id = GETID("","TUinpBox_uwsc",-1)
      x = Status(id, ST_X)
      y = Status(id, ST_Y)
      sleep(1)
   wend
Fend


// CSVファイル情報をUWSファイルに取り込んだ形で使う  #N65
fp = Fopen("", F_READ or F_WRITE)   // テンポラリーファイル作成(ファイル名なし)
Fput(fp, csvtxt, F_ALLTEXT)         // ファイル形式で利用
for y = 1 to Fget(fp, F_LINECOUNT)
    for x = 1 to 8
        print Fget(fp, y, x)
    next
next
Fclose(fp)

TEXTBLOCK csvtxt
11, 12, 13, 14, 15, 16, 17, 18
12, 22, 23, 24, 25, 26, 27, 28
31, 32, 33, 34, 35, 36, 37, 38
ENDTEXTBLOCK


// 現在位置を Google マップ で表示する  #N66
// Windows8以上、「コントロールパネル」→「位置情報の設定」→「位置情報プラットフォームを有効にする」を Onにする
Latitude = SENSOR(SNSR_Location_Latitude)
Longitude = SENSOR(SNSR_Location_Longitude)
if (Latitude="") or (Longitude="")
   Msgbox("位置情報の取得ができません。")
   Exit
endif
try
IE = CREATEOLEOBJ("InternetExplorer.Application")
except
  exec("C:\Program Files\Internet Explorer\iexplore.exe")
  IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
endTry
IE.Visible = True
IE.Navigate("http://maps.google.com/maps?q=" +Latitude+","+Longitude)


// オーディオ出力が2系統あり、指定WAVファイルのみ別系統で出力する  #N67
// 前面にヘッドホン、後方にスピーカが接続された状態にて
outn = 0
if SLCTBOX(SLCT_BTN, 0, "ヘッドホン・スピーカーのどちらで鳴らしますか?", "ヘッドホン", "スピーカー") = SLCT_2 then outn = 1
SOUND("C:\Windows\Media\Ring01.wav", True, outn)


// 低レベルで記録したスクリプトのスピードを変える  #N68
Repeat
   fnm = INPUT("スピード変更したいスクリプトを ドラッグ&ドロップしてください。")
   if fnm = EMPTY then ExitExit
Until FOPEN(fnm, F_EXISTS) and (Pos(".uws", fnm)>0)
Repeat
   sp = INPUT("スピードアップ率を入力してください。(0.5〜10)<#CR> 0.5=半分速、1=等倍速、10=10倍速")
   if sp = EMPTY then ExitExit
   sp = VAL(sp)
Until (0.5<=sp) and (sp<=10)
fp = FOPEN(fnm, F_READ or F_WRITE)
for n = 1 to FGET(fp, F_LINECOUNT)
    ss = FGET(fp, n)
    if (Copy(ss,1,4)="MMV(") or (Copy(ss,1,4)="BTN(") or (Copy(ss,1,4)="KBD(") or (Copy(ss,1,4)="ACW(") or (Copy(ss,1,6)="SLEEP(")
       lsts = Token("/)", Copy(ss,Pos(",",ss,-1)+1,999))         // 最後のカンマ以降を切り出し
       ss = Copy(ss, 1, Pos(",",ss,-1)) + lsts + "/" + sp + ")"  // スピード率を付け替える
       FPUT(fp, ss, n)
    endif
next
FCLOSE(fp)




Copyright (C) 2007-2017 umiumi All rights reserved.