「GetKeyState.exe(キー状態取得実行ファイル)」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
 
(4人の利用者による、間の41版が非表示)
1行目: 1行目:
= 概要 =
[https://www.haijin-boys.com/software/mery/mery-3-7-0#36 Mery Ver 3.7.2]から[[マクロリファレンス:3:Shell オブジェクト#GetKeyState メソッド|shell.GetKeyStateメソッド]]が使えるようになりました。プロセス起動のタイムラグなど、パフォーマンス面でも有利ですし、柔軟性も高いので、該当バージョンが利用できる場合は上記メソッドの利用を検討してください。
 
== 概要 ==
修飾キーの押下状態を取得する実行ファイルです。
修飾キーの押下状態を取得する実行ファイルです。


Shift、Ctrl、Alt いずれかのキーの押下状態を取得できます。
Shift、Ctrl、Alt いずれかのキーの押下状態を取得できます。マクロスクリプトからキー状態を取得し、状態に応じて動作をコントロールしたくて作成しました。
マクロスクリプトからキー状態を取得し、状態に応じて動作をコントロールしたくて作成しました。


作成されたマクロから利用できますので、ご自由にお使いください。
作成されたマクロから利用できますので、ご自由にお使いください。


zipファイルをダウンロードしたら、ファイルのプロパティ画面で「ブロックの解除」を行ってください(これをしないと実行時に警告が表示されることがあります)。


zipファイルをダウンロードしたら、ファイルのプロパティ画面で「ブロックの解除」を行ってください。
その後、zipファイルを展開して、マクロから実行されるフォルダーに配置してください(推奨は '''"Macros"フォルダー'''とします)。
(これをしないと実行時に警告が表示されることがあります)


その後、zipファイルを展開して、マクロから実行されるフォルダーに配置してください。
== ダウンロード ==
(推奨は '''"Macros"フォルダー'''とします)
 
 
'''ダウンロード'''<br>
[[ファイル:GetKeyState.zip]]
[[ファイル:GetKeyState.zip]]


== 変更履歴 ==
* 1.0.0 (2019-03-04)
** 新規作成


= 更新履歴 =
== 使い方 ==
2019/3/4 新規作成
コマンドライン引数で、"Shift" "Ctrl" "Alt" のいずれかを渡してください。
 
2019/3/23 公開ページの変更(中身に変更はありません)


<pre>
GetKeyState.exe shift // Shiftキーの押下状態を取得する場合
</pre>


= 使い方 =
コマンドライン引数で、"Shift" "Ctrl" "Alt" のいずれかを渡してください。
GetKeyState.exe shift // Shiftキーの押下状態を取得する場合
* 大文字小文字は区別しません
* 大文字小文字は区別しません
* 実は先頭の1文字しか判断していませんので、"s"のみとかでも大丈夫です
* 実は先頭の1文字しか判断していませんので、"s"のみとかでも大丈夫です


 
戻り値(終了コード)
戻り値(終了コード)
* 1: キーが押されている
* 1: キーが押されている
* 0: キーは押されていない
* 0: キーは押されていない
* -1: エラー(引数間違い、メッセージボックスを表示します)
* -1: エラー(引数間違い、メッセージボックスを表示します)
 


マクロにショートカットキーを割り当てる際は、該当する修飾キー "あり" と "なし" の両方を割り当ててください
マクロにショートカットキーを割り当てる際は、該当する修飾キー "あり" と "なし" の両方を割り当ててください
* Shift+F8 / F8 など
* Shift+F8 / F8 など


ツールバーにアイコン化しているマクロの場合は、"修飾キー+クリック" か "ふつうの左クリック" かでマクロの動作を切り替えることができます。
ツールバーにアイコン化しているマクロの場合は、"修飾キー+クリック" か "ふつうの左クリック" かでマクロの動作を切り替えることができます。


ツールバーの [マクロ] メニューや右クリックメニューから実行する際は、Shift または Ctrl キーを押しながら実行することができますが、Alt キーを押しながら実行することはできません(Alt キーでメニューのポップアップ表示がキャンセルされるため)。
ツールバーの [マクロ] メニューや右クリックメニューから実行する際は、Shift または Ctrl キーを押しながら実行することができますが、Alt キーを押しながら実行することはできません(Alt キーでメニューのポップアップ表示がキャンセルされるため)。


起動までに若干のタイムラグがありますので、すばやく操作すると取りこぼすことがあります。そういう意味では、ショートカットキーにはあまり向かないかもしれません。私は、ツールバー起動で使っています。


起動までに若干のタイムラグがありますので、すばやく操作すると取りこぼすことがあります。
: ※マクロの処理が開始するか終了するまで修飾キーを押しつづければ、取りこぼしはなくなります。また、マクロの処理が全体的に重い/長いソースコードの場合は、[[#実装例|実装例]] にあるような修飾キー取得コードの部分をソースコードの先頭に配置するとよいでしょう。
そういう意味では、ショートカットキーにはあまり向かないかもしれません。
私は、ツールバー起動で使っています。


: ※マクロの処理が開始するか終了するまで修飾キーを押しつづければ、取りこぼしはなくなります。<br> また、マクロの処理が全体的に重い/長いソースコードの場合は、[[#実装例|実装例]] にあるような修飾キー取得コードの部分をソースコードの先頭に配置するとよいでしょう。
== 実装例 ==
サンプルコードの


<syntaxhighlight lang="javascript">
window.Alert( "XXキーが押されています" );
</syntaxhighlight>


= 実装例 =
の部分を任意の動作コードに置きかえてください。マクロの動作内容に変化をつけたり、複数のマクロの実行コードを振り分けてひとつのマクロにまとめたりすることができます。


'''サンプルコード1'''
;サンプルコード1
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var wshShell = new ActiveXObject("WScript.Shell");
var wshShell = new ActiveXObject("WScript.Shell");


67行目: 64行目:
var shift = wshShell.Run("GetKeyState.exe shift", 0, true);
var shift = wshShell.Run("GetKeyState.exe shift", 0, true);


if(shift == -1) window.Quit();
if(shift != -1){
if(shift == 1) window.Alert("Shiftキーが押されています");
  if(shift == 1) window.Alert("Shiftキーが押されています");
</source>
}
</syntaxhighlight>


;サンプルコード2
* 実行ファイル GetKeyState.exe の実在確認をします(GetKeyState がない場合でも動作する)
* カレントディレクトリ(Mery.exe の作業フォルダ)を変更しません
<syntaxhighlight lang="javascript" copy>
var ctrl = 0, alt = 0;


'''サンプルコード2'''
// GetKeyState.exe のフルパスを " " で囲う
<source lang="javascript">
var gks = '"' + editor.FullName.replace( /[^\\]+$/ , '' )
var wshShell = new ActiveXObject('WScript.Shell');
        + 'Macros\\GetKeyState.exe"';


// GetKeyState.exe のフルパス部分を " " で囲い、半角空白を付加する
// 半角空白+コマンドライン引数をつけて GetKeyState を実行する(実行ファイルの実在確認をする)
var getKeyState = '"' + editor.FullName.replace( /mery\.exe$/i , 'Macros\\' ) + 'GetKeyState.exe "';
if ( new ActiveXObject( "Scripting.FileSystemObject" ).FileExists( gks ) ) {
  var wshShell = new ActiveXObject('WScript.Shell');


// コマンドライン引数をつけて GetKeyState を実行する
  // Ctrl キーの状態を取得
 
  ctrl = wshShell.Run( gks + ' control', 0, true );
// Ctrl キーの状態を取得
  // Alt キーの状態を取得
var ctrl = wshShell.Run( getKeyState + 'control', 0, true );
  alt = WshShell.Run( gks + ' alt' , 0, true );
// Alt キーの状態を取得
}
var alt = WshShell.Run( getKeyState + 'alt' , 0, true );


// 修飾キーによる動作の切り替え
// 修飾キーによる動作の切り替え
if ( ctrl > 0 )
if ( ctrl > 0 && alt > 0 ) {
  window.Alert( "CtrlキーとAltキーが押されています" );
}
else if ( ctrl > 0 ) {
   window.Alert( "Ctrlキーが押されています" );
   window.Alert( "Ctrlキーが押されています" );
else if ( Alt > 0 )
}
else if ( Alt > 0 ) {
   window.Alert( "Altキーが押されています" );
   window.Alert( "Altキーが押されています" );
else
}
   window.Alert( "修飾キーは押されていません" );
else {
</source>
   window.Alert( "修飾キーは押されていません" ); // ← GetKeyState.exe がない場合も
}
</syntaxhighlight>


;サンプルコード3
ポップアップメニューマクロへの導入サンプル
*メニューに表示する内容や、選択した項目から実行するコマンドを切り替えます
<syntaxhighlight lang="javascript" copy>
var gks = editor.FullName.replace( /[^\\]+$/i , "" )
        + "Macros\\GetKeyState.exe";
var WshShell = new ActiveXObject( "WScript.Shell" );


= その他 =
// マクロ開始時の Ctrl キーの状態を取得
var $ctrl1 = WshShell.Run( "\"" + gks + "\" ctrl", 0, true );


ソースも置いときます(VS2005 C++)
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;
}
</syntaxhighlight>
 
== その他 ==
ソースも置いときます(VS2005 C++)(こちらは通常ダウンロードの必要はありません)


[[ファイル:GetKeyStateSrc.zip]]
[[ファイル:GetKeyStateSrc.zip]]


著作権は放棄します、悪意のない公序良俗の範囲内でしたら、ソースを含めご自由にお使いください
著作権は放棄します。悪意のない公序良俗の範囲内でしたら、ソースを含めご自由にお使いください(そのかわり、一切の責任も放棄します...まぁ、こんなもので誤動作もあったもんじゃないですが、派生版まで責任が持てないので)。
(そのかわり、一切の責任も放棄します...まぁ、こんなもので誤動作もあったもんじゃないですが、派生版まで責任が持てないので)
 
----
<br>
* 「[[カッコをはずす#カッコを追加/削除|カッコを追加/削除]]」マクロに使わせていただきました (sukemaru)
* ページ内の説明文に加筆させていただきました (2019/03/23 sukemaru)

2025年6月30日 (月) 01:49時点における最新版

Mery Ver 3.7.2からshell.GetKeyStateメソッドが使えるようになりました。プロセス起動のタイムラグなど、パフォーマンス面でも有利ですし、柔軟性も高いので、該当バージョンが利用できる場合は上記メソッドの利用を検討してください。

概要[編集]

修飾キーの押下状態を取得する実行ファイルです。

Shift、Ctrl、Alt いずれかのキーの押下状態を取得できます。マクロスクリプトからキー状態を取得し、状態に応じて動作をコントロールしたくて作成しました。

作成されたマクロから利用できますので、ご自由にお使いください。

zipファイルをダウンロードしたら、ファイルのプロパティ画面で「ブロックの解除」を行ってください(これをしないと実行時に警告が表示されることがあります)。

その後、zipファイルを展開して、マクロから実行されるフォルダーに配置してください(推奨は "Macros"フォルダーとします)。

ダウンロード[編集]

ファイル:GetKeyState.zip

変更履歴[編集]

  • 1.0.0 (2019-03-04)
    • 新規作成

使い方[編集]

コマンドライン引数で、"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++)(こちらは通常ダウンロードの必要はありません)

ファイル:GetKeyStateSrc.zip

※ 著作権は放棄します。悪意のない公序良俗の範囲内でしたら、ソースを含めご自由にお使いください(そのかわり、一切の責任も放棄します...まぁ、こんなもので誤動作もあったもんじゃないですが、派生版まで責任が持てないので)。

スポンサーリンク