使い方

UWSC本体とPro版に付随するRecIE・UWSC Debugger・Uws2Exeの使い方の説明です。

メイン画面/動作記録と再生

メイン画面

起動時画面

記録実行後画面

読込み
スクリプトファイルを読み込みます。(拡張子は”.UWS”のみです)
保存
動作記録をスクリプトファイルとして保存します
再生
記録したものを再生します
記録
動作記録を開始します
設定
各種設定のメニュがでます

読込み

開くスクリプトのファイル名、実行回数、パラメータを指定します。

実行回数には繰り返し実行する回数を指定します。

パラメータは引数を半角スペースで区切り、半角スペースを含む文字列は”(ダブルクォーテーション)で囲みます。受け取った引数はUNICODE文字列なので計算に使う場合はVAL関数などで数値化する必要があります。

パラメータは実行する度に渡されます。

PARAM_STRで受け取った引数にアクセスできます。

改行コードは「<#CR>」、ダブルクォーテーションは「<#DBL>」、タブは「<#TAB>」で入力します。

第一引数:12、第二引数:51、第三引数:63を指定する場合。

12 51 63

第一引数:abc、第二引数:d fを指定する場合。

abc “d f”

第一引数:”xyz”を指定する場合。

<#DBL>xyz<#DBL>

動作記録

記録ボタンを押してから STOPボタン 又は 停止ホットキー が押されるまでの動作を記録します

低レベル記録
キーボードとマウスの押し下げ情報を座標と共に低レベル関数で記録します。記録はマウスクリックかキー操作がされるか、又は マウス移動を0.5秒停止して開始した所から始まります。
MMV,ACW,GETID,BTN,KBD
高レベル記録
高レベル関数を使用して記録します、座標は記録されません。
オブジェクトの選択操作は必ずマウスでしてください、キーボードで選択操作をした場合は記録できません。
多段メニューはメニューが出る毎にクリックを実行してください。
記録できないアプリやオブジェクトがあります。
保存にて記録をスクリプトファイルとして保存できます(スクリプトですので自分で修正したり制御したりできます)
GETID,CLKITEM,SLEEP

再生

再生ボタンで再生します。スクリプトファイルをドロップしてもOKです。
引数にスクリプトファイル名を指定してUWSC を起動してもOKです(この時はスクリプトが終了するとUWSC 自体も常駐せずに終了します)。
スクリプトファイル名の後にパラメーターを付ければ 変数 PARAM_STR[] に渡せます。
停止ホットキー(デフォルト:Alt +F2)にて中断できます。
再生ホットキー(デフォルト:Alt +F1)にて一時停止ができます。

設定メニュ/設定画面

設定メニュ

RecIE(Web記録)、Uws2Exe(EXE作成)、Debugger(デバッグ) は UWSC Pro版の機能です。

タスクトレイ内外共通の項目

  1. 設定(X)
    設定画面を開きます。
  2. RecIE(Web記録)(R)
    RecIEを起動します。
  3. Uws2Exe(EXE作成)(U)
    Uws2Exeを起動します。
  4. Debugger(デバッグ)(D)
    Debuggerを起動します。
  5. .INI/.LOG Folder(F)
    「UWSC.INI」があるフォルダを開きます。「C:\Users\username\AppData\Roaming\UWSC\」
  6. Help(H)
  7. About(A)
  8. 終了(Z)
設定メニュ(タスクトレイ内)

タスクトレイ上のアイコンで右クリックすると設定メニュが出ます。

  1. タスクトレイから出る(W)
設定メニュ(タスクトレイ外)

タスクトレイ外(メイン画面)で設定をクリックと設定メニュが出ます。

  1. タスクトレイに格納(W)
  2. ランチメニュ(M)、ランチメニュの設定(Z)…

ランチメニュ

タスクトレイ上のアイコンで左クリック:ランチメニュがでます。


スクリプト登録

スクリプト設定を行います。


  1. 0〜9
  2. A〜Y

スクリプト設定


  1. 0〜9
  2. A〜Y

タスクトレイ上のアイコンで左ダブルクリック:タスクトレイから出て通常状態になります。

タスクトレイ上で終了すると次回起動時はタスクトレイ起動になります。

設定

低レベル記録
低レベル記録は 単純にキーボードとマウスの押し下げ情報を座標と共に低レベル関数で記録します。 記録はマウスクリックかキー操作がされるか、又は マウス移動を0.5秒停止して開始した所から始まります。
余分な時間、マウス移動は記録しない
ここがチェックされていれば マウス移動や余分な時間は記録されません
マウス座標を相対座標で記録する
ここがチェックされていれば マウスの座標はアクティブウィンドウに対しての座標で記録されます(後で位置調整の為スクリプトを修正するのであれば、こちら方が良いでしょう)
高レベル記録
高レベル記録は 高レベル関数を使用して記録します、座標は記録されません。オブジェクトの選択操作は必ずマウスでしてください、キーボードで選択操作をした場合は記録できません。操作はゆっくり実行してください、速いと取りこぼす事があります。多段メニューはメニューが出る毎にクリックを実行してください。記録できないアプリやオブジェクトがあります。
記録後クリップボードへコピーする
記録終了後、スクリプトをクリップボードへコピーします
ホットキー
再生
再生ボタンのホットキーを設定します
停止
再生/記録の停止ホットキーを設定します
記録
記録ボタンのホットキーを設定します
トレイ
タスクトレイ出入りのホットキーを設定します

ホットキーは以下の組み合わせから選択します。

母体キー
  1. CTRL
  2. WIN
  3. ALT
  4. SHIFT+CTRL
  5. SHIFT+ALT
  6. CTRL+ALT
組み合わせるキー
  1. SPACE
  2. F1
  3. F2
  4. F3
  5. F4
  6. F9
  7. F10
  8. F11
  9. F12
  10. Q
  11. W
  12. E
  13. R
  14. A
  15. S
  16. D
  17. F
  18. End
  19. Home
  20. F5
  21. F6
  22. F7
  23. F8
  24. T
  25. Y
  26. U
  27. I
  28. O
  29. P
  30. G
  31. H
  32. J
  33. K
  34. L
  35. Z
  36. X
  37. C
  38. V
  39. B
  40. N
  41. M
  42. 1
  43. 2
  44. 3
  45. 4
  46. 5
  47. 6
  48. 7
  49. 8
  50. 9
  51. 0

プルダウンメニューそのままの順番で書いていますが、組み合わせるキーはまとめると以下のようになります。

  1. アルファベット(A〜Z)
  2. 数字(0〜9)
  3. ファンクションキー(F1〜F12)
  4. スペース(Space)
  5. 矢印(上下左右)
  6. Home・End
スケジュール設定をする

スケジュール設定

1~40

スクリプトのスケジュールを設定できます
スクリプトファイル名を設定してタイマー設定にて起動時間を指定してください。
’休止状態から復帰する’ がチェックであればサスペンド状態からでも復帰し実行できます。
’ビープ音で知らせる’ がチェックであればスクリプト起動時にビープ音で知らせて間を2秒程取ります。

設定なし
UWSC起動時
インターバル
0時0分を基準に計算をしています (UWSC起動時からの時間ではない)
分単位:1,2,3,4,5,10,15,20,30
時間単位:1,2,3,4,6,8,12
時間指定
  1. 毎日
  2. 毎週、日~土
  3. 毎月、1~31
一回だけ実行
指定した日時に一回だけ実行されます。
式による設定
自分で式を記述する事により細かな時間設定が決められます
式の書き方は、こちらを参照。
注意:チェックは分単位でされます、分単位の設定(NN, YMDNN)を忘れずに
NN, YMDNNを記述しないと毎分実行されることになります。
指定Windowが現れた時
タイトルとクラス名のどちらか一方だけでも可
タイトルは一部分だけでも可
別プロセスで実行
別プロセスで実行します
スクリプト実行中でも起動する事ができます

式による設定で使える変数・演算子

変数
変数 意味
YY
MM
DD
HH
NN
YMDNN 2000年からの経過分
WW 曜日(日=0、月=1、火=2、水=3、木=4、金=5、土=6)

指定した日時のYMDNN(2000年からの経過分)を求めるプログラム。

DIM date = “2021/09/17 15:01:00”
PRINT INT(GETTIME(0, date) / 60)
論理演算子
演算子 意味 記述例
AND 論理積 a AND b…a、bともに真
OR 論理和 a OR b…a、bのいずれかが真
算術演算子

一定間隔で実行するとき利用します。

演算子 意味 記述例
MOD 剰余演算子 a MOD b…aをbで割った余り
比較演算子
演算子 意味 記述例
< より小さい a < b…aはbより小さい
> より大きい a > b…aはbより大きい
= 等しい a = b…aとbは等しい
<> 等しくない a <> b…aとbは等しくない
<= 以下 a <b…aはb以下
>= 以上 a >b…aはb以上

火曜日の0時と12時
(WW=2) AND (HH=0 OR HH=12) AND (NN=0)
18分間隔
(YMDNN MOD 18)= 0
分が00のとき(1時間毎)
NN = 0
分の一の位が「3」の時間(毎時3,13,23,33,43,53分)
(NN MOD 10) = 3
分が55分以降(毎時55,56,57,58,59分)
NN >= 55

エラー

存在しない変数や演算子を使ったとき。

1年以内に実行する予定がないとき。

ランチメニュ

スクリプトファイルを登録しておき選択起動できます
(スクリプトファイル以外の EXEや関連付けされたファイル等も登録できます)
ホットキー設定により出現 タスクトレイ時は左ボタンにて出現

RecIE

記録/停止
指定したURLを開いたところから記録を開始し、停止が押されるまで記録されます。
再生
記録したスクリプトを再生します。
保存
生成されたスクリプトを保存します。
設定
記録時の設定をします。

右クリックメニュー

表示項目の取得
マウス位置の表示項目を取得します。
クリック処理
JavaScript処理、画像等で通常クリックで記録できない場合やURLではなくオブジェクト文字として記録したい場合に利用します。
ページに戻る
表示ページを戻します。
HTMLの取得
HTMLのbody部を取得します。範囲設定されている場合はその部分のみを取得します。

Debugger

Load
UWSスクリプトの読込み
Save
UWSスクリプトの保存
Run
スクリプトの実行
Pause
一時停止
Stop
実行の停止
Step In
ステップ(一行)実行(関数があれば関数の中に入る)
Step Over
ステップ(一行)実行(関数の中に入らない)
Trace
現在の実行行を示します。一行実行する毎に指定のディレイ(ms)が入ります。ディレイに-1が設定されたときは実行行の追従はせず、変数値のみ更新します。
Function&Procedure
指定関数行に移動します。
Search
文字検索
Script

プログラムは「C:\Program Files(x86)\UWSC\DbgScript\」にあります。

  1. Info Under MouseCursor
  2. ObjectCharacter By Type
  3. Object With Handle
  4. PosAcc Search
Option
  1. Cross Reference
  2. Transparent Window…
  3. Font / Color
  4. Uws2Exe
Help
  1. Debugger Help
  2. UWSC Help
  3. .INI/.LOG Folder
  4. About

Scriptにあるプログラム

  • C:\Program Files (x86)\UWSC\DbgScript
    • Info_Under_MouseCursor.uws
    • Object_With_Handle.uws
    • ObjectCharacter_By_Type.uws
    • PosAcc_Search.uws
  • Info_Under_MouseCursor.uws
  • Object_With_Handle.uws
  • ObjectCharacter_By_Type.uws
  • PosAcc_Search.uws
// マウスカーソル下の情報取得
// Windowタイトル, Windowクラス名, クライアント位置, オブジェクトクラス名, POSACC, 色
// 

title = "マウスカーソル下の情報"
if GETID(title, "TFormhtm")>0 then Exit
dbg_id = GETID("UWSC Debugger","TFOya")
CtrlWin(dbg_id, MIN)
Try
  obj = CREATEFORM("about:blank", title, True, 0, 400, 210, 0 ,0)
  CONST MAX_LENGTH = 64    // Maximum number of characters
  CtrlWin(GETID(GET_FORM_WIN), ACTIVATE)
  while obj.Visible
     Sleep(0.5)
     if GetKeyState(VK_ESC) then break
     x=G_MOUSE_X;  y=G_MOUSE_Y
     fm = def_form
     fpid = GETID(GET_FROMPOINT_WIN)
     objid = GETID(GET_FROMPOINT_OBJ)
     gx = G_MOUSE_X
     gy = G_MOUSE_Y
     clx = gx - Status(fpid,ST_CLX)
     cly = gy - Status(fpid,ST_CLY)
     fm = Replace(fm, "DEF_WTITLE", Status(fpid,ST_TITLE))
     fm = Replace(fm, "DEF_WCLASS", Status(fpid,ST_CLASS))
     fm = Replace(fm, "DEF_X", clx)
     fm = Replace(fm, "DEF_Y", cly)
     fm = Replace(fm, "DEF_OBJCLS", Status(objid,ST_CLASS))
     s = POSACC(fpid, clx, cly)
     if Length(s)>MAX_LENGTH then s = Copy(s,1,MAX_LENGTH)+"..."
     fm = Replace(fm, "DEF_ACC", s)
     gbr = PEEKCOLOR(gx, gy)
     gbr16 = Replace(Format(gbr,6,-1)," ","0")
     fm = Replace(fm, "DEF_BGR", "$"+gbr16)
     fm = Replace(fm, "DEF_R", gbr and $FF)
     fm = Replace(fm, "DEF_G", (gbr/$100) and $FF)
     fm = Replace(fm, "DEF_B", (gbr/$10000) and $FF)
     fm = Replace(fm, "DEF_FNTCOL", Copy(gbr16,5,2)+Copy(gbr16,3,2)+Copy(gbr16,1,2)) // RGB
     obj.Document.open()
     obj.Document.write(fm)
     obj.Document.close()
  wend
Finally
  CtrlWin(dbg_id, NORMAL)
EndTry
// --- main end ---

// 表示フォーム
TextBlock def_form
<nobr>
Windowタイトル: DEF_WTITLE<br>
Windowクラス名: DEF_WCLASS<br>
クライアント位置: DEF_X, DEF_Y<br>
オブジェクトクラス名: DEF_OBJCLS<br>
POSACC: DEF_ACC<br>
色:BGR=DEF_BGR (R=DEF_R, G=DEF_G, B=DEF_B) <font color='#DEF_FNTCOL'>■■■■■</font>
</nobr>
EndTextBlock
// ハンドルを持つオブジェクトの情報取得
// "X, Y, 幅, 高さ, クラス名, キャプション"  (可視状態の物のみ、位置はクライアント座標)
//

dbg_id = GETID("UWSC Debugger","TFOya")
CtrlWin(dbg_id, MIN)
Try
  Fukidasi("ハンドルを持つオブジェクトの情報の表示<#CR>  ウィンドウにカーソルを合わせから Shiftキーを押してください<#CR>  キャンセル: ESCキー")
  Repeat
     if GetKeyState(VK_ESC) then Exit
     Sleep(0.02)
  Until GetKeyState(VK_SHIFT)
  Fukidasi()

  PUBLIC fpid, form, lcnt
  fpid = GETID(GET_FROMPOINT_WIN)
  form = "X, Y, 幅, 高さ, <#DBL>クラス名<#DBL>, <#DBL>キャプション<#DBL>"
  form = form + "<BR><select name='hlist' size='_DEF_SIZE_'>"
  lcnt = 0
  HndInfo(fpid, 0)
  form = form + "</select>"
  if lcnt < 2 then lcnt = 2
  form = Replace(form, "_DEF_SIZE_", lcnt)
  obj = CREATEFORM("about:blank", "ハンドル所持オブジェクト", True, 0, 540, 360, 0 ,0)
  obj.Document.write(form)
  OLEEVENT(obj.Document.body.all["hlist"], "HTMLSelectElementEvents2", "onclick", "fucOnClick")
  CtrlWin(GETID(GET_FORM_WIN), ACTIVATE)
  Rectan("<#DBL><#DBL>")
  while obj.Visible
     if GetKeyState(VK_ESC) then break
     Sleep(0.1)
  wend
  CtrlWin(GETID(GET_FORM_WIN), NOTOPMOST)
  Rectan("")
Finally
  CtrlWin(dbg_id, NORMAL)
EndTry
// --- main end ---

// ハンドル再帰所得
CONST LVL_MARK = " > "   // Level indication
CONST MAX_LENGTH = 64    // Maximum number of characters
Procedure HndInfo(id, lvl)
   if lvl = 0
      s = ""
   else
      s = (Status(id,ST_CLX)-Status(fpid,ST_CLX))+", "+(Status(id,ST_CLY)-Status(fpid,ST_CLY))+", "+Status(id,ST_WIDTH)+", "+Status(id,ST_HEIGHT)+", "
   endif
   titl = Status(id,ST_TITLE)
   if Length(titl)>MAX_LENGTH then titl = Copy(titl,1,MAX_LENGTH)+"..."
   s = s +"<#DBL>"+ Status(id,ST_CLASS) +"<#DBL>, <#DBL>"+ titl +"<#DBL>"
   if Pos(s, form)>0 then Exit
   form = form + "<option>" + Format(LVL_MARK,lvl*Length(LVL_MARK)) + s + "</option>"
   lcnt = lcnt + 1
   for n = 0 to GETALLWIN(id)-1
       HndInfo(ALL_WIN_ID[n], lvl+1)
   next
Fend

// クリックされた
Procedure fucOnClick()
   if ! Status(fpid, ST_ISID) then Exit
   Rectan(GETFORMDATA("hlist"))   // Draw rectangle
Fend

// 赤四角描画
DEF_DLL GetDC(Hwnd):long:user32
DEF_DLL ReleaseDC(Hwnd, Long):long:user32
DEF_DLL SelectObject(long, long):long:gdi32
DEF_DLL Rectangle(long, long, long, long, long):long:gdi32
DEF_DLL CreatePen(long, long, long):long:gdi32
DEF_DLL GetStockObject(long):long:gdi32
DEF_DLL DeleteObject(long):long:gdi32
CONST PS_SOLID = 0
CONST NULL_BRUSH = 5
Procedure Rectan(s)
   CtrlWin(fpid, NOTOPMOST)      // Clear old line
   CtrlWin(GETID(GET_FORM_WIN), TOPNOACTV)
   if s = "" then Exit
   dc = GetDC(0)
   pen = CreatePen(PS_SOLID, 3, $0000FF)
   SelectObject(dc, pen)
   SelectObject(dc, GetStockObject(NULL_BRUSH))
   if Copy(s, 1, 1) = "<#DBL>"    // Top Level
      x1 = Status(fpid,ST_CLX)
      y1 = Status(fpid,ST_CLY)
      x2 = x1 + Status(fpid,ST_CLWIDTH)
      y2 = y1 + Status(fpid,ST_CLHEIGHT)
   else
      s = Replace(s, Trim(LVL_MARK), "")  // Delete Level mark
      ary = Split(s, ",", True, True)
      x1 = ary[0] + Status(fpid,ST_CLX)
      y1 = ary[1] + Status(fpid,ST_CLY)
      x2 = x1 + ary[2]
      y2 = y1 + ary[3]
   endif
   Rectangle(dc, x1, y1, x2, y2)
   DeleteObject(pen)
   ReleaseDC(0, dc)
Fend
// 指定ウィンドウの全オブジェクトの文字を種類別に取得
// "ボタン", "リスト/コンボ", "タブ", "メニュー", "ツリービュ", "リストビュ", "エディト", "リンク",
//  "スタテック文字", "ACCクリック可", "ACCテキスト", "ツールバー", "ステータスバー"
// (注:IEに適用すると ITM_STATUSBAR, ITM_TOOLBARにて IE側でエラーが出る事がある)
//

dbg_id = GETID("UWSC Debugger","TFOya")
CtrlWin(dbg_id, MIN)
Try
  Fukidasi("オブジェクトの文字を種類別に取得<#CR>  ウィンドウにカーソルを合わせから Shiftキーを押してください<#CR>  キャンセル: ESCキー")
  Repeat
     if GetKeyState(VK_ESC) then Exit
     Sleep(0.02)
  Until GetKeyState(VK_SHIFT)
  Fukidasi()

  Option OPTFINALLY
  thread chkESC()
  dim oname[] = "ボタン", "リスト/コンボ", "タブ", "メニュー", "ツリービュ", "リストビュ", "エディト", "リンク", "スタテック文字", "ACCクリック可", "ACCテキスト", "ACCエディト", "ツールバー", "ステータスバー"
  dim okind[] =  ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVEW, ITM_LSTVEW, ITM_EDIT, ITM_LINK, ITM_STATIC, ITM_ACCCLK, ITM_ACCTXT, ITM_ACCEDIT, ITM_TOOLBAR, ITM_STATUSBAR
  CONST MAX_LENGTH = 64    // Maximum number of characters
  fpid = GETID(GET_FROMPOINT_WIN)
  Fukidasi("サーチ中  (キャンセル:ESCキー)", 0, 0)
  ACW(fpid)
  lcnt = 0
  form = "<select name='hlist' size='_DEF_SIZE_'>"
  for x = 0 to Length(oname)-1
     form = form + "<optgroup label='" + oname[x] + "'>"
     for y = 0 to GETITEM(fpid, okind[x])-1
        s = ALL_ITEM_LIST[y]
        if Length(s)>MAX_LENGTH then s = Copy(s,1,MAX_LENGTH)+"..."
        form = form + "<option>" + s + "</option>"
        lcnt = lcnt + 1
    next
     form = form + "</optgroup>"
     lcnt = lcnt + 1
  next
  form = form + "</select>"
  form = Replace(form, "_DEF_SIZE_", lcnt)
  Fukidasi()
  obj = CREATEFORM("about:blank", "種類別オブジェクト文字", True, 0, 540, 360, 0 ,0)
  obj.Document.write(form)
  CtrlWin(GETID(GET_FORM_WIN), ACTIVATE)
  while obj.Visible
     Sleep(0.1)
  wend
Finally
  CtrlWin(dbg_id, NORMAL)
EndTry
// --- main end ---

// ESCキーによる終了
Procedure chkESC()
   while True
      if GetKeyState(VK_ESC) then ExitExit
      Sleep(0.1)
   wend
Fend
// PosAcc関数にて画面をサーチし情報取得
// "X, Y, 幅, 高さ, ACC_ACC/ACC_API, ACC_NAME, ACC_VALUE"  (位置はクライアント座標)
//

CONST DEF_XW = 20   // Matrix size X
CONST DEF_YH = 8    // Matrix size Y

dbg_id = GETID("UWSC Debugger","TFOya")
CtrlWin(dbg_id, MIN)
Try
  Fukidasi("POSACCにて画面をサーチし情報を取得<#CR>  ウィンドウにカーソルを合わせから Shiftキーを押してください<#CR>  キャンセル: ESCキー")
  Repeat
     if GetKeyState(VK_ESC) then Exit
     Sleep(0.02)
  Until GetKeyState(VK_SHIFT)
  Fukidasi()

  CONST MAX_LENGTH = 64  // Maximum number of characters
  PUBLIC fpid
  fpid = GETID(GET_FROMPOINT_WIN)
  Fukidasi("サーチ中  (キャンセル:ESCキー)", 0, 0)
  ACW(fpid)
  hashtbl tbl
  for y = DEF_YH/2 to Status(fpid,ST_CLHEIGHT) step DEF_YH
     for x = DEF_XW/2 to Status(fpid,ST_CLWIDTH) step DEF_XW
        if GetKeyState(VK_ESC) then Exit
        MMV(Status(fpid,ST_CLX)+x, Status(fpid,ST_CLY)+y)
        if GETID(GET_FROMPOINT_WIN) <> fpid then Continue
        loc = PosAcc(fpid, x, y, ACC_LOCATION or ACC_BACK)
        if tbl[loc, HASH_EXISTS] then Continue
        s1=PosAcc(fpid,x,y,ACC_BACK); if Length(s1)>MAX_LENGTH then s1=Copy(s1,1,MAX_LENGTH)+"..."
        s2=PosAcc(fpid,x,y,ACC_NAME or ACC_BACK); if Length(s2)>64 then s2=Copy(s2,1,MAX_LENGTH)+"..."
        s3=PosAcc(fpid,x,y,ACC_VALUE or ACC_BACK); if Length(s3)>64 then s3=Copy(s3,1,MAX_LENGTH)+"..."
        tbl[loc] = s1+", "+s2+", "+s3
     next
  next
  Fukidasi()

  if Status(fpid, ST_WIN64)
     form = "X, Y, 幅, 高さ, ACC_ACC, ACC_NAME, ACC_VALUE" // 64bit: not support ACC_API
  else
     form = "X, Y, 幅, 高さ, ACC_ACC/ACC_API, ACC_NAME, ACC_VALUE"
  endif
  form = form + "<BR><select name='hlist' size='_DEF_SIZE_'>"
  lcnt = 0
  for n = 0 to Length(tbl)-1
     vs = tbl[n, HASH_VAL]
     if Trim(Replace(vs, ",", "")) = "" then Continue
     form = form + "<option>" + tbl[n, HASH_KEY] +", "+ vs + "</option>"
     lcnt = lcnt + 1
  next
  form = form + "</select>"
  if lcnt < 2 then lcnt = 2
  form = Replace(form, "_DEF_SIZE_", lcnt)
  obj = CREATEFORM("about:blank", "ACC 情報サーチ", True, 0, 540, 360, 0 ,0)
  obj.Document.write(form)
  OLEEVENT(obj.Document.body.all["hlist"], "HTMLSelectElementEvents2", "onclick", "fucOnClick")
  CtrlWin(GETID(GET_FORM_WIN), ACTIVATE)
  Rectan("<#DBL><#DBL>")
  while obj.Visible
     if GetKeyState(VK_ESC) then break
     Sleep(0.1)
  wend
  CtrlWin(GETID(GET_FORM_WIN), NOTOPMOST)
  Rectan("")
Finally
  CtrlWin(dbg_id, NORMAL)
EndTry
// --- main end ---

// クリックされた
Procedure fucOnClick()
   if ! Status(fpid, ST_ISID) then Exit
   Rectan(GETFORMDATA("hlist"))   // Draw rectangle
Fend

// 赤四角描画
DEF_DLL GetDC(Hwnd):long:user32
DEF_DLL ReleaseDC(Hwnd, Long):long:user32
DEF_DLL SelectObject(long, long):long:gdi32
DEF_DLL Rectangle(long, long, long, long, long):long:gdi32
DEF_DLL CreatePen(long, long, long):long:gdi32
DEF_DLL GetStockObject(long):long:gdi32
DEF_DLL DeleteObject(long):long:gdi32
CONST PS_SOLID = 0
CONST NULL_BRUSH = 5
Procedure Rectan(s)
   CtrlWin(fpid, NOTOPMOST)      // Clear old line
   CtrlWin(GETID(GET_FORM_WIN), TOPNOACTV)
   if s = "" then Exit
   dc = GetDC(0)
   pen = CreatePen(PS_SOLID, 3, $0000FF)
   SelectObject(dc, pen)
   SelectObject(dc, GetStockObject(NULL_BRUSH))
   if Copy(s, 1, 1) = "<#DBL>"    // Top Level
      x1 = Status(fpid,ST_CLX)
      y1 = Status(fpid,ST_CLY)
      x2 = x1 + Status(fpid,ST_CLWIDTH)
      y2 = y1 + Status(fpid,ST_CLHEIGHT)
   else
      ary = Split(s, ",", True, True)
      x1 = ary[0] + Status(fpid,ST_CLX)
      y1 = ary[1] + Status(fpid,ST_CLY)
      x2 = x1 + ary[2]
      y2 = y1 + ary[3]
   endif
   Rectangle(dc, x1, y1, x2, y2)
   DeleteObject(pen)
   ReleaseDC(0, dc)
Fend

sampleにあるプログラム

  • sample
    • Calc.uws
    • Excel.uws
    • GruGru.uws
    • IEFlash.uws
    • IEtoExcel.uws
    • サンプル.uws
    • システム情報.uws
    • タイトルクラス.uws
    • タスクトレイ.uws
    • ディレクトリ木.uws
    • バックグラウンド.uws
    • ポップアップメニュ.uws
    • メール送信.uws
    • 音声認識.uws
    • 画像保存.uws
    • 計算フォーム.uws
    • 入力フォーム.uws
    • 文字情報.uws
    • 文字変換.uws
  • Calc.uws
  • Excel.uws
  • GruGru.uws
  • IEFlash.uws
  • IEtoExcel.uws
  • サンプル.uws
  • システム情報.uws
  • タイトルクラス.uws
  • タスクトレイ.uws
  • ディレクトリ木.uws
  • バックグラウンド.uws
  • ポップアップメニュ.uws
  • メール送信.uws
  • 音声認識.uws
  • 画像保存.uws
  • 計算フォーム.uws
  • 入力フォーム.uws
  • 文字情報.uws
  • 文字変換.uws
// フォームを使用した電卓

while True
   btn = CREATEFORM("Calc.mht", "電卓", False, FOM_NOHIDE, 380, 440)
   if btn = "close" then break
   wks = GETFORMDATA("equation")
   if btn = "dot" then btn = "."
   if (wks="") and (btn=".") then btn = "0."
   if (wks="") and (val(btn)<0) then continue
   ifb btn = "C"                  // クリア
       SETFORMDATA("", "equation")
       SETFORMDATA("", "answer")
       continue
   endif
   wks = wks + btn
   try
     a = eval(wks)  // 演算
   except
     a = ""     // 不正演算
   endtry
   SETFORMDATA(wks, "equation")  // 式
   SETFORMDATA(a, "answer")      // 答え
wend


//
// Calc.mht は以下のhtmlを 画像を埋め込む為に mhtに変換したものです
//
// <html><body style="overflow:hidden;"><form method="POST">
//   <input type="text" name="equation"size="30" readonly> =
//   <input type="text" name="answer" size="12" readonly><p><p>
//   <input type="image"  src="p7.jpg" alt="7" name="7">
//   <input type="image"  src="p8.jpg" alt="8" name="8">
//   <input type="image"  src="p9.jpg" alt="9" name="9">
//   <input type="image"  src="pdiv.jpg" alt="/" name="/"><p>
//   <input type="image"  src="p4.jpg" alt="4" name="4">
//   <input type="image"  src="p5.jpg" alt="5" name="5">
//   <input type="image"  src="p6.jpg" alt="6" name="6">
//   <input type="image"  src="pmuti.jpg" alt="*" name="*"><p>
//   <input type="image"  src="p1.jpg" alt="1" name="1">
//   <input type="image"  src="p2.jpg" alt="2" name="2">
//   <input type="image"  src="p3.jpg" alt="3" name="3">
//   <input type="image"  src="pmins.jpg" alt="-" name="-"><p>
//   <input type="image"  src="p0.jpg" alt="0" name="0">
//   <input type="image"  src="ppuls.jpg" alt="+" name="+">
//   <input type="image"  src="pdot.jpg" alt="." name="dot">
//   <input type="image"  src="pc.jpg" alt="CLEAR" name="C"><p>
// </form></body></html>
// Excelに値を書込み、その後に変更されたセルがあるかをチェック

CONST CELLSU = 30           // セルの大きさ
try
  Excel = XLOPEN(True)      // Excel起動
except
  MSGBOX("Excelがありません")
  Exit
endtry
DIM sdat[CELLSU, CELLSU]    // マトリックス作成
for y = 1 to CELLSU
    for x = 1 to CELLSU
        sdat[x,y] = "X"+x+":Y"+y
    next
next
XLSETDATA(Excel, sdat, "B2")        // B2 から設定
MSGBOX("適当にセルを変更したら、OKを押して下さい")
gdat = XLGETDATA(Excel, "B2:AE31")  // B2 からCELLSU(30)分読込み
fcnt = 0
for y = 1 to CELLSU
    for x = 1 to CELLSU
        ifb sdat[x,y] <> gdat[x,y]  // セルが変更されたか
            fcnt = fcnt + 1
            print x+":"+y+"="+gdat[x,y]
        endif
    next
next
ifb fcnt = 0 
    print "変更されたセルはありませんでした"
else
    print fcnt + "個のセルが変更されました"
endif
MSGBOX("保存せずに終了します")
XLCLOSE(Excel, True)
if GETID("電卓",, 0.1) < 0 then EXEC("calc")
ACW(GETID("電卓"),107,101)
MMV(239,110,20)
MMV(240,110,81)
MMV(240,110,0)
MMV(241,110,20)
ACW(0,109,101,0,0,0)
MMV(245,110,10)
ACW(0,110,101,0,0,0)
MMV(249,110,20)
ACW(0,114,101,0,0,0)
MMV(256,110,20)
ACW(0,118,101,0,0,0)
MMV(264,110,10)
ACW(0,125,101,0,0,0)
MMV(270,110,20)
ACW(0,133,101,0,0,0)
MMV(277,111,20)
ACW(0,139,101,0,0,0)
MMV(281,113,20)
ACW(0,146,102,0,0,0)
MMV(293,113,10)
ACW(0,150,104,0,0,0)
MMV(300,115,20)
ACW(0,162,104,0,0,0)
MMV(311,116,20)
ACW(0,169,106,0,0,0)
MMV(320,119,10)
ACW(0,180,107,0,0,0)
MMV(331,123,20)
ACW(0,189,110,0,0,0)
MMV(344,127,20)
ACW(0,200,114,0,0,0)
MMV(357,132,10)
ACW(0,213,118,0,0,0)
MMV(364,138,20)
ACW(0,226,123,0,0,0)
MMV(380,139,20)
ACW(0,233,129,0,0,0)
MMV(389,147,10)
ACW(0,249,130,0,0,0)
MMV(398,152,20)
ACW(0,258,138,0,0,0)
MMV(408,156,20)
ACW(0,267,143,0,0,0)
MMV(415,162,10)
ACW(0,277,147,0,0,0)
MMV(420,168,20)
ACW(0,284,153,0,0,0)
MMV(422,175,20)
ACW(0,289,159,0,0,0)
MMV(423,183,20)
ACW(0,291,166,0,0,0)
MMV(424,192,10)
ACW(0,292,174,0,0,0)
MMV(424,201,20)
ACW(0,293,183,0,0,0)
MMV(424,210,20)
ACW(0,293,192,0,0,0)
MMV(424,220,10)
ACW(0,293,201,0,0,0)
MMV(423,230,20)
ACW(0,293,211,0,0,0)
MMV(421,241,20)
ACW(0,292,221,0,0,0)
MMV(417,252,10)
ACW(0,290,232,0,0,0)
MMV(411,261,20)
ACW(0,286,243,0,0,0)
MMV(406,270,20)
ACW(0,280,252,0,0,0)
MMV(399,279,10)
ACW(0,275,261,0,0,0)
MMV(390,287,20)
ACW(0,268,270,0,0,0)
MMV(382,295,20)
ACW(0,259,278,0,0,0)
MMV(381,301,10)
ACW(0,251,286,0,0,10)
MMV(379,308,10)
ACW(0,250,292,0,0,0)
MMV(378,316,21)
ACW(0,248,299,0,0,0)
MMV(377,322,20)
ACW(0,247,307,0,0,0)
MMV(371,328,10)
ACW(0,246,313,0,0,0)
MMV(355,336,20)
ACW(0,240,319,0,0,0)
MMV(345,342,20)
ACW(0,224,327,0,0,0)
MMV(335,349,10)
ACW(0,214,333,0,0,0)
MMV(319,354,20)
ACW(0,204,340,0,0,0)
MMV(312,354,20)
ACW(0,188,345,0,0,0)
MMV(303,355,10)
ACW(0,181,345,0,0,0)
MMV(292,355,20)
ACW(0,172,346,0,0,0)
MMV(276,356,20)
ACW(0,161,346,0,0,0)
MMV(270,355,10)
ACW(0,145,347,0,0,0)
MMV(263,355,20)
ACW(0,139,346,0,0,0)
MMV(255,354,20)
ACW(0,132,346,0,0,0)
MMV(248,351,10)
ACW(0,124,345,0,0,0)
MMV(240,349,20)
ACW(0,117,342,0,0,0)
MMV(237,346,20)
ACW(0,109,340,0,0,0)
MMV(234,345,20)
ACW(0,106,337,0,0,0)
MMV(230,344,10)
ACW(0,103,336,0,0,0)
MMV(223,342,20)
ACW(0,99,335,0,0,0)
MMV(212,338,20)
ACW(0,92,333,0,0,0)
MMV(206,333,10)
ACW(0,81,329,0,0,0)
MMV(198,328,20)
ACW(0,75,324,0,0,0)
MMV(198,328,10)
ACW(0,67,319,0,0,0)
MMV(192,322,10)
MMV(187,318,10)
ACW(0,61,313,0,0,0)
MMV(178,313,20)
ACW(0,56,309,0,0,0)
MMV(174,306,20)
ACW(0,47,304,0,0,0)
MMV(169,300,10)
ACW(0,43,297,0,0,0)
MMV(164,294,20)
ACW(0,38,291,0,0,0)
MMV(160,289,20)
ACW(0,33,285,0,0,0)
MMV(157,284,20)
ACW(0,29,280,0,0,0)
MMV(155,278,10)
ACW(0,26,275,0,0,0)
MMV(153,271,20)
ACW(0,24,269,0,0,0)
MMV(152,263,20)
ACW(0,22,262,0,0,0)
MMV(151,255,10)
ACW(0,21,254,0,0,0)
MMV(151,247,20)
ACW(0,20,246,0,0,0)
MMV(151,236,20)
ACW(0,20,238,0,0,0)
MMV(151,224,10)
ACW(0,20,227,0,0,0)
MMV(151,213,20)
ACW(0,20,215,0,0,0)
MMV(151,204,20)
ACW(0,20,204,0,0,0)
MMV(151,196,10)
ACW(0,20,195,0,0,0)
MMV(153,186,21)
ACW(0,20,187,0,0,0)
MMV(154,177,20)
ACW(0,22,177,0,0,0)
MMV(156,168,10)
ACW(0,23,168,0,0,0)
MMV(159,160,20)
ACW(0,25,159,0,0,0)
MMV(162,153,20)
ACW(0,28,151,0,0,0)
MMV(166,147,10)
ACW(0,31,144,0,0,10)
MMV(171,142,10)
ACW(0,35,138,0,0,0)
MMV(174,137,20)
ACW(0,40,133,0,0,0)
MMV(177,134,20)
ACW(0,43,128,0,0,0)
MMV(180,131,10)
ACW(0,46,125,0,0,0)
MMV(183,128,20)
ACW(0,49,122,0,0,0)
MMV(189,124,20)
ACW(0,52,119,0,0,0)
MMV(194,121,10)
ACW(0,58,115,0,0,0)
MMV(199,118,20)
ACW(0,63,112,0,0,0)
MMV(204,116,20)
ACW(0,68,109,0,0,0)
MMV(208,114,10)
ACW(0,73,107,0,0,0)
MMV(211,113,20)
ACW(0,77,105,0,0,0)
MMV(213,113,20)
ACW(0,80,104,0,0,0)
MMV(215,112,10)
ACW(0,82,104,0,0,0)
MMV(217,111,20)
ACW(0,84,103,0,0,0)
MMV(222,110,20)
ACW(0,86,102,0,0,0)
MMV(232,109,10)
ACW(0,91,101,0,0,0)
MMV(240,109,20)
ACW(0,101,100,0,0,0)
MMV(248,111,20)
ACW(0,109,100,0,0,0)
MMV(255,113,20)
ACW(0,117,102,0,0,0)
MMV(260,115,10)
ACW(0,124,104,0,0,0)
MMV(264,116,20)
ACW(0,129,106,0,0,0)
MMV(269,117,20)
ACW(0,133,107,0,0,0)
MMV(276,117,10)
ACW(0,138,108,0,0,0)
MMV(279,118,20)
ACW(0,145,108,0,0,0)
MMV(280,118,20)
ACW(0,148,109,0,0,0)
ACW(0,149,109,0,0,0)
MMV(280,118,0)
MMV(280,119,30)
// IEの中のFlashPlayerの操作 (YouTube:20秒間だけ再生)
// IE10では Flashは内臓の為にハンドルを取得できない

// YouTube - Sweet Tired Cat
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www.youtube.com/watch?v=hPzNl6NKAG0")
BusyWait(IE)
// FlashPlayerActiveX のID取得
id = GETID("YouTube", "IEFrame")
hnd = GETCTLHND(id, "MacromediaFlashPlayerActiveX", 2)
if hnd = 0 then hnd = GETCTLHND(id, "MacromediaFlashPlayerActiveX", 1)
if hnd = 0
   MsgBox("FlashPlayerActiveX のハンドルを取得できませんでした")
   Exit
endif
flashid = HNDtoID(hnd)
x = status(flashid, ST_X)
y = status(flashid, ST_Y)
h = status(flashid, ST_HEIGHT)
MMV(x+8, y+h-8)
sleep(1)
print "Flashの位置: "+ x +","+ y
print "ビデオ時間: "+ GETSTR(flashid, 1, STR_ACC_STATIC)
Repeat
  Sleep(0.5)
  MMV(x+8, y+h-8-RANDOM(8))    // コントロール部が閉じないように揺らす
Until Copy(GETSTR(flashid, 1, STR_ACC_STATIC),1,3) = "0:2"   // 20sec
print "PAUSE"
ClkItem(flashid, "Pause", CLK_ACC or CLK_MUSMOVE, True)
//------
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)
Fend
// Yahoo! ファイナンスを開き 指定株価時系列データを取得してExcelに送る

IE = CREATEOLEOBJ("InternetExplorer.Application")  // IE
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起動
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")  // 一括で設定
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)


//------
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)
Fend
// サンプル

if KINDOFOS() < 21       // Windows7 未満
   msgbox("ごめんなさい。<#CR>このサンプルは Windows7 以上の必要があります。")
   Exit
endif
Speak("Run the sample script", True)

// メッセージ表示位置
PUBLIC msgx, msgy
msgx = MONITOR(0, MON_WIDTH) / 2    // メインモニタの真ん中
msgy = MONITOR(0, MON_HEIGHT) / 2

// マウス、キーボード入力をブロックする
StopForm(False)                 // Stopウィンドウは出さない
LockHardEX(0, LOCK_MOUSE)       // マウス禁止

// Paint 全画面表示
paintid = paintimg()

// メモ帳 起動
メモID = EXEC(GET_SYS_DIR+"\notepad.exe", False, 200, 10, 400, 400)
if Pos("メモ帳", Status(メモID, ST_TITLE)) = 0
   msgbox("Japanese-Windows only")
   Exit
endif

// メモ帳 フォントの変更
ClkItem(メモID, "フォント", CLK_MENU or CLK_SHORT)
fontid = GETID("フォント", "#32770", 3)
if fontid<0 then fontid = GETID("Font", "#32770")
sv_fontStyl = GETSTR(fontid, 2)       // 現在のスタイル
sv_fontSize = GETSTR(fontid, 3)       // 現在のサイズ
ClkItem(fontid, "太字", CLK_LIST)     // スタイル変更
SendStr(fontid, "16", 3, True)        // サイズ変更 (ClkItemでも可)
Sleep(1)
ClkItem(fontid, "OK")

// 計算式をメモ帳に書き込み
計算式 = "12345+98765="
SendStr(メモID, 計算式)
Sleep(1)

// 電卓で計算
電卓ID = EXEC(GET_SYS_DIR+"\calc.exe")
if KINDOFOS() < 30                       // Windows7, 8
   ClkItem(電卓ID, "普通の電卓")
   SendStr(電卓ID, 計算式)
   Sleep(1)
   ret = GetStr(電卓ID, 4, STR_STATIC)
else                                            // Windows10 ストアアプリ
   電卓ID = GETID("電卓", "ApplicationFrameWindow")
   for modebtn in GetItem(電卓ID, ITM_BTN)      // 現在のモードを調べる
       if Pos("メニュー、", modebtn)>0
          if Pos("標準", modebtn)=0             // 標準 電卓に切り替え
             ClkItem(電卓ID, modebtn, CLK_BTN)
             sleep(1)
             ClkItem(電卓ID, "標準 電卓", CLK_LIST or CLK_LEFTCLK)
          endif
          break
       endif
   next
   for n in 計算式                 // 1文字づつクリック
      if n = "+" then n = "プラス"
      if n = "=" then n = "等号"
      ClkItem(電卓ID, n)
   next
   Sleep(1)
   ret = GetStr(電卓ID, 2, STR_STATIC)
   Token(" ", ret)
endif
SendStr(メモID, ret+"<#CR>")       // メモ帳に答えを追加

// 電卓回す
SendStr(メモID, "電卓をグルグル回してみる<#CR>")
if  MsgBox("回してみます?", BTN_YES or BTN_NO) = BTN_YES
    moji = "音楽を入れますか?<#CR>Yesなら5秒以内に Shift キーを押してね"
    if  音楽を入れるかキーチェック(VK_SHIFT, moji)
        musicnm = "flourish.mid"
        Balloon("読み込み中...", msgx, msgy)
        Sound(musicnm)                       // バックミュージック
        Balloon()
    endif
    for 回数 = 1 to 3
       if 回数=2 then Balloon("いつもより余計に回しています<#cr>パチパチパチ"_
                  , msgx, msgy-20, 3, 14)        // _により前行と繋がっている
       call .\grugru.uws                         // grugru.uws を実行
    next
else
    Balloon("それは残念", msgx, msgy, 0, 14)
    Sleep(3)
endif

// 終了処理
Balloon("フォントの変更を戻す")
ClkItem(メモID, "フォント", CLK_MENU or CLK_SHORT) // フォントの変更を戻す
fontid = GETID("フォント", "#32770", 3)
if fontid<0 then fontid = GETID("Font", "#32770")
SendStr(fontid, sv_fontStyl, 2, True)     // スタイル戻す
SendStr(fontid, sv_fontSize, 3, True)     // サイズ戻す
Sleep(1)
ClkItem(fontid, "OK")
CtrlWin(paintid, CLOSE2)                  // Paint終了
Sound()                       // SOUND OFF
Balloon()                                 // 吹出しOFF
CtrlWin(電卓ID, CLOSE)                    // 電卓終了
SendStr(メモID, "終了~")
Sleep(1)
CtrlWin(メモID, CLOSE)                    // メモ終了
Sleep(1)
ClkItem(GETID("メモ帳", "#32770"), "保存しない")
LockHardEX()                              // 入力ブロックの解除
// メイン処理はここまでになる(関数の前まで)



// 以下 関数(サブルーチン)

// 指定キーが押されたらTrueを返す
Function 音楽を入れるかキーチェック(chk_key, moji)
   Result = False                       // 戻り値
   sv_tm = GetTime()
   while GetTime()-sv_tm < 5            // 5秒まで待つ
       wk_sec = 5 - (GetTime()-sv_tm)
       Balloon(moji+" "+wk_sec, msgx, msgy, 0, 14)
       if  GETKEYSTATE(chk_key)         // 指定キーチェック
        Result = True                // 戻り値=True
      break
       endif
       sleep(0.2)
   wend
   Balloon()                            // 吹出しOFF
fend


// usertile12.bmp/user-200.png/user-192.pngを Paintで表示
Function paintimg()
   Result = 0
   Const dpath = "C:\ProgramData\Microsoft\User Account Pictures\"
   img = dpath + "Default Pictures\usertile12.bmp"  // Win7
   if  ! FOPEN(img, F_EXISTS)
       img = dpath + "user-200.png"                 // Win8
       if ! FOPEN(img, F_EXISTS)
          img = dpath + "user-192.png"              // Win10
          if ! FOPEN(img, F_EXISTS) then exit       // 無し
       endif
   endif
   id = exec("mspaint.exe <#DBL>"+ img +"<#DBL>")
   sleep(1)
   ClkItem(id, "表示", CLK_ACC)
   ClkItem(id, "全画面", CLK_ACC or CLK_BACK)
   sleep(1)
   Result = id                    // IDを返す
Fend
// APIによりシステム情報(コンピュータ名、ユーザ名)の取得
// WMIによるBIOS、マザーボード情報の取得

DEF_DLL GetComputerNameA(var string, var Long): Long: kernel32
DEF_DLL GetUserNameA(var string, var Long): Long: advapi32
ComName = Format(NULL, 100)   // 領域確保
UserName = Format(NULL, 100)
GetComputerNameA(ComName, Length(ComName))
GetUserNameA(UserName, Length(UserName))
print "コンピュータ名:" + ComName
print "ユーザ名:" + UserName
print


// BIOS情報の表示
Locator = CreateOleObj("WbemScripting.SWbemLocator")
consvr = Locator.ConnectServer()
biosset = consvr.ExecQuery("Select * From Win32_BIOS")
GETOLEITEM(biosset); wk = ALL_OLE_ITEM[0]
print "BIOS情報:"
print wk.Manufacturer
print wk.Name
print wk.SerialNumber
print wk.SMBIOSBIOSVersion
print
// マザーボード情報の表示
baseset = consvr.ExecQuery("Select * From Win32_BaseBoard")
GETOLEITEM(baseset); wk = ALL_OLE_ITEM[0]
print "マザーボード情報:"
print wk.Manufacturer
print wk.Product
print wk.SerialNumber
print wk.Version
// マウスカーソル下のウィンドウのタイトルとクラス名を表示

While True
  id = GETID(GET_FROMPOINT_WIN)    // マウスカーソル下のウィンドウ
  moji = STATUS(id, ST_TITLE) + " , " + STATUS(id, ST_CLASS)
  Fukidasi(moji, G_MOUSE_X+8, G_MOUSE_Y, 3)
  Sleep(0.2)
Wend
// タスクトレイの音量を右クリックしボリュームコントロールを開く
// Win9x系はNG

flg = CLKITEM(GETID("","Shell_TrayWnd"), "音量", CLK_TOOLBAR or CLK_RIGHTCLK)
if !flg then flg = CLKITEM(GETID("","Shell_TrayWnd"), "Volume", CLK_TOOLBAR or CLK_RIGHTCLK)  // 環境により "音量" or "Volume"
ifb flg
    popupid = GETID("", "#32768", -1)  // コンテキストメニュー
    CLKITEM(popupid, "開く", CLK_ACC or CLK_SHORT or CLK_BACK or CLK_MUSMOVE)
endif
// C:ドライブのディレクトリ木表示(3階層まで)

ディレクトリ("C:", 0)

procedure ディレクトリ(dd, lve)
  lve = lve + 1
  if lve > 3 then Exit
  sps = ""
  for i = 2 to lve;  sps = sps + "  ";  next
  for i=0 to GETDIR(dd,"\")-1
     print sps + GETDIR_FILES[i]
     ディレクトリ(dd+"\"+GETDIR_FILES[i], lve)
  next
fend
// バックグランドのメモ帳にKBD関数にてランダム文字を書く

id = EXEC("notepad.exe")
edithnd = GETCTLHND(id, "edit") // 送るべきウィンドウ(注:親ではない)
MOUSEORG(HndToID(edithnd), 2)  // バックグラウンド指定
calc = EXEC("calc.exe")     // 電卓前面(メモ帳をバックグラウンドに)
ACW(calc, STATUS(id,ST_X), STATUS(id,ST_Y)+80)
for i = 0 to 60
    KBD(VK_A+RANDOM(26))  // 文字ランダム
    Sleep(0.1)
next
// デスクトップの情報を取得しポップアップメニュにする

id = GETID("Program Manager","Progman")
GETITEM(id, ITM_LSTVEW)
x = POPUPMENU(ALL_ITEM_LIST)
CLKITEM(id, ALL_ITEM_LIST[x], CLK_LSTVEW or CLK_LEFTCLK)
CLKITEM(id, ALL_ITEM_LIST[x], CLK_LSTVEW or CLK_DBLCLK)
// CDOを利用したメール送信

Const SMTP_SERVER = "mail.xxx.yyy.zzz"  // メールサーバー
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 MAILFROM = "from@xxx.yyy.zzz"     // 送信者メールアドレス


MailTo = "to@xxx.yyy.zzz"               // あて先メールアドレス
mailSubj = "題名"                       // 題名
MailBody = "内容"                       // 内容


Const cdoPath = "http://schemas.microsoft.com/cdo/configuration/"
Const cdoSendUsingPort = 2
objCDO = CreateOLEObj("CDO.Message")
With objCDO
    With .Configuration.Fields                           // 設定項目
        .Item(cdoPath+"sendusing") = cdoSendUsingPort    // 外部SMTP指定
        .Item(cdoPath+"smtpserver") = SMTP_SERVER        // SMTPサーバ名
        .Item(cdoPath+"smtpauthenticate") = SMTP_AUTHEN  // SMTP認証
        .Item(cdoPath+"smtpserverport") = SMTP_PORT      // ポートNo
        .Item(cdoPath+"smtpusessl") = SMTP_SSL           // SSL
        .Item(cdoPath+"sendusername") = SMTP_ID          // ID
        .Item(cdoPath+"sendpassword") = SMTP_PASWD       // Password
        .Item(cdoPath+"smtpconnectiontimeout") = 60      // タイムアウト
        .Update                                          // 設定を更新
    EndWith
    .MimeFormatted = True
    .Fields.Update
    .From = MAILFROM
    .To = MailTo
    .Subject = mailSubj
    .TextBody = MailBody
    .Send
EndWith
// 音声認識によるアプリの操作

// アクティブウィンドウのクリック可能なものを拾得、それを単語登録し使用
// 認識可能な単語は吹き出しにて表示
// コマンド発声前に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, 単語登録)    // 単語登録、実行
      Fukidasi(表示, 0, 0, , , , , ,100)
  endif
  拾得音声 = DICTATE(False)     // 拾得
  ifb 拾得音声 <> ""            // 音声入力あった
      Fukidasi()
      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
// Shiftキーが押された時にマウス位置200ドットの画像を保存

CONST BMPNAME = "画像保存.BMP"
wshell = CreateOLEObj("WScript.Shell")
While True
   ifb GETKEYSTATE(VK_SHIFT)
       SAVEIMG(BMPNAME, 0, ZCUT(G_MOUSE_X-100), ZCUT(G_MOUSE_Y-100), 200, 200)
       wshell.Run(BMPNAME)    // BMPに割り当てられたアプリ起動
       Break
   endif
   Sleep(0.2)
Wend
// スクリプト内のTextBlockに書かれたHTMLをフォーム表示する

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

// 計算フォーム.html
TextBlock 計算フォーム
 <html><body style="overflow:hidden;"><form method="POST">
  <input type='text' name='Text1' size='8'>
  <select name='Select1'><option>足し算</option><option>引き算</option><option>掛け算</option></select>
  <input type='text' name='Text2' size='8'>
  <input type='submit' value=' 計算 ' name='CalBtn'><BR><BR>
  <font color='#FF0000'>答え</font>
 </form></body></html>
EndTextBlock
// フォーム(入力画面)を出し、入力された値を表示

btn = CREATEFORM("testform.html", "タイトル", False, 0, 400, 480)
print "押されたボタン(Submit)= " + btn

print "text(一行)= "+ GETFORMDATA("Text1")

wks = "チェックボックス="
if GETFORMDATA("Check1") then wks = wks + "  aaaa"
if GETFORMDATA("Check2") then wks = wks + "  bbbb"
print wks

if GETFORMDATA("Radio1", "V1") then print "ラジオボタン= 1111"
if GETFORMDATA("Radio1", "V2") then print "ラジオボタン= 2222"

print "セレクトボックス= "+ GETFORMDATA("D1")  // 複数時はTAB区切り

print "text(複数行)= "+ GETFORMDATA("S1")
// マウス位置の文字情報を取得

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)
  wks = wks + "<#CR>" + PosACC(id, ofx, ofy, ACC_NAME)
  wks = wks + "<#CR>" + PosACC(id, ofx, ofy, ACC_VALUE)
  wks = wks + "<#CR>" + PosACC(id, ofx, ofy, ACC_ROLE)
  wks = wks + "<#CR>" + PosACC(id, ofx, ofy, ACC_STATE)
    wks = wks + "<#cr>" + "x="+ofx+", y="+ofy
  Fukidasi(wks, x+10, y+10, 3)
  Sleep(0.5)
Wend
// 入力された文字を全角大文字にしてメモ帳に表示していく

CONST 漢数字 = "一二三四五六七八九"
メモID = EXEC("notepad.exe")
While True
    wks = INPUT("何か文字を入れて下さい")
    if wks = EMPTY then break
    wks = STRCONV(wks, SC_UPPERCASE or SC_FULLWIDTH)
    for i = 1 to 9                                      // 数字は漢数字に
        wks = Replace(wks, CHR(ASC("0")+i), Copy(漢数字,i,1))
    next
    SENDSTR(メモID, wks+"<#CR>")
Wend

Font / Color

Uws2Exe

バージョンは「0.0.0.0」〜「999.999.999.999」まで指定できます。