「GetKeyState.exe(キー状態取得実行ファイル)」の版間の差分
編集の要約なし |
(マークアップの修正) |
||
1行目: | 1行目: | ||
= 概要 = | == 概要 == | ||
修飾キーの押下状態を取得する実行ファイルです。 | 修飾キーの押下状態を取得する実行ファイルです。 | ||
6行目: | 6行目: | ||
作成されたマクロから利用できますので、ご自由にお使いください。 | 作成されたマクロから利用できますので、ご自由にお使いください。 | ||
zipファイルをダウンロードしたら、ファイルのプロパティ画面で「ブロックの解除」を行ってください。 | zipファイルをダウンロードしたら、ファイルのプロパティ画面で「ブロックの解除」を行ってください。 | ||
14行目: | 13行目: | ||
(推奨は '''"Macros"フォルダー'''とします) | (推奨は '''"Macros"フォルダー'''とします) | ||
== ダウンロード == | |||
[[ファイル:GetKeyState.zip]] | [[ファイル:GetKeyState.zip]] | ||
== 更新履歴 == | |||
= 更新履歴 = | |||
2019/3/4 新規作成 | 2019/3/4 新規作成 | ||
2019/3/23 公開ページの変更(中身に変更はありません) | 2019/3/23 公開ページの変更(中身に変更はありません) | ||
== 使い方 == | |||
= 使い方 = | |||
コマンドライン引数で、"Shift" "Ctrl" "Alt" のいずれかを渡してください。 | コマンドライン引数で、"Shift" "Ctrl" "Alt" のいずれかを渡してください。 | ||
GetKeyState.exe shift // Shiftキーの押下状態を取得する場合 | GetKeyState.exe shift // Shiftキーの押下状態を取得する場合 | ||
* 大文字小文字は区別しません | * 大文字小文字は区別しません | ||
* 実は先頭の1文字しか判断していませんので、"s"のみとかでも大丈夫です | * 実は先頭の1文字しか判断していませんので、"s"のみとかでも大丈夫です | ||
戻り値(終了コード) | 戻り値(終了コード) | ||
36行目: | 31行目: | ||
* 0: キーは押されていない | * 0: キーは押されていない | ||
* -1: エラー(引数間違い、メッセージボックスを表示します) | * -1: エラー(引数間違い、メッセージボックスを表示します) | ||
マクロにショートカットキーを割り当てる際は、該当する修飾キー "あり" と "なし" の両方を割り当ててください | マクロにショートカットキーを割り当てる際は、該当する修飾キー "あり" と "なし" の両方を割り当ててください | ||
* Shift+F8 / F8 など | * Shift+F8 / F8 など | ||
ツールバーにアイコン化しているマクロの場合は、"修飾キー+クリック" か "ふつうの左クリック" かでマクロの動作を切り替えることができます。 | ツールバーにアイコン化しているマクロの場合は、"修飾キー+クリック" か "ふつうの左クリック" かでマクロの動作を切り替えることができます。 | ||
ツールバーの [マクロ] メニューや右クリックメニューから実行する際は、Shift または Ctrl キーを押しながら実行することができますが、Alt キーを押しながら実行することはできません(Alt キーでメニューのポップアップ表示がキャンセルされるため)。 | ツールバーの [マクロ] メニューや右クリックメニューから実行する際は、Shift または Ctrl キーを押しながら実行することができますが、Alt キーを押しながら実行することはできません(Alt キーでメニューのポップアップ表示がキャンセルされるため)。 | ||
起動までに若干のタイムラグがありますので、すばやく操作すると取りこぼすことがあります。 | 起動までに若干のタイムラグがありますので、すばやく操作すると取りこぼすことがあります。 | ||
52行目: | 43行目: | ||
私は、ツールバー起動で使っています。 | 私は、ツールバー起動で使っています。 | ||
: | : ※マクロの処理が開始するか終了するまで修飾キーを押しつづければ、取りこぼしはなくなります。また、マクロの処理が全体的に重い/長いソースコードの場合は、[[#実装例|実装例]] にあるような修飾キー取得コードの部分をソースコードの先頭に配置するとよいでしょう。 | ||
== 実装例 == | |||
サンプルコードの | |||
<source lang="javascript" inline> | |||
window.Alert( "XXキーが押されています" ); | |||
</source> | |||
の部分を任意の動作コードに置きかえてください。 | |||
の部分を任意の動作コードに置きかえてください。 | |||
マクロの動作内容に変化をつけたり、複数のマクロの実行コードを振り分けてひとつのマクロにまとめたりすることができます。 | マクロの動作内容に変化をつけたり、複数のマクロの実行コードを振り分けてひとつのマクロにまとめたりすることができます。 | ||
;サンプルコード1 | ;サンプルコード1 | ||
76行目: | 69行目: | ||
} | } | ||
</source> | </source> | ||
;サンプルコード2 | ;サンプルコード2 | ||
112行目: | 104行目: | ||
} | } | ||
</source> | </source> | ||
;サンプルコード3 | ;サンプルコード3 | ||
155行目: | 146行目: | ||
</source> | </source> | ||
= その他 = | == その他 == | ||
ソースも置いときます(VS2005 C++) | ソースも置いときます(VS2005 C++) | ||
(こちらは通常ダウンロードの必要はありません) | (こちらは通常ダウンロードの必要はありません) | ||
166行目: | 156行目: | ||
---- | ---- | ||
* ページ内の説明文、サンプルコードに加筆させていただきました (2019/03/23 - 2019/12/02, sukemaru) | * ページ内の説明文、サンプルコードに加筆させていただきました (2019/03/23 - 2019/12/02, sukemaru) |
2023年5月16日 (火) 20:35時点における版
概要
修飾キーの押下状態を取得する実行ファイルです。
Shift、Ctrl、Alt いずれかのキーの押下状態を取得できます。 マクロスクリプトからキー状態を取得し、状態に応じて動作をコントロールしたくて作成しました。
作成されたマクロから利用できますので、ご自由にお使いください。
zipファイルをダウンロードしたら、ファイルのプロパティ画面で「ブロックの解除」を行ってください。 (これをしないと実行時に警告が表示されることがあります)
その後、zipファイルを展開して、マクロから実行されるフォルダーに配置してください。 (推奨は "Macros"フォルダーとします)
ダウンロード
更新履歴
2019/3/4 新規作成
2019/3/23 公開ページの変更(中身に変更はありません)
使い方
コマンドライン引数で、"Shift" "Ctrl" "Alt" のいずれかを渡してください。
GetKeyState.exe shift // Shiftキーの押下状態を取得する場合
- 大文字小文字は区別しません
- 実は先頭の1文字しか判断していませんので、"s"のみとかでも大丈夫です
戻り値(終了コード)
- 1: キーが押されている
- 0: キーは押されていない
- -1: エラー(引数間違い、メッセージボックスを表示します)
マクロにショートカットキーを割り当てる際は、該当する修飾キー "あり" と "なし" の両方を割り当ててください
- Shift+F8 / F8 など
ツールバーにアイコン化しているマクロの場合は、"修飾キー+クリック" か "ふつうの左クリック" かでマクロの動作を切り替えることができます。
ツールバーの [マクロ] メニューや右クリックメニューから実行する際は、Shift または Ctrl キーを押しながら実行することができますが、Alt キーを押しながら実行することはできません(Alt キーでメニューのポップアップ表示がキャンセルされるため)。
起動までに若干のタイムラグがありますので、すばやく操作すると取りこぼすことがあります。 そういう意味では、ショートカットキーにはあまり向かないかもしれません。 私は、ツールバー起動で使っています。
- ※マクロの処理が開始するか終了するまで修飾キーを押しつづければ、取りこぼしはなくなります。また、マクロの処理が全体的に重い/長いソースコードの場合は、実装例 にあるような修飾キー取得コードの部分をソースコードの先頭に配置するとよいでしょう。
実装例
サンプルコードの
window.Alert( "XXキーが押されています" );
の部分を任意の動作コードに置きかえてください。 マクロの動作内容に変化をつけたり、複数のマクロの実行コードを振り分けてひとつのマクロにまとめたりすることができます。
- サンプルコード1
var wshShell = new ActiveXObject("WScript.Shell");
// カレントディレクトリをマクロディレクトリに変更
wshShell.CurrentDirectory = editor.FullName.match(/^.*\\/)[0] + 'Macros';
// SHIFTキー状態を取得
var shift = wshShell.Run("GetKeyState.exe shift", 0, true);
if(shift != -1){
if(shift == 1) window.Alert("Shiftキーが押されています");
}
- サンプルコード2
- 実行ファイル GetKeyState.exe の実在確認をします(GetKeyState がない場合でも動作する)
- カレントディレクトリ(Mery.exe の作業フォルダ)を変更しません
var ctrl = 0, alt = 0;
// GetKeyState.exe のフルパスを " " で囲う
var gks = '"' + editor.FullName.replace( /[^\\]+$/ , '' )
+ 'Macros\\GetKeyState.exe"';
// 半角空白+コマンドライン引数をつけて GetKeyState を実行する(実行ファイルの実在確認をする)
if ( new ActiveXObject( "Scripting.FileSystemObject" ).FileExists( gks ) ) {
var wshShell = new ActiveXObject('WScript.Shell');
// Ctrl キーの状態を取得
ctrl = wshShell.Run( gks + ' control', 0, true );
// Alt キーの状態を取得
alt = WshShell.Run( gks + ' alt' , 0, true );
}
// 修飾キーによる動作の切り替え
if ( ctrl > 0 && alt > 0 ) {
window.Alert( "CtrlキーとAltキーが押されています" );
}
else if ( ctrl > 0 ) {
window.Alert( "Ctrlキーが押されています" );
}
else if ( Alt > 0 ) {
window.Alert( "Altキーが押されています" );
}
else {
window.Alert( "修飾キーは押されていません" ); // ← GetKeyState.exe がない場合も
}
- サンプルコード3
ポップアップメニューマクロへの導入サンプル
- メニューに表示する内容や、選択した項目から実行するコマンドを切り替えます
var gks = editor.FullName.replace( /[^\\]+$/i , "" )
+ "Macros\\GetKeyState.exe";
var WshShell = new ActiveXObject( "WScript.Shell" );
// マクロ開始時の Ctrl キーの状態を取得
var $ctrl1 = WshShell.Run( "\"" + gks + "\" ctrl", 0, true );
var menu = CreatePopupMenu();
menu.Add( "ほげ", 1 );
// Ctrl キーを押しながら実行したときは、項目を追加表示する
if ( $ctrl1 == 1 ) {
menu.Add( "ほげほげ", 2 );
}
// ポップアップメニューを表示
var r = menu.Track( mePosMouse );
// Ctrl キーを押しながら項目を選択したときは、動作をを変更する
var $ctrl2 = WshShell.Run( "\"" + gks + "\" ctrl", 0, true );
switch( r ) {
case 1:
if ( $ctrl2 === 0 ) window.Alert( "ほげ" );
else if ( $ctrl2 === 1 ) window.Alert( "ふが" );
break;
case 2:
if ( $ctrl2 === 0 ) window.Alert( "ほげほげ" );
else if ( $ctrl2 === 1 ) window.Alert( "ふがふが" );
break;
default:
break;
}
その他
ソースも置いときます(VS2005 C++) (こちらは通常ダウンロードの必要はありません)
※ 著作権は放棄します、悪意のない公序良俗の範囲内でしたら、ソースを含めご自由にお使いください (そのかわり、一切の責任も放棄します...まぁ、こんなもので誤動作もあったもんじゃないですが、派生版まで責任が持てないので)
- ページ内の説明文、サンプルコードに加筆させていただきました (2019/03/23 - 2019/12/02, sukemaru)