2014.8.30
INASOFT
/トップ/キーボードシミュレータ ダウンロード/WebHelp/ヘルプトップ
戻る / keybd_event APIについて / C++ / C# / VB.NET / J# / C++.NET
キーボードシミュレータを作ってみよう!!
キーボードシミュレータの簡単なコマンドライン版を作ってみようという、プログラミング解説講座です。
第1回
■キーボードシミュレータとは?
クリップボードに対応していないソフトウェアに、他のソフトからの情報を貼り付けたくなることはないでしょうか。作者は、あるバイナリファイル編集ソフトを用いているとき、クリップボードに未対応であることで、とても使いづらく感じたことがありました。
キーボードシミュレータは、キーボード入力をシミュレートすることにより、上記のようなソフトウェアに対する問題の解決を試みます。
このプログラムが採用している方式は、Win32APIの keybd_event() を呼び出し、キーボードの動作をシミュレートするというものです。
このプログラムを起動すると、ダイアログが表示され、そこに文字列を入力できる状態になります。もちろん、クリップボードにも対応しています。[OK]をクリックすると、数秒のウェイトの後、入力された内容に従ったキーボードシミュレートを開始します。これにより、クリップボードを介さない情報のコピーを実現します。
詳しくは、ヘルプ本体を参照してください。
■どういう方法で行うか?
先ほど項でも少し触れたとおり、keybd_event() というWin32 APIを使います。これは、Windows上で動作しているアプリケーションに対し、キーボードの入力があったかのように思わせるためのAPIです。
VOID keybd_event( BYTE bVk, // 仮想キーコード BYTE bScan, // ハードウェアスキャンコード DWORD dwFlags, // 関数のオプション ULONG_PTR dwExtraInfo // 追加のキーストロークデータ );
先ほどは「キーボードの入力があったかのように思わせる」と書きましたが、実際にはキーボードドライバもこのAPIを呼び出しています。システムはこの情報から、WM_KEYUP や WM_KEYDOWN メッセージを生成します。
[引数の解説]
bVk … 仮想キーコードを指定します。
bScan … 使用しません。
dwFlags … 関数の動作を指定します。次のフラグを組み合わせて指定します。
KEYEVENTF_EXTENDEDKEY(1) … このフラグをセットすると、スキャンコードにプリフィックスバイト 0xE0(224)を追加します。
KEYEVENTF_KEYUP(2) … このフラグをセットすると、キーを離す操作になります。セットしない場合、キーを押す操作になります。
dwExtraInfo … 省略。
キーボードのキーを押したり、離したりといった動作を行い、イベントを発生させます。MSDNライブラリによれば、画面のスナップショットを取得してクリップボードに記憶させるために、[PrintScreen]キーの押し下げをシミュレートすることもできるそうです。このような操作を行うには、bVkをVK_SNAPSHOTに設定して、keybd_eventを呼び出します。
■keybd_event() のサンプル
Aキーの押下を行うには、次のようにします。
// Aキーの押し下げをシミュレートする。 keybd_event( 'A', 0, 0, 0 ); // Aキーの解放をシミュレートする。 keybd_event( 'A', 0, KEYEVENTF_KEYUP, 0);
Enterキーの押下を行うには、次のようにします。
// リターンキーの押し下げをシミュレートする。 keybd_event( VK_RETURN, 0, 0, 0 ); // リターンキーの解放をシミュレートする。 keybd_event( VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
Shiftキーを押しながらBキーを押すには、次のようにします。
// Shiftキーの押し下げをシミュレートする。 keybd_event( VK_SHIFT, 0, 0, 0 ); // Bキーの押し下げをシミュレートする。 keybd_event( 'B', 0, 0, 0 ); // Bキーの解放をシミュレートする。 keybd_event( 'B', 0, KEYEVENTF_KEYUP, 0); // SHIFTキーの解放をシミュレートする。 keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
■次回は?
次回は、C++言語を用いて、キーボードシミュレータのコマンドライン版を作ってみます。
戻る / keybd_event APIについて / C++ / C# / VB.NET / J# / C++.NET
※このページは、ソフトウェアに付属のヘルプファイルをWeb用に再構築したものです。大部分に自動変換を施しているため、一部は正しく変換しきれずに表示の乱れている箇所があるかもしれませんが、ご容赦下さい。また、本ドキュメントはアーカイブドキュメントであり、内容は、右上の作成日付の時点のものとなっております。一部、内容が古くなっている箇所があるかと思いますが、あらかじめご了承下さい。
※このページへは、自由にリンクしていただいてかまいません。
■このページに関するご意見をお待ちしております → フィードバックページ