SETHOTKEY

構文
Boolean = SETHOTKEY( キーコード, [修飾子キー, Procedure名] )
引数
キーコード
使用するキーコード
修飾子キー
(省略可、複数指定化)
MOD_ALT(Alt)
MOD_CONTROL(Ctrl)
MOD_SHIFT(Shift)
MOD_WIN(Win)
Procedure名
UWSC側の呼び出される Procedure名、省略された場合にはホットキーの解除
戻値
TRUE
成功
FALSE
失敗

Procedure内にて変数 HOTKEY_VK にキーコード、 HOTKEY_MOD に修飾子キーが格納されている。

プログラム実行例

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

画像をクリップボードにコピーする

Alt+Sでマウスカーソル下のオブジェクトのスクリーンショット画像をクリップボードにコピーします。

SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard") SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") WHILE TRUE SLEEP(0.01) WEND PROCEDURE imageToClipboard() SAVEIMG( , GETID(GET_FROMPOINT_WIN)) FEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE forceQuit() EXITEXIT FEND
解説
  1. 1行目
    SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard")
    Alt+SでimageToClipboard関数を実行します。
  2. 2行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    EscでforceQuit関数を実行します。
  3. 4-6行目
    WHILE TRUE SLEEP(0.01) WEND
    無限ループ。Alt+SもしくはEscが入力されるのを待機します。

アイドル時間を取得

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

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

画像をクリップボードにコピーする

SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard") SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") WHILE TRUE SLEEP(0.01) WEND PROCEDURE imageToClipboard() SAVEIMG( , GETID(GET_ACTIVE_WIN)) FEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE forceQuit() EXITEXIT FEND