FUKIDASI

FUKIDASI関数は、メッセージを吹出しに表示する関数です。MSGBOX関数と違い処理を中断することがありません。

構文
FUKIDASI( メッセージ, [x, y, 向き, フォントサイズ, フォント名, 文字色, 背景色, 透明化] )
引数
メッセージ
表示メッセージ
x, y
位置
向き
0
嘴なし
1
上嘴
2
下嘴
3
左嘴
4
右嘴
フォントサイズ
文字フォントサイズ
フォント名
フォント名
文字色
BGR値にて指定
背景色
BGR値にて指定
透明化
0〜255
不透明〜透明
-1
バックを透明化
-2
外枠も非表示
戻値

プログラム実行例

CLKITEMで操作できる項目を取得

HASHTBL NAME NAME[ITM_BTN] = "ITM_BTN" NAME[ITM_LIST] = "ITM_LIST" NAME[ITM_TAB] = "ITM_TAB" NAME[ITM_MENU] = "ITM_MENU" NAME[ITM_TREEVIEW] = "ITM_TREEVIEW" NAME[ITM_LISTVIEW] = "ITM_LISTVIEW" NAME[ITM_EDIT] = "ITM_EDIT" NAME[ITM_STATIC] = "ITM_STATIC" NAME[ITM_STATUSBAR] = "ITM_STATUSBAR" NAME[ITM_TOOLBAR] = "ITM_TOOLBAR" NAME[ITM_LINK] = "ITM_LINK" NAME[ITM_ACCCLK] = "ITM_ACCCLK" NAME[ITM_ACCCLK2] = "ITM_ACCCLK2" NAME[ITM_ACCTXT] = "ITM_ACCTXT" NAME[ITM_ACCEDIT] = "ITM_ACCEDIT" NAME[ITM_FROMLAST] = "ITM_FROMLAST" SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") WHILE TRUE FUKIDASI("ALT+Sでカーソル下の情報を取得します<#CR>ESCで終了") IF GETKEYSTATE(VK_ALT) AND GETKEYSTATE(VK_S) THEN BREAK WEND FUKIDASI("取得中") DIM ID = GETID(GET_FROMPOINT_WIN) PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)" PRINT DIM items[] = ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVIEW, ITM_LISTVIEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_LINK, ITM_ACCCLK, ITM_ACCCLK2, ITM_ACCTXT, ITM_ACCEDIT, ITM_FROMLAST FOR item IN items PRINT "// [" + NAME[item] + "]" FOR arr IN GETITEM(ID, item) PRINT "CLKITEM(ID, <#DBL>" + arr + "<#DBL>, " + NAME[item] + ")" NEXT PRINT NEXT ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE forceQuit() EXITEXIT FEND
解説
  1. 1行目
    HASHTBL NAME
    連想配列NAMEを宣言。
  2. 3-18行目
    NAME[ITM_BTN] = "ITM_BTN" NAME[ITM_LIST] = "ITM_LIST" NAME[ITM_TAB] = "ITM_TAB" NAME[ITM_MENU] = "ITM_MENU" NAME[ITM_TREEVIEW] = "ITM_TREEVIEW" NAME[ITM_LISTVIEW] = "ITM_LISTVIEW" NAME[ITM_EDIT] = "ITM_EDIT" NAME[ITM_STATIC] = "ITM_STATIC" NAME[ITM_STATUSBAR] = "ITM_STATUSBAR" NAME[ITM_TOOLBAR] = "ITM_TOOLBAR" NAME[ITM_LINK] = "ITM_LINK" NAME[ITM_ACCCLK] = "ITM_ACCCLK" NAME[ITM_ACCCLK2] = "ITM_ACCCLK2" NAME[ITM_ACCTXT] = "ITM_ACCTXT" NAME[ITM_ACCEDIT] = "ITM_ACCEDIT" NAME[ITM_FROMLAST] = "ITM_FROMLAST"
  3. 20行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    ESCキーでforceQuit関数を実行。
  4. 22-25行目
    WHILE TRUE FUKIDASI("ALT+Sでカーソル下の情報を取得します<#CR>ESCで終了") IF GETKEYSTATE(VK_ALT) AND GETKEYSTATE(VK_S) THEN BREAK WEND
    「ALT+S」が入力されるのを待つ。
  5. 26行目
    FUKIDASI("取得中")
    吹き出しを表示。
  6. 28行目
    DIM ID = GETID(GET_FROMPOINT_WIN)
    マウスカーソル下のウィンドウのIDを取得。
  7. 33行目
    DIM items[] = ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVIEW, ITM_LISTVIEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_LINK, ITM_ACCCLK, ITM_ACCCLK2, ITM_ACCTXT, ITM_ACCEDIT, ITM_FROMLAST
  8. 35-41行目
    FOR item IN items PRINT "// [" + NAME[item] + "]" FOR arr IN GETITEM(ID, item) PRINT "CLKITEM(ID, <#DBL>" + arr + "<#DBL>, " + NAME[item] + ")" NEXT PRINT NEXT

アイドル時間を取得

DEF_DLL GetTickCount(): Dword: kernel32 DEF_DLL GetLastInputInfo({DWORD, DWORD}): BOOL: user32 DIM t SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") WHILE TRUE GetLastInputInfo(8, t) FUKIDASI((GetTickCount() - t) + "ms") SLEEP(0.01) WEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE forceQuit() EXITEXIT FEND

マウスカーソル下のウィンドウの情報を吹き出しに表示

PUBLIC ttl, cls SETHOTKEY(VK_ESC, , "forceQuit") SETHOTKEY(VK_S, MOD_ALT, "output") WHILE TRUE ID = GETID(GET_FROMPOINT_WIN) msg = "" msg = msg + "ALT+Sでカーソル下のタイトルとクラス名を出力<#CR>" msg = msg + "ESCで終了<#CR>" msg = msg + "<#CR>" ttl = STATUS(ID, ST_TITLE) cls = STATUS(ID, ST_CLASS) msg = msg + "タイトル:" + ttl + "<#CR>" msg = msg + "クラス名:" + cls + "<#CR>" msg = msg + "X座標:" + STATUS(ID, ST_X) + "<#CR>" msg = msg + "Y座標:" + STATUS(ID, ST_Y) + "<#CR>" msg = msg + "幅:" + STATUS(ID, ST_WIDTH) + "<#CR>" msg = msg + "高さ:" + STATUS(ID, ST_HEIGHT) + "<#CR>" msg = msg + "クライアントX座標:" + STATUS(ID, ST_CLX) + "<#CR>" msg = msg + "クライアントY座標:" + STATUS(ID, ST_CLY) + "<#CR>" msg = msg + "クライアント幅:" + STATUS(ID, ST_CLWIDTH) + "<#CR>" msg = msg + "クライアント高さ:" + STATUS(ID, ST_CLHEIGHT) + "<#CR>" msg = msg + "親ウィンドウID:" + STATUS(ID, ST_PARENT) + "<#CR>" msg = msg + "アイコン状態:" + STATUS(ID, ST_ICON) + "<#CR>" msg = msg + "最大化:" + STATUS(ID, ST_MAXIMIZED) + "<#CR>" msg = msg + "表示状態:" + STATUS(ID, ST_VISIBLE) + "<#CR>" msg = msg + "アクティブ状態:" + STATUS(ID, ST_ACTIVE) + "<#CR>" msg = msg + "ビジー状態:" + STATUS(ID, ST_BUSY) + "<#CR>" msg = msg + "有効ID:" + STATUS(ID, ST_ISID) + "<#CR>" msg = msg + "64bit:" + STATUS(ID, ST_WIN64) + "<#CR>" msg = msg + "EXEパス:" + STATUS(ID, ST_PATH) + "<#CR>" msg = msg + "プロセスID:" + STATUS(ID, ST_PROCESS) + "<#CR>" msg = msg + "モニター番号:" + STATUS(ID, ST_MONITOR) + "<#CR>" FUKIDASI(msg) SLEEP(0.01) WEND // 強制終了する PROCEDURE forceQuit() EXITEXIT FEND // カーソル下のウィンドウのタイトルとクラス名を出力 PROCEDURE output() PRINT "GETID(<#DBL>" + ttl + "<#DBL>, <#DBL>" + cls + "<#DBL>)" PRINT ttl PRINT cls PRINT "----------" FEND

プログラム実行時からの経過時間を表示(ESCで終了)

SETHOTKEY(VK_ESC, , "forceQuit") DIM t = GETTIME() WHILE TRUE FUKIDASI(GETTIME() - t) SLEEP(0.001) WEND PROCEDURE forceQuit() EXITEXIT FEND

マウスカーソル下の文字情報を取得

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") WHILE TRUE DIM x = G_MOUSE_X DIM y = G_MOUSE_Y DIM ID = GETID(GET_FROMPOINT_WIN) FUKIDASI(POSACC(ID, x - STATUS(ID, ST_CLX), y - STATUS(ID, ST_CLY), ACC_BACK)) SLEEP(0.001) WEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE forceQuit() EXITEXIT FEND

Yahoo!ファイナンスから米ドル・ユーロ・豪ドルのレートを取得

IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("https://info.finance.yahoo.co.jp/fx/") BusyWait(IE) // ループを抜ける用のフラグ PUBLIC flg = FALSE // ESCキーを入力でloopBreak関数を実行 SETHOTKEY(VK_ESC, , "loopBreak") REPEAT usd = IE.document.getElementById("USDJPY_top_bid").innerText eur = IE.document.getElementById("EURJPY_top_bid").innerText aud = IE.document.getElementById("AUDJPY_top_bid").innerText msg = "米ドル/円<#TAB>" + usd + "<#CR>" + _ "ユーロ/円<#TAB>" + eur + "<#CR>" + _ "豪ドル/円<#TAB>" + aud + "<#CR>" + _ "ESCで終了" FUKIDASI(msg) SLEEP(0.01) UNTIL flg = TRUE IE.Quit PROCEDURE loopBreak() flg = TRUE FEND ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(Var IE) SLEEP(0.500) DIM t = GETTIME() TRY REPEAT DIM tm = GETTIME() - t FUKIDASI("BusyWait:" + tm) SLEEP(0.010) IF tm >= 60 THEN BREAK UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT IE = getIEObj(-1) PRINT IE.document.URL + " のIEオブジェクトを取得しました。" BusyWait(IE) ENDTRY FUKIDASI() FEND ////////////////////////////////////////////////// // 【引数】 // 文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定 // 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) // 【戻値】 // Internet Explorerオブジェクト ////////////////////////////////////////////////// FUNCTION getIEObj(str, flg = FALSE) DIM Shell = CREATEOLEOBJ("Shell.Application") SELECT CHKNUM(str) CASE TRUE DIM cnt = 0 SELECT TRUE CASE str > 0 FOR n = 0 TO Shell.Windows.Count - 1 TRY IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1 IFB str = cnt THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF ENDIF EXCEPT ENDTRY NEXT CASE str < 0 FOR n = Shell.Windows.Count - 1 TO 0 STEP -1 TRY IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1 IFB ABS(str) = cnt THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF ENDIF EXCEPT ENDTRY NEXT CASE str = 0 FOR n = 0 TO Shell.Windows.Count - 1 TRY IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1 EXCEPT ENDTRY NEXT RESULT = cnt EXIT SELEND CASE FALSE DIM t = GETTIME() REPEAT FOR n = 0 TO Shell.Windows.Count - 1 TRY DIM targetObj = Shell.Windows.Item(n) IFB targetObj.Name = "Internet Explorer" THEN SELECT flg CASE TRUE IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF CASE FALSE IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF SELEND ENDIF EXCEPT ENDTRY NEXT UNTIL GETTIME() - t >= 5 SELEND RESULT = ERR_VALUE FEND

マウスカーソル下の色を取得

// ESCキーで強制終了 SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") WHILE TRUE DIM c = PEEKCOLOR(G_MOUSE_X, G_MOUSE_Y) DIM r = c AND $FF DIM g = (c AND $FF00) / $100 DIM b = (c AND $FF0000) / $10000 FUKIDASI("赤<#TAB>" + r + "<#CR>緑<#TAB>" + g + "<#CR>青<#TAB>" + b) SLEEP(0.001) WEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE forceQuit() EXITEXIT FEND

指定日時までのカウントダウンタイマー

DIM date = dateAdd("d", 1, today()) DIM targetTime = GETTIME(0, date + " 00:00:00") REPEAT DIM remainingTime = targetTime - GETTIME() FUKIDASI(remainingTime + "秒") SLEEP(0.001) UNTIL remainingTime <= 0 MSGBOX("0時になりました。") ////////////////////////////////////////////////// // 【引数】 // interval : 加算する時間間隔を表す文字列式(yyyy:年、m:月、d:日、ww:週、h:時、n:分、s:秒) // num : dateに加算する値。未来は正、過去は負で指定 // date : 時間間隔を加算する日付 // 【戻値】 // 日時(date)に、指定した単位(interval)の時間(num)を加算して返します ////////////////////////////////////////////////// FUNCTION dateAdd(interval, num, date) DIM year, month, day, d GETTIME(0, date) SELECT interval CASE "yyyy" d = (G_TIME_YY + num) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 CASE "m" IFB num > 0 THEN year = G_TIME_YY + INT((G_TIME_MM + num) / 12) month = REPLACE(FORMAT(((G_TIME_MM + num) MOD 12), 2), " ", "0") ELSE year = G_TIME_YY + CEIL((G_TIME_MM + num) / 12 - 1) month = REPLACE(FORMAT(G_TIME_MM - (ABS(num) MOD 12), 2), " ", "0") ENDIF IF month = "00" THEN month = 12 day = G_TIME_DD2 d = "" + year + month + day IFB !isDate(d) THEN d = year + "/" + month + "/" + "01" d = getEndOfMonth(d) ELSE d = year + "/" + month + "/" + day ENDIF CASE "d" GETTIME(num, date) d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 CASE "ww" GETTIME(num * 7, date) d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 CASE "h" GETTIME(num / 24, date) d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 CASE "n" GETTIME(num / 1440, date) d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 CASE "s" GETTIME(num / 86400, date) d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 SELEND RESULT = d FEND ////////////////////////////////////////////////// // 【引数】 // date : 日付(”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”) // m : 第一引数の指定日からプラスマイナス m 月とする(デフォルト=0) // 【戻値】 // date から m 月後の月末の日付 ////////////////////////////////////////////////// FUNCTION getEndOfMonth(date, m = 0) GETTIME(0, date) IFB m >= 0 THEN year = G_TIME_YY + INT((G_TIME_MM + m + 1) / 12) month = REPLACE(FORMAT(((G_TIME_MM + m + 1) MOD 12), 2), " ", "0") ELSE year = G_TIME_YY + CEIL((G_TIME_MM + m + 1) / 12 - 1) month = REPLACE(FORMAT(G_TIME_MM - (ABS(m + 1) MOD 12), 2), " ", "0") IF EVAL(month) < 0 THEN month = REPLACE(FORMAT(12 + EVAL(month), 2), " ", "0") ENDIF IF month = "00" THEN month = "12" day = "01" d = "" + year + month + day GETTIME(-1, d) RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 FEND ////////////////////////////////////////////////// // 【引数】 // expr : 評価する式 // truepart : 評価した式がTrueのときに返す値 // falsepart : 評価した式がFalseのときに返す値 // 【戻値】 // truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき ////////////////////////////////////////////////// FUNCTION IIF(expr, truepart, falsepart) IFB EVAL(expr) THEN RESULT = truepart ELSE RESULT = falsepart ENDIF FEND ////////////////////////////////////////////////// // 【引数】 // 日付 : YYYYMMDD // 【戻値】 // TRUE : 日付として認識できる、FALSE : 日付として認識できない ////////////////////////////////////////////////// FUNCTION isDate(date) DIM Pattern = "^(?!([02468][1235679]|[13579][01345789])000229)(([0-9]{4}(01|03|05|07|08|10|12)(0[1-9]|[12][0-9]|3[01]))|([0-9]{4}(04|06|09|11)(0[1-9]|[12][0-9]|30))|([0-9]{4}02(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}([02468][048]|[13579][26])0229))$" DIM Match = reExecute(date, Pattern) RESULT = IIF(Match.Count <> 0, TRUE, FALSE) FEND ////////////////////////////////////////////////// // 【引数】 // str : 正規表現による検索の対象となる文字列 // Pattern : 正規表現で使用するパターンを設定 // IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse // Global : 文字列全体を検索する場合はTrue、しない場合はFalse // 【戻値】 // 正規表現で検索した結果をMatchesコレクションとして返します。 ////////////////////////////////////////////////// FUNCTION reExecute(str, Pattern, IgnoreCase = TRUE, Global = TRUE) DIM re = CREATEOLEOBJ("VBScript.RegExp") re.Pattern = Pattern re.IgnoreCase = IgnoreCase re.Global = Global RESULT = re.Execute(str) FEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // 今日の日付 ////////////////////////////////////////////////// FUNCTION today() GETTIME() RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 FEND