// メモ帳起動
If MsgBox("メモ帳を起動しますか?", BTN_YES or BTN_NO) = BTN_YES then Exec("notepad")
// メッセージ
メモID = GETID("メモ帳")
Ifb メモID < 0 then
  Fukidasi("メモ帳は起動されていません", 100, 100, 1, 16, "MS 明朝")
  Sleep(5)
  Fukidasi()         // 吹き出し消す
Else
  SendStr(メモID, "メモ帳は起動されています")
  Sleep(5)
  CtrlWin(メモID, CLOSE)         // メモ終了
  ClkItem(GETID("メモ帳"), "いいえ")   // 保存はしない
endif


// マウス水平移動、 別スクリプトファイルの呼出し
// For - Next
For x = 0 to 600
  MMV(x, 200)       // マウスムーブ
  If (x mod 100) = 0 then Call .\TEST.uws  // 100ドット毎にTEST.uws の実行
  Sleep(0.1)
Next

// While - Wend
x = 0
While x < 600
  MMV(x, 200)
  If (x mod 100) = 0 then Call .\TEST.uws
  x = x + 1
  Sleep(0.1)
Wend

// Repeat - Until
x = 0
Repeat
  MMV(x, 200)
  If (x mod 100) = 0 then Call .\TEST.uws
  x = x + 1
  Sleep(0.1)
Until x > 600


// DOSコマンドによるファイルのコピー
Sound("c:\winnt\media\canyon.mid")     // バックミュージック
MsgBox("バックアップをとります")
DosCmd("Copy c:\*.uws c:\temp\*.bak")   // バックアップ
Sound()                  // STOP
Sound("beep")               // BEEP

// 強制電源断
POFF(P_POWEROFF or P_FORCE)


// ボタン選択
SELECT SLCTBOX(SLCT_BTN, 10, "どれか選んでね", "AAAA", "BBBB", "CCCC")
 CASE SLCT_1
  FUKIDASI("1番目が選ばれました")
 CASE SLCT_2
  FUKIDASI("2番目が選ばれました")
 CASE SLCT_3
  FUKIDASI("3番目が選ばれました")
 CASE 0
  FUKIDASI("タイムアウトしました")
SELEND
Sleep(3)
FUKIDASI()

// チェックボックス(複数選択の可能性あり)
ans = SLCTBOX(SLCT_CHK, 0, "必要なものをチェックしてね", _ // 行結合
    "AAAA", "BBBB", "CCCC")
wks = ""
if (ans and SLCT_1) <> 0 then wks = wks + "1番目"
if (ans and SLCT_2) <> 0 then wks = wks + "2番目"
if (ans and SLCT_3) <> 0 then wks = wks + "3番目"
FUKIDASI(wks + "が選ばれました")
Sleep(3)
FUKIDASI()

// CASE の定義は文字でも数値でも変数でもOK
wkmoji = "BBB"
SELECT INPUT("なんか入れて")
 CASE "AAA"       // 文字
  FUKIDASI("AAA")
 CASE wkmoji       // 変数
  FUKIDASI(wkmoji)
 CASE 3         // 数値
  FUKIDASI("3")
 DEFAULT
  FUKIDASI("訳わかんないです")
SELEND
Sleep(3)

// ポップアップメニュ
dim pp[7] = "aaa", "bbb", "ccc", "{111", "222", "333}", "ddd" // 111, 222, 333 は cccのサブメニュ
x = POPUPMENU(pp)
ifb x >= 0
 print pp[x] + "が選ばれた"
else
 print "キャンセルされた"
endif


// 入力された数を階乗計算する
While True
 数 = input("1〜10の間の数を入力してください")
 ifb VAL(数) = ERR_VALUE
   MsgBox("数値を入れてください")
   Continue
 endif
 ifb (数<1) or (数>10)
   MsgBox("指定範囲内の数を入れてください")
   Continue
 endif
 break
wend

print 数 + "の階乗の答えは" + Format(階乗計算(数), 10) + "です"  // 10桁分の幅を取り表示
// Mainプログラムはここまで

// 関数定義
function 階乗計算(値)
  ifb 値 = 0 then
    Result = 1
    Exit
  endif
  Result =値 *階乗計算(値-1)  // このように再帰計算もできるよ
fend


// DLLの使用
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
DEF_DLL GetCursorPos({long,long}):bool:user32      // 構造体使用
DEF_DLL ClipCursor({long,long,long,long}):bool:user32  // 構造体使用

MF_BYPOSITION =$400
MF_GRAYED =$1
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)

// 構造体を使用したものは展開して設定
dim x,y
GetCursorPos(x,y)
print "マウス位置="+x +","+y
ClipCursor(x-100,y-100,x+100,y+100)  // +-100以内にマウス移動を限定
Sleep(10)

// Post/Message は以下のように
DEF_DLL PostMessageA(HWND,LONG,LONG,DWORD):Bool:user32.DLL
DEF_DLL SendMessageA(HWND,LONG,LONG,DWORD):LONG:user32.DLL

//var宣言を付けると参照引数(ポインター渡し)
//DEF_DLL teststr(var string,var int,var double):string:TEST.DLL


// メモ帳の操作
メモ帳id =GETID("メモ帳")
ifb メモ帳id <0 then
  MsgBox("メモ帳が起動してません")
  Exit
endif

// 置換の実行
SendStr(メモ帳id, "リターンの実行<#CR>", 1, True) // リターン =<#CR>
SendStr(メモ帳id, "タブの実行<#TAB>")        // タブ =<#TAB>
SendStr(メモ帳id, "あああ")
ClkItem(メモ帳id, "置換", CLK_MENU)
置換id =GETID("置換")
SendStr(置換id, "あああ", 1, True)     // 検索
SendStr(置換id, "いいい", 2, True)     // 置換
ClkItem(置換id, "すべて置換")
ClkItem(置換id, "キャンセル")


// 全部のウィンドウ情報を表示する 又アイコン状態のものは元に戻す
数 = GETALLWIN()  // 全IDゲット
Print 数
For i = 0 to 数-1
  print STATUS(ALL_WIN_ID[i], ST_TITLE)   // タイトル表示
  // 状態表示
  print "X=" + STATUS(ALL_WIN_ID[i], ST_X) + ",Y=" + STATUS(ALL_WIN_ID[i], ST_Y)
  print "幅=" + STATUS(ALL_WIN_ID[i], ST_WIDTH) + ",高=" + STATUS(ALL_WIN_ID[i], ST_HEIGHT)
  print "IsICON=" + STATUS(ALL_WIN_ID[i], ST_ICON)
  print ",IsVISIBLE=" + STATUS(ALL_WIN_ID[i], ST_VISIBLE)
  print ",IsACTIVE=" + STATUS(ALL_WIN_ID[i], ST_ACTIVE)
  // アイコン状態のものは元に戻す
  If STATUS(ALL_WIN_ID[i], ST_ICON) then CtrlWin(ALL_WIN_ID[i], NORMAL)
Next


// リストボックスに在る物を全て表示する
id = GetID("Form1")
for i = 0 to GetItem(id, ITM_LIST, 1)-1
  print ALL_ITEM_LIST[i]
next


// 画面解像度を変更する(Windows XP)
Exec("Control Desk.cpl")         // 画面プロパティ起動
id = getid("画面のプロパティ", "#32770")
ClkItem(id, "設定", CLK_TAB)
kz = GETSLIDER(id)            // 0:640, 1:800、 2:1024  
if kz > 0 then SETSLIDER(id, kz-1)    // 解像度を一段下げる  
ClkItem(id, "True Color (32 ビット)", CLK_LIST)
ClkItem(id, "OK", CLK_BTN)
ClkItem(GETID("画面"), "OK", CLK_BTN)
ClkItem(GETID("モニタの設定"), "はい", CLK_BTN)


// 電卓を開き バージョン確認
calcID = Exec("calc.exe")
Sleep(1)
SCKEY(id, VK_ALT, H, A)      // ヘルプ -> バージョン情報
s = ""
for n = 1 to 6
  s = s + GetStr(GETID("バージョン情報"), n, STR_STATIC) + "<#CR>"
next
SendStr(0, s)           // クリップボードへ

// クリップボード貼付け
メモID = EXEC("notepad", 0, 100, 10, 400, 400)
Sleep(1)
SCKEY(メモID, VK_CTRL, V)

// 文字置換
wks = GETSTR(メモID)
wks = REPLACE(wks, "abc", "xyz")  // abc ->xyzに置換
Print wks


// カーソル位置の色を表示
x = G_MOUSE_X; y = G_MOUSE_Y
c = PeekColor(x, y)
PRINT "赤="+G_赤(c)+",緑="+G_緑(c)+",青="+G_青(c)

// タスクトレイのアイコンを左クリック
Ifb CHKIMG("タスクトレイアイコン.BMP")
  BTN(LEFT, CLICK, G_IMG_X+5, G_IMG_Y+5)
Endif

// ウィンドウ "あいう"の画像を保存
SaveImg("あいう.BMP", GETID("あいう"))

// 以下 関数
function G_赤(c)
  Result = c and $FF
fend
function G_緑(c)
  Result = (c and $FF00) / $100
fend
function G_青(c)
  Result = (c and $FF0000) / $10000
fend


// CSVファイルの値を2倍して書き戻す
fid = FOPEN("TEST.CSV", F_READ or F_WRITE)    // ファイルオープン
For 行 = 1 to FGET(fid, -1)            // 行数分
  For 列 = 1 to 3                // 3列
    atai = FGET(fid, 行, 列)         // GET
    if ChkNum(atai) then atai = atai * 2   // 数字であれば2倍
    FPUT(fid, atai, 行, 列)          // PUT
  next
next
FCLOSE(fid)                    // ファイルクローズ

// 昨日の日報(yymmdd.dat), 月報(yymm.dat)名を生成
GetTime(-1)                    // 昨日の日付を取得
日報ファイル = G_TIME_YY2 +G_TIME_MM2 +G_TIME_DD2 +".DAT"
月報ファイル = G_TIME_YY2 +G_TIME_MM2 +".DAT"

// 2005年4月1日から60日目を算出
GetTime(60, "2005/04/01")             // 2005年4月1日を基準に+60日
指定日 = G_TIME_YY2 +G_TIME_MM2 +G_TIME_DD2 +".DAT"

// 現在時間から6時間後
GetTime(6/24)                   // 小数点以下は時間計算

// 2005年4月1日12時30分から+1日と12時間を算出
GetTime(1.5, "2005/04/01 12:30:00")


// GETKEYSTATEによる Aキー、SHIFTキー、マウスクリックをチェック
while True
  wks = ""
  if GETKEYSTATE(VK_A) then wks = wks + ",A"
  if GETKEYSTATE(VK_SHIFT) then wks = wks + ",SHIFT"
  if GETKEYSTATE(VK_RBUTTON) then wks = wks + ",右クリック"
  if GETKEYSTATE(VK_LBUTTON) then wks = wks + ",左クリック"
  Fukidasi(Copy(wks,2,99))
  if wks <> "" then sleep(0.3)
  sleep(0.2)
wend


// SETHOTKEYによる キーチェック
for k = VK_A to VK_F
  SETHOTKEY(k, ,"fuckey")     // AからFまでキー登録
next
SETHOTKEY( ,MOD_CONTROL, "fucx")  // CTRLキー の登録
SETHOTKEY(VK_A, MOD_SHIFT, "fucx") // Shift + A の登録
Sleep(100)
for k = VK_A to VK_F
  SETHOTKEY(k)          // 解除
next
// End
Procedure fuckey()
  print CHR(HOTKEY_VK) + "が押された"
Fend
Procedure fucx()
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
  if (HOTKEY_VK=VK_A) and (HOTKEY_MOD=MOD_SHIFT) then print "Shift + Aが押された"
Fend


// OPTION指定
Option SAMESTR, OPTPUBLIC     // 大小文字を区別、ファイル間PUBLIC変数の重複禁止
Option LOGPATH= C:\TEMP\TEST.LOG // ログ出力を変更

// パラメータ引数(PARAM_STR)の表示
print Length(PARAM_STR)+"個のパラメータ引数があります"
for i=0 to Length(PARAM_STR)-1
  print PARAM_STR[i]
next

// ファイル名表示
for i=0 to GETDIR("C:\temp")-1
  print GETDIR_FILES[i]
next

// *.datファイル名のみ表示
for i=0 to GETDIR("C:\temp","*.dat")-1
  print GETDIR_FILES[i]
next

// D:ドライブのディレクトリ木表示
ディレクトリ("D:", 0)
procedure ディレクトリ(dd, lve)
  lve = lve + 1
  for i=0 to GETDIR(dd,"\")-1
    sps = ""
    for s=2 to lve;  sps = sps + " ";  next   
    print sps + GETDIR_FILES[i]
    ディレクトリ(dd+"\"+GETDIR_FILES[i], lve)
  next
fend

// ペイントに C:\Temp\abc.bmp をドロップする
DROPFILE(GETID("ペイント"), "C:\Temp", "abc.bmp")


// Excelの操作
Excel = CreateOLEObj("Excel.Application")
Excel.Visible = True
Workbook = Excel.WorkBooks.Add
for y = 1 to 5
  for x = 1 to 5
    Excel.ActiveSheet.Cells[y,x].Value = y*10 + x
  next
next
PLeneSet = WorkBook.WorkSheets[1].Range["A5:E5"].Borders[4]
PLeneSet.Weight = 3
PLeneSet.ColorIndex = 3
Excel.WorkBooks.Open(FileName :="e:\test.csv", readOnly :=False)


// IE の表示、その中のリンクアドレスを全て抽出する
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www.yahoo.co.jp/")   // 指定URL
COM_ERR_IGN                 // COMエラー無視
while True                 // 接続表示待ち
  if (! IE.busy) and (IE.readyState=4) then Break
  sleep(0.1)
wend
COM_ERR_RET                // エラー処理復帰
for i = 0 to IE.document.links.length-1  // リンクアドレスを表示
  print IE.document.links[i].href
next


// c:\windows下のディレクトリ表示
fs = CreateOLEObj("Scripting.FileSystemObject")
gf = fs.GetFolder("c:\windows")
for i = 0 to GETOLEITEM(gf.SubFolders)-1 // コレクション取得
  print ALL_OLE_ITEM[i].name
next


// マウス位置の文字取得
While True
  x = G_MOUSE_X; y = G_MOUSE_Y     // マウス位置
  id = GETID(GET_FROMPOINT_WIN)     // アクティブウィンドウ
  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
  Fukidasi(wks, x+10, y+10, 3)
  Sleep(1)
Wend


// 音声認識: "コンピュータ"、"電卓"、"メモ帳"、"切換え", "終り"  の5つの単語を使用
dim cmd[3] = "コンピュータ", "電卓", "めもちょう"
RECOSTATE(True, cmd, "きりかえ", "おわり")  // 開始、単語登録
While True
 ss = DICTATE(True)      // 取得
 print ss
 select ss
  case "コンピュータ"
    sound("BEEP")
  case "電卓"
    exec("calc.exe")
  case "めもちょう"
    exec("notepad.exe")
  case "きりかえ"           // アクティブウィンドウの切換え
    SCKEY(0, VK_SHIFT, VK_ALT, VK_TAB)
    ss = ss + " " + STATUS(GETID(GET_ACTIVE_WIN), ST_TITLE)
  case "おわり"
    SPEAK("ByeBye"); break     // 音声合成
 selend
Wend
RECOSTATE(False)


// スレッドとメインにてカウント
Thread カウント()           // スレッドは噴出しにてカウント
print "メイン"
cnt = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
for i = 1 to 10
  print Token(", ", cnt, True)    // メインはPRINTにてカウント
  Sleep(1)
next

procedure カウント()
  for i = 1 to 10
    Fukidasi("スレッド " + i)
    Sleep(1)
  next
fend


// 計算関数のモジュール化
計算.足し算(10)       // 0+10
計算.引き算(5)        // 10-5
計算.掛け算(10)       // 5*10
計算.割り算(2)        // 50/2
Print "答え=" + 計算.結果  // 25

MODULE 計算
  Public 結果 = 0
  Procedure 足し算(x)
    結果 = 結果 + x
  Fend
  Procedure 引き算(x)
    結果 = 結果 - x
  Fend
  Procedure 掛け算(x)
    結果 = 結果 * x
  Fend
  Procedure 割り算(x)
    結果 = 結果 / x
  Fend
EndModule


// フォーム画面
// TEST.html として以下があるとする
 <html><body style="overflow:hidden;"><form method="POST">
 <font color="#FF0000">abcdefg</font></p>
 <input type="text" name="Text1" size="68"><p>
 <input type="checkbox" name="Check1" value="ON">aaaa
 <input type="checkbox" name="Check2" value="ON">bbbb<p>
 <input type="radio" checked name="Radio1" value="V1">1111
 <input type="radio" name="Radio1" value="V2">2222<p>
 <select size="1" name="Select1">
  <option>xxxxx</option> <option>yyyyy</option>
 </select></p>
 <input type="submit" value=" OK " name="OKBtn">
 <input type="submit" value="キャンセル" name="CancelBtn">
 </form></body></html>


// OKBtn ボタンが押されたら各入力値を表示する
ifb CREATEFORM("TEST.html", "タイトル1", False, 0, 500, 320) = "OKBtn"
  print GETFORMDATA("Text1")
  print "aaaa="+GETFORMDATA("Check1")
  print "bbbb="+GETFORMDATA("Check2")
  print "1111="+GETFORMDATA("Radio1", "V1")
  print "2222="+GETFORMDATA("Radio1", "V2")
  print GETFORMDATA("Select1")
else
  print "キャンセル"
endif
print

// 返されるCOMオブジェクトにて値を変更、画面が閉じるまで待つ
obj = CREATEFORM("TEST.html", "タイトル2", True, 0, 500, 320)
SETFORMDATA(True, "Check2")    // Check2 を Onに変更
SETFORMDATA("yyyyy", "Select1")  // Select1 を "yyyyy"に変更
SETFORMDATA("カキカキ", "Text1")  // Text1 を "カキカキ"に変更
while obj.Visible         // ボタンが押されて画面が閉じるまで待つ
  Sleep(0.2)
wend
print GETFORMDATA("Text1")
print "aaaa="+GETFORMDATA("Check1")
print "bbbb="+GETFORMDATA("Check2")
print "1111="+GETFORMDATA("Radio1", "V1")
print "2222="+GETFORMDATA("Radio1", "V2")
print GETFORMDATA("Select1")
if GETFORMDATA("OKBtn") then print "OK"  // ボタンには 一度だけTrue(1)が設定される
if GETFORMDATA("CancelBtn") then print "Cancel"
print

// 20秒間まってから画面を閉じる
obj = CREATEFORM("TEST.html", "タイトル3", True, FOM_NOICON or FOM_NOHIDE, 500, 320)
s = IEGETSRC(obj, "Font", 1)
s = Replace(s, "abcdefg", "20秒まってね!")
IESETSRC(obj, s, "Font", 1)     // 文字の変更
sleep(20)
print GETFORMDATA("Text1")
print "aaaa="+GETFORMDATA("Check1")
print "bbbb="+GETFORMDATA("Check2")
print "1111="+GETFORMDATA("Radio1", "V1")
print "2222="+GETFORMDATA("Radio1", "V2")
print GETFORMDATA("Select1")
if GETFORMDATA("OKBtn") then print "OK"  // ボタンには 一度だけTrue(1)が設定される
if GETFORMDATA("CancelBtn") then print "Cancel"
obj.Quit         // 画面を閉じる


// 計算画面
obj = CREATEFORM("about:blank", "Calc", True, FOM_NOHIDE)  // フォーム生成
obj.Document.write(計算フォーム)       // HTMLを書き込む
while obj.Visible              // 画面が出ている間
  ifb GETFORMDATA("CalBtn")        // 計算ボタンが押された
    a = VAL(GETFORMDATA("Text1"))
    b = VAL(GETFORMDATA("Text2"))
    ifb (val(a)=ERR_VALUE) or (val(b)=ERR_VALUE)
      MsgBox("数値を入れてください"); Continue
    endif
    anser = obj.Document.body.all.tags("font").item[0]
    select GETFORMDATA("Select1")
      case "足し算"; anser.innerText = a + b
      case "引き算"; anser.innerText = a - b
    selend
  endif
  Sleep(0.1)
wend

TextBlock 計算フォーム           // 計算フォーム.html
 <form method='POST'>
  <input type='text' name='Text1' size='8'>
  <select name='Select1'><option>足し算</option><option>引き算</option></select>
  <input type='text' name='Text2' size='8'>
  <input type='submit' value=' 計算 ' name='CalBtn'><BR>
  <font color='#FF0000'>答え</font>
 </form>
EndTextBlock


// Google操作 検索結果のタイトルとURLを表示
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www.google.co.jp/")
BusyWait(IE)
IESetData(IE,"検索単語","q")         // 文字設定:検索単語
IESetData(IE,True,"btnG","Google 検索")   // SUBMIT
BusyWait(IE)
Sleep(1)                  // JavaScriptの完了待ち
body = IEGetSrc(IE, "BODY")             // BODYのソース取得
body = Copy(body, Pos("<h3 ",body), 999999)       // h3タグ以下を取得
body = Copy(body, 1, Pos("background-position", body)) // 不必要部分の削除
cnt = 1
while True
 wks= BetweenStr(body,"<h3 ","</h3>", cnt)
 if wks = EMPTY then break
 wks = REPLACE(wks,"<em>", "")    // 邪魔なタグは潰す
 wks = REPLACE(wks,"</em>", "")
 wks = REPLACE(wks,"</a>", "")
 print cnt
 print Copy(wks, Pos("<#DBL>",wks,-1)+2, 999)   // タイトル
 print BetweenStr(wks, "href=<#DBL>","<#DBL>")  // URL
 cnt = cnt + 1
wend
//------
Procedure BusyWait(ie)
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
Fend


// テーブルからのデータ取得
// IEGetData(IE, "TAG=TABLE", 2, 3, 4)  // 2つ目のTABLEの3行目4列
// IEGetData(IE, "TAG=A", 5)       // 5つ目のAタグの表示項目


// 指定文字列間の表示
moji = "A12, B12, C12, A34, B34, C34, A56, B56, C56, A78, B78, C78"
// AとCの間
print BetweenStr(moji, "A", "C")       // 12, B12,
print BetweenStr(moji, "A", "C", 2)     // 34, B34,
// 前文字と後文字が同じ時
print BetweenStr(moji, "A", "A", 1)     // 12, B12, C12,
print BetweenStr(moji, "A", "A", 2)     // 56, B56, C56, (後文字以降で取得)
print BetweenStr(moji, "A", "A", 2, True)  // 34, B34, C34, (前文字以降で取得)


// 連想配列の操作
PUBLIC HASHTBL B     // パブリック、大・小文字区別しない、キーは書込み順
HASHTBL A = HASH_CASECARE or HASH_SORT // 大・小文字区別、キーはソート

A["あ"] = 1
A["う"] = 3
A["お"] = 5
A["え"] = 4
A["い"] = 2
A["お"] = 9

// "う"の値は何?
print "'う' の値は " + A["う"]

// "え"があれば削除
ifb A["え", HASH_EXISTS]
  flg = A["え", HASH_REMOVE]    // 必要無くとも変数で受ける
endif

// ソート順で表示 (文字型での昇順ソート)
for n = 0 to Length(A)-1
  print A[n, HASH_KEY] + " = " + A[n, HASH_VAL]
next

// 関数に渡す (一次元配列の渡し方と同じ)
testproc(A)

Procedure testproc( X[] )
 print X["あ"]
Fend


// Excelのイベント処理
// クローズ処理の禁止、変更されたセル内容の表示
excel = CreateOleObj("Excel.Application")
Excel.Workbooks.Add
excel.visible = true
// Application Events: WorkbookBeforeClose (Close前)
OleEvent(excel, "AppEvents", "WorkbookBeforeClose", "BeforeClose")
// Sheet Events: Change(Cell内容変更)
OleEvent(excel.ActiveSheet, "DocEvents", "Change", "Change")
Sleep(1000)

// Book: BeforeClose
Procedure BeforeClose()
 print "Closeは禁止"
 EVENT_PRM[1] = True    // 第2引数をTrueに変更:Closeしない
Fend

// Cell: Change
Procedure Change()
 rng = EVENT_PRM[0]
 print rng.Value
Fend


// 例外処理
// エラーあり exceptで処理: 1, 3, 4
try
  print "1"
  a = "X"; a = 1 / a   // エラー
  print "2"
except
  print "3"
endtry
  print "4"

// 正常処理: 11, 33, 44
try
  try
    print "11"
  except
    print "22"
  endtry
finally
  print "33"
endtry
  print "44"

// Exitあり finallyで処理: 111, 333
関数1()
procedure 関数1()
 try
   print "111"
   Exit
   print "222"
 finally
   print "333"
 endtry
   print "444"  // Exit時:実行されない
fend


// Excel操作
// 指定Excelファイルを読み、Sheet2のB2セルの値を変更して書き戻して終了
Excel = XLOPEN("C:\TEMP\TEST.xls")
XLACTIVATE(Excel, "Sheet2")
dd = XLGETDATA(Excel, "A1:C3")
print "A1="+dd[1,1]
print "B2="+dd[2,2]
print "C3="+dd[3,3]
dd[2,2] = "変更"
XLSETDATA(Excel, dd, "A1")
XLCLOSE(Excel)

// 新規にExcelを起動してUWSCの配列を設定、保存せずに終了
Excel = XLOPEN(, True)
DIM dat[3, 3]
dat[1,1]="11"; dat[1,2]="12"; dat[1,3]="13"
dat[2,1]="21"; dat[2,2]="22"; dat[2,3]="23"
dat[3,1]="31"; dat[3,2]="32"; dat[3,3]="33"
XLSETDATA(Excel, dat, "B2")
MSGBOX("保存せずに終了します")
XLCLOSE(Excel, True)


// INIファイル処理
// 'スクリプト名'.INI  に対し読み書き
WriteIni("Number", "No1", 111)
WriteIni("Number", "No2", 222)
WriteIni("Number", "No3", 333)
print "No2 = " + ReadIni("Number", "No2")  // print No2
DeleteIni("Number", "No1")          // 削除 No1

// UWSC.INI ファイルから Position情報を読み込む 
print "Position = " + ReadIni("SET", "Position", GET_APPDATA_DIR+"\UWSC\UWSC.INI")


// EVALにて文字式を解く
a = 2
b = 4
c = 0
EVAL("c := 3")  //  := 代入
print EVAL("int(a * b + c - subr() / 2)")  // int(2 * 4 + 3 - 9.9 / 2) = 6

function subr()
  Result = 9.9
fend


// PowerShellの実行
// C:\のファイル表示(ファイルサイズ順で)
print PowerShell("Get-ChildItem C:\ | Sort-Object Length")

// $dat配列(1〜10)の値を足しながら表示
print PowerShell(prg)

TextBlock prg
$dat = 1,2,3,4,5,6,7,8,9,10
$val = 0
foreach ($v in $dat)
{
$val= $val + $v
Write-Output $val
}
EndTextBlock


// 文字列から数値のみ配列にいれ合計値を計算
str = "abc 123 def 1,456 ghi 78.9"
dat = SPLIT(str, " ", True, True)      // 数値のみ有効
print JOIN(dat, " + ")           // 123 + 1456 + 78.9
print "合計= "+ CALCARRAY(dat, CALC_ADD)  // 合計= 1657.9


// ソート
dim dat[1][4]
dim dat2[4]
dat[0][0]=5; dat[1][0]="A"; dat2[0]="V"
dat[0][1]=3; dat[1][1]="B"; dat2[1]="W"
dat[0][2]=9; dat[1][2]="C"; dat2[2]="X"
dat[0][3]=2; dat[1][3]="D"; dat2[3]="Y"
dat[0][4]=6; dat[1][4]="E"; dat2[4]="Z"
QSort(dat[0], 0, dat[1], dat2)  // 昇順、多次元配列は一次元単位にして設定
for i = 0 to 4
  print dat[0][i] +","+ dat[1][i] +","+ dat2[i]
next
// 結果
// 2,D,Y
// 3,B,W
// 5,A,V
// 6,E,Z
// 9,C,X


// メモ帳に a b c を直接送る(バックグラウンド状態でも動作)
id =exec("notepad")
MOUSEORG(GETCTLHND(id,"Edit"), 2) // メモ帳のEdit部を指定
CTRLWIN(id, MIN)         // 最少化状態での書き込み
KBD(VK_A)
KBD(VK_B)
KBD(VK_C)

// メモ帳の選択状態のフォント情報を取得
ClkItem(id, "フォント", CLK_MENU)
id = GETID("フォント")
for n = 1 to 4
  print GETSLCTLST(id, n)
next
sleep(2)
ClkItem(id, "キャンセル", CLK_BTN)


// 配列値の表示
dim dat[2][2] = 1,2,3, 4,5,6, 7,8,9
for s in dat
  print s         // 1,2,3,4,5,6,7,8,9
next
print
for s in dat[1]
  print s         // 4,5,6
next
print

// 正規表現でマッチした値の表示
regexp = CreateOleObj("VBScript.RegExp")
regexp.Pattern = "[a-zA-Z]+"
regexp.Global = True
matches = regexp.Execute("A B C")
for s in matches
  print s.Value       // A,B,C
next
print

// 文字列を一文字づつ表示
for s in "1234"
  print s         // 1,2,3,4
next
print

// C:\Tempフォルダーのファイル名表示
for s in GETDIR("C:\Temp")
  print s
next