SETHOTKEYセットホットキー関数

本ページには広告が含まれています。

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

「VK」は「Virtual Key」の略で仮想キー、「MOD」は「MODifier 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名 )
引数
キーコード (#sethotkey必須
使用するキーコード
修飾子キー (#sethotkey省略可
(省略可、複数指定化)
MOD_ALT(Alt)
MOD_CONTROL(Ctrl)
MOD_SHIFT(Shift)
MOD_WIN(Win)
Procedure名 (String)省略可
UWSC側の呼び出される Procedure名、省略された場合にはホットキーの解除
戻り値
TRUE
成功
FALSE
失敗

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

ホットキーの設定/解除

UWSC
// ESCキーでforceQuit関数を呼び出す
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

// ESCキーで呼び出せるようにしたforceQuit関数を解除
SETHOTKEY(VK_ESC, EMPTYPARAM)

すべてのホットキーを解除

SETHOTKEY関数は第三引数を省略するとホットキーの解除ができます。key1から255の範囲と901modiferMOD_ALTMOD_CONTROLMOD_SHIFTMOD_WIN1,2,4,8と2のべき乗なのでPOWER関数を使いすべてのキーの組み合わせを多重ループで回し解除します。

UWSC
FOR key = 1 TO 255
	FOR modifier = 0 TO 3
		SETHOTKEY(key, POWER(2, modifier))
	NEXT
NEXT

key = 901
FOR modifier = 0 TO 3
	SETHOTKEY(key, POWER(2, modifier))
NEXT

ホットキーの呼び出しと文字入力を同時に行う方法

ホットキーでプロシージャを呼び出された際、その文字は入力されなくなります。プロシージャの呼び出した際にその文字も入力したい場合、呼び出したプロシージャ内に「KBD(HOTKEY_VK)」と記述することで文字入力ができるようになります。

以下はA〜Zにホットキーを設定し、keyInput関数を呼び出すプログラム。例えばキーボードでAと打つとプロシージャが呼び出されるがAが文字として入力はされませんが、KBD関数を使うことでプロシージャを呼び出しつつ文字も入力できるようにします。

以下のプログラムをKBD関数ありとなしで実行しメモ帳で文字入力をしてみると違いがわかると思います。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

FOR key = VK_A TO VK_Z
	SETHOTKEY(key, EMPTYPARAM, "keyInput")
NEXT

WHILE TRUE
	SLEEP(0.001)
WEND

PROCEDURE keyInput()
	KBD(HOTKEY_VK)
FEND

修飾子キー単独で検知

SETHOTKEY関数の第一引数にEMPTYPARAMを指定することで、修飾子キーのみでホットキーを設定することができます。

呼び出されたプロシージャ内の特殊変数HOTKEY_MODに修飾子キーが格納されているので、検知されたキーの判定に使うことができます。

UWSC
SETHOTKEY(EMPTYPARAM, MOD_ALT, "keyInput")        // 1
SETHOTKEY(EMPTYPARAM, MOD_CONTROL, "keyInput")    // 2
SETHOTKEY(EMPTYPARAM, MOD_SHIFT, "keyInput")      // 4
SETHOTKEY(EMPTYPARAM, MOD_WIN, "keyInput")        // 8

WHILE TRUE
	SLEEP(0.001)
WEND

PROCEDURE keyInput()
	PRINT HOTKEY_MOD
FEND

修飾子キーの左右判定

SETHOTKEY関数の修飾子キー(MOD_*)では左右を区別することはできないので、呼び出された関数の中でGETKEYSTATE関数を使い左右の判定をします。

左Alt右Alt が押されたとき。

UWSC
SETHOTKEY(EMPTYPARAM, MOD_ALT, "Alt")

WHILE TRUE
	SLEEP(0.001)
WEND

PROCEDURE Alt()
	SELECT TRUE
		CASE GETKEYSTATE(VK_LALT)
			PRINT "左Alt"
		CASE GETKEYSTATE(VK_RALT)
			PRINT "右Alt"
	SELEND
FEND

左Ctrl右Ctrlが押されたとき。

UWSC
SETHOTKEY(EMPTYPARAM, MOD_CONTROL, "Ctrl")

WHILE TRUE
	SLEEP(0.001)
WEND

PROCEDURE Ctrl()
	SELECT TRUE
		CASE GETKEYSTATE(VK_LCTRL)
			PRINT "左Ctrl"
		CASE GETKEYSTATE(VK_RCTRL)
			PRINT "右Ctrl"
	SELEND
FEND

左Shift右Shiftが押されたとき。

UWSC
SETHOTKEY(EMPTYPARAM, MOD_SHIFT, "Shift")

WHILE TRUE
	SLEEP(0.001)
WEND

PROCEDURE Shift()
	SELECT TRUE
		CASE GETKEYSTATE(VK_LSHIFT)
			PRINT "左Shift"
		CASE GETKEYSTATE(VK_RSHIFT)
			PRINT "右Shift"
	SELEND
FEND

仮想キー一覧

定数名説明キーShift
1VK_LBUTTONマウスの左ボタン
2VK_RBUTTONマウスの右ボタン
3VK_CANCELコントロール・ブレイク処理(定義なし)
4VK_MBUTTONマウスの中央ボタン(3ボタンマウス)
5VK_XBUTTON1マウスの第1拡張ボタン(定義なし)
6VK_XBUTTON2マウスの第2拡張ボタン(定義なし)
7
8VK_BACKBackspaceキーBackspace
9VK_TABTabキーTab
10予約済
11予約済
12VK_CLEARClearキーClear
13VK_RETURNEnterキーEnter
13VK_ENTEREnterキーEnter
14予約済
15予約済
16VK_SHIFTShiftキーShift
17VK_CTRLCtrlキーCtrl
17VK_CONTROLCtrlキーCtrl
18VK_ALTAltキーAlt
18VK_MENUAltキーAlt
19VK_PAUSEPauseキーPause
20VK_CAPITALCapsLockキーCapsLock
21VK_KANAIME かなモード
22未定義
23VK_JUNJAIME Junjaモード
24VK_FINALIME ファイナルモード
25VK_KANJIIME 漢字モード
26未定義
27VK_ESCEscキーEsc
27VK_ESCAPEEscキーEsc
28VK_CONVERTIME 変換変換
29VK_NONCONVERTIME 無変換無変換
30VK_ACCEPTIME 使用可能
31VK_MODECHANGEIME モード変換要求
32VK_SPACEスペースキーSpace
33VK_PRIORPageUpキーPageUp
34VK_NEXTPageDownキーPageDown
35VK_ENDEndキーEnd
36VK_HOMEHomeキーHome
37VK_LEFT←キー
38VK_UP↑キー
39VK_RIGHT→キー
40VK_DOWN↓キー
41VK_SELECTSelectキー
42VK_PRINTPrintキー
43VK_EXECUTEExecuteキー
44VK_SNAPSHOTPrintScreenキーPrintScree
45VK_INSERTInsertキーInsert
46VK_DELETEDeleteキーDelete
47VK_HELPHelpキー
48VK_00キー0
49VK_11キー1!
50VK_22キー2"
51VK_33キー3#
52VK_44キー4$
53VK_55キー5%
54VK_66キー6&
55VK_77キー7'
56VK_88キー8(
57VK_99キー9)
58未定義
59未定義
60未定義
61未定義
62未定義
63未定義
64未定義
65VK_AAキーaA
66VK_BBキーbB
67VK_CCキーcC
68VK_DDキーdD
69VK_EEキーeE
70VK_FFキーfF
71VK_GGキーgG
72VK_HHキーhH
73VK_IIキーiI
74VK_JJキーjJ
75VK_KKキーkK
76VK_LLキーlL
77VK_MMキーmM
78VK_NNキーnN
79VK_OOキーoO
80VK_PPキーpP
81VK_QQキーqQ
82VK_RRキーrR
83VK_SSキーsS
84VK_TTキーtT
85VK_UUキーuU
86VK_VVキーvV
87VK_WWキーwW
88VK_XXキーxX
89VK_YYキーyY
90VK_ZZキーzZ
91VK_WINWindowsキー
92VK_STARTWindowsキー
92VK_RWIN右Windowsキー
93VK_APPSアプリケーションキー
94予約済
95VK_SLEEPコンピュータスリープキー
96VK_NUMPAD0テンキーの0キーテンキーの0Insert
97VK_NUMPAD1テンキーの1キーテンキーの1End
98VK_NUMPAD2テンキーの2キーテンキーの2
99VK_NUMPAD3テンキーの3キーテンキーの3PageDown
100VK_NUMPAD4テンキーの4キーテンキーの4
101VK_NUMPAD5テンキーの5キーテンキーの5
102VK_NUMPAD6テンキーの6キーテンキーの6
103VK_NUMPAD7テンキーの7キーテンキーの7Home
104VK_NUMPAD8テンキーの8キーテンキーの8
105VK_NUMPAD9テンキーの9キーテンキーの9PageUp
106VK_MULTIPLYテンキーの*キーテンキーの*
107VK_ADDテンキーの+キーテンキーの+
108VK_SEPARATOR区切り記号キー
109VK_SUBTRACT減算記号キーテンキーの-
110VK_DECIMAL小数点キーテンキーの.Delete
111VK_DIVIDE除算記号キーテンキーの/
112VK_F1F1キーF1
113VK_F2F2キーF2
114VK_F3F3キーF3
115VK_F4F4キーF4
116VK_F5F5キーF5
117VK_F6F6キーF6
118VK_F7F7キーF7
119VK_F8F8キーF8
120VK_F9F9キーF9
121VK_F10F10キーF10
122VK_F11F11キーF11
123VK_F12F12キーF12
124VK_F13VK_F13F13
125VK_F14VK_F14F14
126VK_F15VK_F15F15
127VK_F16VK_F16F16
128VK_F17VK_F17F17
129VK_F18VK_F18F18
130VK_F19VK_F19F19
131VK_F20VK_F20F20
132VK_F21VK_F21F21
133VK_F22VK_F22F22
134VK_F23VK_F23F23
135VK_F24VK_F24F24
136VK_NAVIGATION_VIEW割当無し
137VK_NAVIGATION_MENU割当無し
138VK_NAVIGATION_UP割当無し
139VK_NAVIGATION_DOWN割当無し
140VK_NAVIGATION_LEFT割当無し
141VK_NAVIGATION_RIGHT割当無し
142VK_NAVIGATION_ACCEPT割当無し
143VK_NAVIGATION_CANCEL割当無し
144VK_NUMLOCKNumLockキーNumLock
145VK_SCROLLScrollLockキーScrollLock
146VK_OEM_NEC_EQUAL
146VK_OEM_FJ_JISHO
147VK_OEM_FJ_MASSHOU
148VK_OEM_FJ_TOUROKU
149VK_OEM_FJ_LOYA
150VK_OEM_FJ_ROYA
151割当無し
152割当無し
153割当無し
154割当無し
155割当無し
156割当無し
157割当無し
158割当無し
159割当無し
160VK_LSHIFT左ShiftキーShift
161VK_RSHIFT右ShiftキーShift
162VK_LCTRL左CtrlキーCtrl
163VK_RCTRL右CtrlキーCtrl
164VK_LALT左AltキーAlt
164VK_LMENU左AltキーAlt
165VK_RALT右AltキーAlt
165VK_RMENU右Altキー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起動キー
184予約済
185予約済
186VK_OEM_1OEM1キー:*
187VK_OEM_PLUS+キー;+
188VK_OEM_COMMA,キー,<
189VK_OEM_MINUS-キー-=
190VK_OEM_PERIOD.キー.>
191VK_OEM_2OEM2キー/?
192VK_OEM_3OEM3キー@`
193VK_ABNT_C1予約済
194VK_ABNT_C2予約済
195VK_GAMEPAD_A予約済
196VK_GAMEPAD_B予約済
197VK_GAMEPAD_X予約済
198VK_GAMEPAD_Y予約済
199VK_GAMEPAD_RIGHT_SHOULDER予約済
200VK_GAMEPAD_LEFT_SHOULDER予約済
201VK_GAMEPAD_LEFT_TRIGGER予約済
202VK_GAMEPAD_RIGHT_TRIGGER予約済
203VK_GAMEPAD_DPAD_UP予約済
204VK_GAMEPAD_DPAD_DOWN予約済
205VK_GAMEPAD_DPAD_LEFT予約済
206VK_GAMEPAD_DPAD_RIGHT予約済
207VK_GAMEPAD_MENU予約済
208VK_GAMEPAD_VIEW予約済
209VK_GAMEPAD_LEFT_THUMBSTICK_BUTTO予約済
210VK_GAMEPAD_RIGHT_THUMBSTICK_BUTT予約済
211VK_GAMEPAD_LEFT_THUMBSTICK_UP予約済
212VK_GAMEPAD_LEFT_THUMBSTICK_DOWN予約済
213VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT予約済
214VK_GAMEPAD_LEFT_THUMBSTICK_LEFT予約済
215VK_GAMEPAD_RIGHT_THUMBSTICK_UP予約済
216VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN割当無し
217VK_GAMEPAD_RIGHT_THUMBSTICK_RIGH割当無し
218VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT割当無し
219VK_OEM_4OEM4キー[{
220VK_OEM_5OEM5キー\|
221VK_OEM_6OEM6キー]}
222VK_OEM_7OEM7キー
223VK_OEM_8OEM8キー
224予約済
225VK_OEM_AXOEM固有
226VK_OEM_102OEM102キー\_
227VK_ICO_HELPOEM固有
228VK_ICO_00
229VK_PROCESSKEYIME PROCESSキー
230VK_ICO_CLEAROEM固有
231VK_PACKETキーボード以外の入力手段に使用される
32ビット仮想キー値の下位ワード
232割当無し
233VK_OEM_RESETOEM固有
234VK_OEM_JUMPOEM固有
235VK_OEM_PA1OEM固有
236VK_OEM_PA2OEM固有
237VK_OEM_PA3OEM固有
238VK_OEM_WSCTRLOEM固有
239VK_OEM_CUSELOEM固有
240VK_OEM_ATTNOEM固有
241VK_OEM_FINISHOEM固有
242VK_OEM_COPYOEM固有
243VK_OEM_AUTOOEM固有
244VK_OEM_ENLWOEM固有
245VK_OEM_BACKTABOEM固有
246VK_ATTNAttnキーAttn
247VK_CRSELCrSelキーCrSel
248VK_EXSELExSelキーExSel
249VK_EREOFErase EOFキー
250VK_PLAYPlayキー
251VK_ZOOMZoomキー
252VK_NONAME予約済
253VK_PA1PA1キー
254VK_OEM_CLEARClearキー
901VK_RRETURN

プログラム実行例

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

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

UWSC
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
解説

アイドル時間を取得

最後にキーボードまたはマウスを操作してから経過した時間をミリ秒で取得します。

UWSC
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

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

UWSC
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
使用関数

特定のキーを連打する

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_SPACE, EMPTYPARAM, "toggle")

PUBLIC flg = FALSE

WHILE TRUE
	DIM msg = "Spaceキーで切り替え<#CR>ESCキーで終了<#CR>"
	IFB flg THEN
		FUKIDASI(msg + "連打中")
		KBD(VK_A, CLICK)
		SLEEP(0.100)
	ELSE
		FUKIDASI(msg + "停止中")
	ENDIF
WEND

PROCEDURE forceQuit()
	EXITEXIT
FEND

PROCEDURE toggle()
	flg = !flg
	SLEEP(0.500)
FEND

現在のカーソル位置を吹き出しに表示

UWSC
DEF_DLL GetCursorPos({long, long}): bool: user32

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

DIM x, y

WHILE TRUE
	GetCursorPos(x, y)
	FUKIDASI(x + ", " + y)
	SLEEP(0.001)
WEND

PROCEDURE forceQuit()
	EXITEXIT
FEND

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

UWSC
SETHOTKEY(VK_ESC, , "forceQuit")

DIM t = GETTIME()

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

PROCEDURE forceQuit()
	EXITEXIT
FEND

メールの受信を検知(Outlook)

メールを受信したら日時を出力する。日時はメールの受信日時ではなくOutlookが受信を検知した日時。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") 

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

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

PROCEDURE forceQuit()
	EXITEXIT
FEND

PROCEDURE receivedMail()
	PRINT text(now(), "yyyy/mm/dd hh:nn:ss")
FEND

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

UWSC
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
結果
FFFTP
CSV
[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!ファイナンスから米ドル・ユーロ・豪ドルのレートを取得

UWSC
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
使用関数

ファイルを開いているプロセスを調べる

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

WITH FSO
	DIM Folder = .GetSpecialFolder(TemporaryFolder)
	DIM folderspec = Folder.Path
	DIM filename = .GetTempName
	DIM path = .BuildPath(folderspec, filename)
ENDWITH

DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun()

DIM ID = GETID("ファイル名を指定して実行", "#32770")

SENDSTR(ID, "cmd /c openfiles /query /fo CSV > " + path)
CLKITEM(ID, "OK", CLK_BTN)
SLEEP(0.500)

REPEAT
	SLEEP(0.100)
UNTIL GETID("C:\WINDOWS\system32\cmd.exe", "ConsoleWindowClass") = -1

DIM FID = FOPEN(path, F_READ)

TRY
	DIM ID2 = GETID("使用中", "OperationStatusWindow")

	GETITEM(ID2, ITM_ACCTXT, 1)
	DIM str = ALL_ITEM_LIST[1]
	
	DIM sep = IIF(POS("フォルダー", STATUS(ID2, ST_TITLE)) <> 0, "\", "")
	DIM msg = "■" + str + "<#CR>"
	
	FOR r = 5 TO FGET(FID, F_LINECOUNT)
		IF POS("\" + str + sep,  FGET(FID, r, 3)) <> 0 THEN
			msg = msg + "ID:" + FGET(FID, r, 1) + ", プロセス名:" + FGET(FID, r, 2) + "<#CR>"
		ENDIF
	NEXT
	FCLOSE(FID)

	REPEAT
		FUKIDASI(TRIM(msg))
		SLEEP(0.100)
	UNTIL GETID("使用中", "OperationStatusWindow") = -1
FINALLY
	FSO.DeleteFile(path)
ENDTRY
使用関数
解説

キーボードからの入力を1文字ずつずらす

キーからのABBC、…、ZAのように1文字後ろにずらします。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

PUBLIC array[-1]

FOR key = VK_A TO VK_Z
	arrayPush(array, key)
NEXT

PUBLIC rotate
rotate = arrayRotate(array, 1)

PUBLIC key

FOR key = VK_A TO VK_Z
	SETHOTKEY(key,, "keyChange")
	SETHOTKEY(key, MOD_SHIFT, "keyChange")
NEXT

WHILE TRUE
	FUKIDASI("キー割り当て変更中。ESCで終了")
	SLEEP(0.001)
WEND

PROCEDURE keyChange()
	DIM vk = rotate[arraySearch(HOTKEY_VK, array)]
	IFB HOTKEY_MOD = 4 THEN
		vk = STRCONV(vk, SC_UPPERCASE)
	ENDIF
	KBD(vk)
FEND
使用関数

マウス位置の色を取得

マウス位置の色情報を取得します。

UWSC
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
解説

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

UWSC
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

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

UWSC
PUBLIC flg = FALSE

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_X, MOD_ALT, "flag")

DIM array[] = "BTN", "LIST", "TAB", "MENU", "TREEVIEW", + _
				"LISTVIEW", "EDIT", "STATIC", "STATUSBAR", "TOOLBAR", + _
				"LINK", "ACCCLK", "ACCCLK2", "ACCTXT", "ACCEDIT", + _
				"FROMLAST", "BACK"

REPEAT
	FUKIDASI("Alt + Xでカーソル下の情報を取得")
	SLEEP(0.001)
UNTIL flg

FUKIDASI("取得中")

DIM ID = GETID(GET_FROMPOINT_WIN)

PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
PRINT

FOR item IN array
	PRINT "// [" + item + "]" 
	FOR class IN GETITEM(ID, EVAL("ITM_" + item), -1)
		PRINT "CLKITEM(ID, <#DBL>" + class + "<#DBL>, CLK_" + item + ")"
	NEXT
	PRINT
NEXT

PROCEDURE forceQuit()
	EXITEXIT
FEND

PROCEDURE flag()
	flg = TRUE
FEND
解説

参考文献

  1. UWSC 掲 示 板

関連記事

SCKEY関数 (スクリプト関数)
ショートカットキーを実行します。
GETKEYSTATE関数 (スクリプト関数)
GETKEYSTATE関数は、キークリック・マウスクリック・トグルキー情報を取得する関数です。引数に指定したキーコードに対応するキーのクリックがあった場合はTRUE、なかった場合はFALSEを返します。