SETHOTKEY

ホットキーを設定します。設定したホットキーを入力することによりプロシージャを呼び出すことができます。

「VK」は「Virtual Key」の略で仮想キー、「MOD」は「MODify key」の略で修飾子キーを意味します。

修飾子キーを複数指定する場合は「OR」で繋げます。

HOTKEY_VKはキーコード(数値)なので、文字に変換する場合は「CHR(HOTKEY_VK)」と記述します。

HOTKEY_MODから指定したキーが押されたかを判断するには 、「 HOTKEY_MOD AND 修飾子キー」が0か0以外かで判断できます。「HOTKEY_MOD AND MOD_CONTROL」が0でなければCtrlが押されたということになります。

構文
  1. 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 に修飾子キーが格納されている。

プログラム実行例

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

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. SETHOTKEY
  2. SLEEP
  3. SAVEIMG
  4. GETID
解説
  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
  1. kernel32.GetTickCount
  2. user32.GetLastInputInfo
  3. SETHOTKEY
  4. FUKIDASI
  5. SLEEP

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

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
  1. SETHOTKEY
  2. GETID
  3. STATUS
  4. FUKIDASI
  5. SLEEP

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

SETHOTKEY(VK_ESC, , "forceQuit")

DIM t = GETTIME()

WHILE TRUE
	FUKIDASI(GETTIME() - t)
	SLEEP(0.001)
WEND

PROCEDURE forceQuit()
	EXITEXIT
FEND
  1. sethotkey
  2. gettime
  3. fukidasi
  4. sleep

メールを受信したらメッセージボックスを表示する。

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") 

DIM Outlook = GETACTIVEOLEOBJ("Outlook.Application")
OLEEVENT(Outlook, "ApplicationEvents_11", "NewMailEx", "receivedMail")

WHILE TRUE
	FUKIDASI("ESCで終了")
	SLEEP(60.000)
WEND

PROCEDURE forceQuit()
	EXITEXIT
FEND

PROCEDURE receivedMail()
	MSGBOX("メールを受信しました")
FEND
  1. SETHOTKEY
  2. GETACTIVEOLEOBJ
  3. OLEEVENT
  4. FUKIDASI
  5. SLEEP

マウスカーソル下のスクロールバー情報を取得

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	DIM ID = GETID(GET_FROMPOINT_WIN)
	DIM str = ""
	DIM i = 1
	WHILE GETSLIDER(ID, i, SLD_POS) <> ERR_VALUE
		str = str + "[" + i + "]<#CR>"
		str = str + "値:" + GETSLIDER(ID, i, SLD_POS) + "<#CR>"
		str = str + "最小値:" + GETSLIDER(ID, i, SLD_MIN) + "<#TAB>"
		str = str + "最大値:" + GETSLIDER(ID, i, SLD_MAX) + "<#CR>"
		str = str + "移動量:" + GETSLIDER(ID, i, SLD_PAGE) + "<#TAB>"
		str = str + "表示方向:" + GETSLIDER(ID, i, SLD_BAR) + "<#CR>"
		str = str + "X座標:" + GETSLIDER(ID, i, SLD_X) + "<#TAB>"
		str = str + "Y座標:" + GETSLIDER(ID, i, SLD_Y) + "<#CR>"
		str = str + "----------<#CR>"
		i = i + 1
	WEND
	FUKIDASI(TRIM(str))
WEND

//////////////////////////////////////////////////
// 【引数】
// 
// 【戻値】
// 
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
  1. SETHOTKEY
  2. GETID
  3. GETSLIDER
  4. FUKIDASI
結果

[1]
値:28
最小値:0 最大値:65
移動量:12 表示方向:1
X座標:0 Y座標:56
----------
[2]
値:0
最小値:0 最大値:15
移動量:11 表示方向:1
X座標:393 Y座標:56
----------
[3]
値:17
最小値:0 最大値:486
移動量:450 表示方向:0
X座標:393 Y座標:56
----------
[4]
値:59
最小値:0 最大値:63
移動量:5 表示方向:1
X座標:0 Y座標:330
----------

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
  1. CREATEOLEOBJ
  2. IE.Visible
  3. IE.Navigate
  4. SETHOTKEY
  5. IE.document
  6. Document.getElementById
  7. Node.innerText
  8. FUKIDASI
  9. IE.Quit

マウス位置の色を取得

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
  1. SETHOTKEY
  2. PEEKCOLOR
  3. FUKIDASI
  4. SLEEP
解説
  1. 1行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    
    ホットキーを設定する。ESCキーでforceQuit関数を呼び出す。
  2. 3行目
    WHILE TRUE
    
    無限ループ開始。
  3. 4行目
    	DIM c = PEEKCOLOR(G_MOUSE_X, G_MOUSE_Y)
    
    マウス位置のBGR値を取得。例)c = 16513269 = 0xFBF8F5 = 11111011 11111000 11110101b。
    c = 16513269BGR
    16進数FBF8F5
    2進数111110111111100011110101
  4. 5行目
    	DIM r = c AND $FF
    
    BGR値からR成分を取得。F5が返ります。
    BGR
    c111110111111100011110101
    $FF11111111
    c AND $FF11110101
  5. 6行目
    	DIM g = (c AND $FF00) / $100
    
    BGR値からG成分を取得。F8が返ります。
    BGR
    c111110111111100011110101
    $FF001111111100000000
    c AND $FF001111100000000000
  6. 7行目
    	DIM b = (c AND $FF0000) / $10000
    
    BGR値からB成分を取得。FBが返ります。
    BGR
    c111110111111100011110101
    $FF0000111111110000000000000000
    c AND $FF0000111110110000000000000000
  7. 8行目
    	FUKIDASI("赤<#TAB>" + r + "<#CR>緑<#TAB>" + g + "<#CR>青<#TAB>" + b)
    
    各成分を吹き出しに表示。

キャレット(カーソル)位置を取得

DEF_DLL GetCaretPos({long, long}): bool: user32

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

DIM x, y

WHILE TRUE
	GetCaretPos(x, y)
	FUKIDASI(x + ", " + y)
	SLEEP(0.010)
WEND

//////////////////////////////////////////////////
// 【引数】
// 
// 【戻値】
// 
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
  1. user32.GetCaretPos
  2. SETHOTKEY
  3. FUKIDASI
  4. SLEEP

仮想キー一覧

定数名キー
8VK_BACKBackspaceキー
9VK_TABTabキー
12VK_CLEARClearキー
13VK_RETURNEnterキー
13VK_ENTEREnterキー
16VK_SHIFTShiftキー
17VK_CTRLCtrlキー
17VK_CONTROLCtrlキー
18VK_ALTAltキー
18VK_MENUAltキー
19VK_PAUSEPauseキー
20VK_CAPITALCapsLockキー
21VK_KANAIMEかなモード
24VK_FINALIME final mode
25VK_KANJIIME漢字モード
27VK_ESCEscキー
27VK_ESCAPEEscキー
28VK_CONVERT変換キー
29VK_NONCONVERT無変換キー
30VK_ACCEPTIME accept
31VK_MODECHANGEIME mode change request
32VK_SPACESpaceキー
33VK_PRIORPageUpキー
34VK_NEXTPageDownキー
35VK_ENDEndキー
36VK_HOMEHomeキー
37VK_LEFT
38VK_UP
39VK_RIGHT
40VK_DOWN
41VK_SELECT
42VK_PRINTPrintキー
43VK_EXECUTEExecuteキー
44VK_SNAPSHOTPrint Screenキー
45VK_INSERTInsertキー
46VK_DELETEDeleteキー
47VK_HELPHelpキー
48VK_00キー
49VK_11キー
50VK_22キー
51VK_33キー
52VK_44キー
53VK_55キー
54VK_66キー
55VK_77キー
56VK_88キー
57VK_99キー
65VK_AAキー
66VK_BBキー
67VK_CCキー
68VK_DDキー
69VK_EEキー
70VK_FFキー
71VK_GGキー
72VK_HHキー
73VK_IIキー
74VK_JJキー
75VK_KKキー
76VK_LLキー
77VK_MMキー
78VK_NNキー
79VK_OOキー
80VK_PPキー
81VK_QQキー
82VK_RRキー
83VK_SSキー
84VK_TTキー
85VK_UUキー
86VK_VVキー
87VK_WWキー
88VK_XXキー
89VK_YYキー
90VK_ZZキー
91VK_WINWindowsキー
92VK_START右Windowsキー
92VK_RWIN右Windowsキー
93VK_APPSアプリケーションキー
(右クリックメニュー)
95VK_SLEEPSleepキー
96VK_NUMPAD00キー(テンキー)
97VK_NUMPAD11キー(テンキー)
98VK_NUMPAD22キー(テンキー)
99VK_NUMPAD33キー(テンキー)
100VK_NUMPAD44キー(テンキー)
101VK_NUMPAD55キー(テンキー)
102VK_NUMPAD66キー(テンキー)
103VK_NUMPAD77キー(テンキー)
104VK_NUMPAD88キー(テンキー)
105VK_NUMPAD99キー(テンキー)
106VK_MULTIPLY*キー(テンキー)
107VK_ADD+キー(テンキー)
108VK_SEPARATORseparatorキー
109VK_SUBTRACT-キー(テンキー)
110VK_DECIMAL小数点キー
111VK_DIVIDE/キー(テンキー)
112VK_F1F1キー
113VK_F2F2キー
114VK_F3F3キー
115VK_F4F4キー
116VK_F5F5キー
117VK_F6F6キー
118VK_F7F7キー
119VK_F8F8キー
120VK_F9F9キー
121VK_F10F10キー
122VK_F11F11キー
123VK_F12F12キー
144VK_NUMLOCKNumLockキー
145VK_SCROLLScrollLockキー
161VK_RSHIFT右Shiftキー
163VK_RCTRL右Ctrlキー
165VK_RALT右Altキー
166VK_BROWSER_BACKブラウザ戻るキー
167VK_BROWSER_FORWARDブラウザ進むキー
168VK_BROWSER_REFRESHブラウザ更新キー
169VK_BROWSER_STOPブラウザ停止キー
170VK_BROWSER_SEARCHブラウザサーチキー
171VK_BROWSER_FAVORITESブラウザお気に入りキー
172VK_BROWSER_HOMEブラウザホームキー
173VK_VOLUME_MUTE音量をミュートにする
174VK_VOLUME_DOWN音量を下げる
175VK_VOLUME_UP音量を上げる
176VK_MEDIA_NEXT_TRACKメディア次トラックキー
177VK_MEDIA_PREV_TRACKメディア前トラックキー
178VK_MEDIA_STOPメディア停止キー
179VK_MEDIA_PLAY_PAUSEメディア再生キー/メディア一時停止キー
180VK_LAUNCH_MAILメール起動キー
181VK_LAUNCH_MEDIA_SELECTメディア選択キー
182VK_LAUNCH_APP1起動キー1
183VK_LAUNCH_APP2起動キー2
186VK_OEM_1OEM定義(;:*等)キー
187VK_OEM_PLUSOEM定義(;+等)キー
188VK_OEM_COMMAOEM定義(,<等)キー
189VK_OEM_MINUSOEM定義(-=等)キー
190VK_OEM_PERIODOEM定義(.>等)キー
191VK_OEM_2OEM定義(/?等)キー
192VK_OEM_3OEM定義(~@`等)キー
219VK_OEM_4OEM定義([{)キー
220VK_OEM_5OEM定義(\|)キー
221VK_OEM_6OEM定義(]})キー
222VK_OEM_7OEM定義('"^~)キー
223VK_OEM_8OEM定義キー
233VK_OEM_RESETOEM定義キー
234VK_OEM_JUMPOEM定義キー
235VK_OEM_PA1OEM定義キー
236VK_OEM_PA2OEM定義キー
237VK_OEM_PA3OEM定義キー
250VK_PLAY
251VK_ZOOM
901VK_RRETURN