目次
- 1 ホットキーの設定/解除
- 2 ホットキーの呼び出しと文字入力を同時に行う方法
- 3 修飾子キー単独で検知
- 4 修飾子キーの左右判定
- 5 仮想キー一覧
- 6 プログラム実行例
- 6.1 画像をクリップボードにコピーする
- 6.2 アイドル時間を取得
- 6.3 マウスカーソル下のウィンドウの情報を吹き出しに表示
- 6.4 特定のキーを連打する
- 6.5 現在のカーソル位置を吹き出しに表示
- 6.6 プログラム実行時からの経過時間を表示(ESCで終了)
- 6.7 メールの受信を検知(Outlook)
- 6.8 マウスカーソル下のスクロールバー情報を取得
- 6.9 Yahoo!ファイナンスから米ドル・ユーロ・豪ドルのレートを取得
- 6.10 ファイルを開いているプロセスを調べる
- 6.11 キーボードからの入力を1文字ずつずらす
- 6.12 マウス位置の色を取得
- 6.13 キャレット(カーソル)位置を取得
- 6.14 CLKITEMで操作できる項目を取得
- 7 参考文献
ホットキーを設定します。設定したホットキーを入力することによりプロシージャを呼び出すことができます。
「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が押されたということになります。
- 構文
- 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に修飾子キーが格納されている。
ホットキーの設定/解除
// ESCキーでforceQuit関数を呼び出す
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
// ESCキーで呼び出せるようにしたforceQuit関数を解除
SETHOTKEY(VK_ESC, EMPTYPARAM)
すべてのホットキーを解除
SETHOTKEY関数は第三引数を省略するとホットキーの解除ができます。keyは1から255の範囲と901、modiferはMOD_ALT、MOD_CONTROL、MOD_SHIFT、MOD_WINの1,2,4,8と2のべき乗なのでPOWER関数を使いすべてのキーの組み合わせを多重ループで回し解除します。
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関数ありとなしで実行しメモ帳で文字入力をしてみると違いがわかると思います。
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に修飾子キーが格納されているので、検知されたキーの判定に使うことができます。
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 が押されたとき。
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が押されたとき。
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が押されたとき。
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 |
---|---|---|---|---|
1 | VK_LBUTTON | マウスの左ボタン | ||
2 | VK_RBUTTON | マウスの右ボタン | ||
3 | VK_CANCEL | コントロール・ブレイク処理(定義なし) | ||
4 | VK_MBUTTON | マウスの中央ボタン(3ボタンマウス) | ||
5 | VK_XBUTTON1 | マウスの第1拡張ボタン(定義なし) | ||
6 | VK_XBUTTON2 | マウスの第2拡張ボタン(定義なし) | ||
7 | ||||
8 | VK_BACK | Backspaceキー | Backspace | |
9 | VK_TAB | Tabキー | Tab | |
10 | 予約済 | |||
11 | 予約済 | |||
12 | VK_CLEAR | Clearキー | Clear | |
13 | VK_RETURN | Enterキー | Enter | |
13 | VK_ENTER | Enterキー | Enter | |
14 | 予約済 | |||
15 | 予約済 | |||
16 | VK_SHIFT | Shiftキー | Shift | |
17 | VK_CTRL | Ctrlキー | Ctrl | |
17 | VK_CONTROL | Ctrlキー | Ctrl | |
18 | VK_ALT | Altキー | Alt | |
18 | VK_MENU | Altキー | Alt | |
19 | VK_PAUSE | Pauseキー | Pause | |
20 | VK_CAPITAL | CapsLockキー | CapsLock | |
21 | VK_KANA | IME かなモード | ||
22 | 未定義 | |||
23 | VK_JUNJA | IME Junjaモード | ||
24 | VK_FINAL | IME ファイナルモード | ||
25 | VK_KANJI | IME 漢字モード | ||
26 | 未定義 | |||
27 | VK_ESC | Escキー | Esc | |
27 | VK_ESCAPE | Escキー | Esc | |
28 | VK_CONVERT | IME 変換 | 変換 | |
29 | VK_NONCONVERT | IME 無変換 | 無変換 | |
30 | VK_ACCEPT | IME 使用可能 | ||
31 | VK_MODECHANGE | IME モード変換要求 | ||
32 | VK_SPACE | スペースキー | Space | |
33 | VK_PRIOR | PageUpキー | PageUp | |
34 | VK_NEXT | PageDownキー | PageDown | |
35 | VK_END | Endキー | End | |
36 | VK_HOME | Homeキー | Home | |
37 | VK_LEFT | ←キー | ← | |
38 | VK_UP | ↑キー | ↑ | |
39 | VK_RIGHT | →キー | → | |
40 | VK_DOWN | ↓キー | ↓ | |
41 | VK_SELECT | Selectキー | ||
42 | VK_PRINT | Printキー | ||
43 | VK_EXECUTE | Executeキー | ||
44 | VK_SNAPSHOT | PrintScreenキー | PrintScree | |
45 | VK_INSERT | Insertキー | Insert | |
46 | VK_DELETE | Deleteキー | Delete | |
47 | VK_HELP | Helpキー | ||
48 | VK_0 | 0キー | 0 | |
49 | VK_1 | 1キー | 1 | ! |
50 | VK_2 | 2キー | 2 | " |
51 | VK_3 | 3キー | 3 | # |
52 | VK_4 | 4キー | 4 | $ |
53 | VK_5 | 5キー | 5 | % |
54 | VK_6 | 6キー | 6 | & |
55 | VK_7 | 7キー | 7 | ' |
56 | VK_8 | 8キー | 8 | ( |
57 | VK_9 | 9キー | 9 | ) |
58 | 未定義 | |||
59 | 未定義 | |||
60 | 未定義 | |||
61 | 未定義 | |||
62 | 未定義 | |||
63 | 未定義 | |||
64 | 未定義 | |||
65 | VK_A | Aキー | a | A |
66 | VK_B | Bキー | b | B |
67 | VK_C | Cキー | c | C |
68 | VK_D | Dキー | d | D |
69 | VK_E | Eキー | e | E |
70 | VK_F | Fキー | f | F |
71 | VK_G | Gキー | g | G |
72 | VK_H | Hキー | h | H |
73 | VK_I | Iキー | i | I |
74 | VK_J | Jキー | j | J |
75 | VK_K | Kキー | k | K |
76 | VK_L | Lキー | l | L |
77 | VK_M | Mキー | m | M |
78 | VK_N | Nキー | n | N |
79 | VK_O | Oキー | o | O |
80 | VK_P | Pキー | p | P |
81 | VK_Q | Qキー | q | Q |
82 | VK_R | Rキー | r | R |
83 | VK_S | Sキー | s | S |
84 | VK_T | Tキー | t | T |
85 | VK_U | Uキー | u | U |
86 | VK_V | Vキー | v | V |
87 | VK_W | Wキー | w | W |
88 | VK_X | Xキー | x | X |
89 | VK_Y | Yキー | y | Y |
90 | VK_Z | Zキー | z | Z |
91 | VK_WIN | Windowsキー | 左 | |
92 | VK_START | Windowsキー | 左 | |
92 | VK_RWIN | 右Windowsキー | 右 | |
93 | VK_APPS | アプリケーションキー | ||
94 | 予約済 | |||
95 | VK_SLEEP | コンピュータスリープキー | ||
96 | VK_NUMPAD0 | テンキーの0キー | テンキーの0 | Insert |
97 | VK_NUMPAD1 | テンキーの1キー | テンキーの1 | End |
98 | VK_NUMPAD2 | テンキーの2キー | テンキーの2 | ↓ |
99 | VK_NUMPAD3 | テンキーの3キー | テンキーの3 | PageDown |
100 | VK_NUMPAD4 | テンキーの4キー | テンキーの4 | ← |
101 | VK_NUMPAD5 | テンキーの5キー | テンキーの5 | |
102 | VK_NUMPAD6 | テンキーの6キー | テンキーの6 | → |
103 | VK_NUMPAD7 | テンキーの7キー | テンキーの7 | Home |
104 | VK_NUMPAD8 | テンキーの8キー | テンキーの8 | ↑ |
105 | VK_NUMPAD9 | テンキーの9キー | テンキーの9 | PageUp |
106 | VK_MULTIPLY | テンキーの*キー | テンキーの* | |
107 | VK_ADD | テンキーの+キー | テンキーの+ | |
108 | VK_SEPARATOR | 区切り記号キー | ||
109 | VK_SUBTRACT | 減算記号キー | テンキーの- | |
110 | VK_DECIMAL | 小数点キー | テンキーの. | Delete |
111 | VK_DIVIDE | 除算記号キー | テンキーの/ | |
112 | VK_F1 | F1キー | F1 | |
113 | VK_F2 | F2キー | F2 | |
114 | VK_F3 | F3キー | F3 | |
115 | VK_F4 | F4キー | F4 | |
116 | VK_F5 | F5キー | F5 | |
117 | VK_F6 | F6キー | F6 | |
118 | VK_F7 | F7キー | F7 | |
119 | VK_F8 | F8キー | F8 | |
120 | VK_F9 | F9キー | F9 | |
121 | VK_F10 | F10キー | F10 | |
122 | VK_F11 | F11キー | F11 | |
123 | VK_F12 | F12キー | F12 | |
124 | VK_F13 | VK_F13 | F13 | |
125 | VK_F14 | VK_F14 | F14 | |
126 | VK_F15 | VK_F15 | F15 | |
127 | VK_F16 | VK_F16 | F16 | |
128 | VK_F17 | VK_F17 | F17 | |
129 | VK_F18 | VK_F18 | F18 | |
130 | VK_F19 | VK_F19 | F19 | |
131 | VK_F20 | VK_F20 | F20 | |
132 | VK_F21 | VK_F21 | F21 | |
133 | VK_F22 | VK_F22 | F22 | |
134 | VK_F23 | VK_F23 | F23 | |
135 | VK_F24 | VK_F24 | F24 | |
136 | VK_NAVIGATION_VIEW | 割当無し | ||
137 | VK_NAVIGATION_MENU | 割当無し | ||
138 | VK_NAVIGATION_UP | 割当無し | ||
139 | VK_NAVIGATION_DOWN | 割当無し | ||
140 | VK_NAVIGATION_LEFT | 割当無し | ||
141 | VK_NAVIGATION_RIGHT | 割当無し | ||
142 | VK_NAVIGATION_ACCEPT | 割当無し | ||
143 | VK_NAVIGATION_CANCEL | 割当無し | ||
144 | VK_NUMLOCK | NumLockキー | NumLock | |
145 | VK_SCROLL | ScrollLockキー | ScrollLock | |
146 | VK_OEM_NEC_EQUAL | |||
146 | VK_OEM_FJ_JISHO | |||
147 | VK_OEM_FJ_MASSHOU | |||
148 | VK_OEM_FJ_TOUROKU | |||
149 | VK_OEM_FJ_LOYA | |||
150 | VK_OEM_FJ_ROYA | |||
151 | 割当無し | |||
152 | 割当無し | |||
153 | 割当無し | |||
154 | 割当無し | |||
155 | 割当無し | |||
156 | 割当無し | |||
157 | 割当無し | |||
158 | 割当無し | |||
159 | 割当無し | |||
160 | VK_LSHIFT | 左Shiftキー | 左Shift | |
161 | VK_RSHIFT | 右Shiftキー | 右Shift | |
162 | VK_LCTRL | 左Ctrlキー | 左Ctrl | |
163 | VK_RCTRL | 右Ctrlキー | 右Ctrl | |
164 | VK_LALT | 左Altキー | 左Alt | |
164 | VK_LMENU | 左Altキー | 左Alt | |
165 | VK_RALT | 右Altキー | 右Alt | |
165 | VK_RMENU | 右Altキー | 右Alt | |
166 | VK_BROWSER_BACK | ブラウザーの戻るキー | ||
167 | VK_BROWSER_FORWARD | ブラウザーの進むキー | ||
168 | VK_BROWSER_REFRESH | ブラウザーの更新のキー | ||
169 | VK_BROWSER_STOP | ブラウザーの停止キー | ||
170 | VK_BROWSER_SEARCH | ブラウザーの検索キー | ||
171 | VK_BROWSER_FAVORITES | ブラウザーのお気に入りキー | ||
172 | VK_BROWSER_HOME | ブラウザーの開始およびホームキー | ||
173 | VK_VOLUME_MUTE | 音量ミュートキー | ||
174 | VK_VOLUME_DOWN | 音量ダウンキー | ||
175 | VK_VOLUME_UP | 音量アップキー | ||
176 | VK_MEDIA_NEXT_TRACK | 次のトラックキー | ||
177 | VK_MEDIA_PREV_TRACK | 前のトラックキー | ||
178 | VK_MEDIA_STOP | メディア停止キー | ||
179 | VK_MEDIA_PLAY_PAUSE | メディア再生/一時停止キー | ||
180 | VK_LAUNCH_MAIL | メール起動キー | ||
181 | VK_LAUNCH_MEDIA_SELECT | メディア選択キー | ||
182 | VK_LAUNCH_APP1 | アプリケーション1起動キー | ||
183 | VK_LAUNCH_APP2 | アプリケーション2起動キー | ||
184 | 予約済 | |||
185 | 予約済 | |||
186 | VK_OEM_1 | OEM1キー | : | * |
187 | VK_OEM_PLUS | +キー | ; | + |
188 | VK_OEM_COMMA | ,キー | , | < |
189 | VK_OEM_MINUS | -キー | - | = |
190 | VK_OEM_PERIOD | .キー | . | > |
191 | VK_OEM_2 | OEM2キー | / | ? |
192 | VK_OEM_3 | OEM3キー | @ | ` |
193 | VK_ABNT_C1 | 予約済 | ||
194 | VK_ABNT_C2 | 予約済 | ||
195 | VK_GAMEPAD_A | 予約済 | ||
196 | VK_GAMEPAD_B | 予約済 | ||
197 | VK_GAMEPAD_X | 予約済 | ||
198 | VK_GAMEPAD_Y | 予約済 | ||
199 | VK_GAMEPAD_RIGHT_SHOULDER | 予約済 | ||
200 | VK_GAMEPAD_LEFT_SHOULDER | 予約済 | ||
201 | VK_GAMEPAD_LEFT_TRIGGER | 予約済 | ||
202 | VK_GAMEPAD_RIGHT_TRIGGER | 予約済 | ||
203 | VK_GAMEPAD_DPAD_UP | 予約済 | ||
204 | VK_GAMEPAD_DPAD_DOWN | 予約済 | ||
205 | VK_GAMEPAD_DPAD_LEFT | 予約済 | ||
206 | VK_GAMEPAD_DPAD_RIGHT | 予約済 | ||
207 | VK_GAMEPAD_MENU | 予約済 | ||
208 | VK_GAMEPAD_VIEW | 予約済 | ||
209 | VK_GAMEPAD_LEFT_THUMBSTICK_BUTTO | 予約済 | ||
210 | VK_GAMEPAD_RIGHT_THUMBSTICK_BUTT | 予約済 | ||
211 | VK_GAMEPAD_LEFT_THUMBSTICK_UP | 予約済 | ||
212 | VK_GAMEPAD_LEFT_THUMBSTICK_DOWN | 予約済 | ||
213 | VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT | 予約済 | ||
214 | VK_GAMEPAD_LEFT_THUMBSTICK_LEFT | 予約済 | ||
215 | VK_GAMEPAD_RIGHT_THUMBSTICK_UP | 予約済 | ||
216 | VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN | 割当無し | ||
217 | VK_GAMEPAD_RIGHT_THUMBSTICK_RIGH | 割当無し | ||
218 | VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT | 割当無し | ||
219 | VK_OEM_4 | OEM4キー | [ | { |
220 | VK_OEM_5 | OEM5キー | \ | | |
221 | VK_OEM_6 | OEM6キー | ] | } |
222 | VK_OEM_7 | OEM7キー | ||
223 | VK_OEM_8 | OEM8キー | ||
224 | 予約済 | |||
225 | VK_OEM_AX | OEM固有 | ||
226 | VK_OEM_102 | OEM102キー | \ | _ |
227 | VK_ICO_HELP | OEM固有 | ||
228 | VK_ICO_00 | |||
229 | VK_PROCESSKEY | IME PROCESSキー | ||
230 | VK_ICO_CLEAR | OEM固有 | ||
231 | VK_PACKET | キーボード以外の入力手段に使用される 32ビット仮想キー値の下位ワード | ||
232 | 割当無し | |||
233 | VK_OEM_RESET | OEM固有 | ||
234 | VK_OEM_JUMP | OEM固有 | ||
235 | VK_OEM_PA1 | OEM固有 | ||
236 | VK_OEM_PA2 | OEM固有 | ||
237 | VK_OEM_PA3 | OEM固有 | ||
238 | VK_OEM_WSCTRL | OEM固有 | ||
239 | VK_OEM_CUSEL | OEM固有 | ||
240 | VK_OEM_ATTN | OEM固有 | ||
241 | VK_OEM_FINISH | OEM固有 | ||
242 | VK_OEM_COPY | OEM固有 | ||
243 | VK_OEM_AUTO | OEM固有 | ||
244 | VK_OEM_ENLW | OEM固有 | ||
245 | VK_OEM_BACKTAB | OEM固有 | ||
246 | VK_ATTN | Attnキー | Attn | |
247 | VK_CRSEL | CrSelキー | CrSel | |
248 | VK_EXSEL | ExSelキー | ExSel | |
249 | VK_EREOF | Erase EOFキー | ||
250 | VK_PLAY | Playキー | ||
251 | VK_ZOOM | Zoomキー | ||
252 | VK_NONAME | 予約済 | ||
253 | VK_PA1 | PA1キー | ||
254 | VK_OEM_CLEAR | Clearキー | ||
901 | VK_RRETURN |
プログラム実行例
画像をクリップボードにコピーする
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
アイドル時間を取得
最後にキーボードまたはマウスを操作してから経過した時間をミリ秒で取得します。
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
マウスカーソル下のウィンドウの情報を吹き出しに表示
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
特定のキーを連打する
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
現在のカーソル位置を吹き出しに表示
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で終了)
SETHOTKEY(VK_ESC, , "forceQuit")
DIM t = GETTIME()
WHILE TRUE
FUKIDASI(GETTIME() - t)
SLEEP(0.001)
WEND
PROCEDURE forceQuit()
EXITEXIT
FEND
メールの受信を検知(Outlook)
メールを受信したら日時を出力する。日時はメールの受信日時ではなくOutlookが受信を検知した日時。
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
マウスカーソル下のスクロールバー情報を取得
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
[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
ファイルを開いているプロセスを調べる
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文字ずつずらす
キーからのA→B、B→C、…、Z→Aのように1文字後ろにずらします。
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
マウス位置の色を取得
マウス位置の色情報を取得します。
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
キャレット(カーソル)位置を取得
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で操作できる項目を取得
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
参考文献
関連記事
- SCKEY関数 (スクリプト関数)
- ショートカットキーを実行します。
- GETKEYSTATE関数 (スクリプト関数)
- GETKEYSTATE関数は、キークリック・マウスクリック・トグルキー情報を取得する関数です。引数に指定したキーコードに対応するキーのクリックがあった場合はTRUE、なかった場合はFALSEを返します。