- ベストアンサー
C#で他のアプリの文字入力フォームに指定の文字を入力する方法
- C#で他のアプリケーションの文字入力フォームに指定の文字を入力する方法について解説します。
- SendKeys.SendWait()メソッドを使用することで、他のアプリケーションのフォームに文字を入力することが可能です。
- 以下のようなコードの例をご参考ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足説明の方ありがとうございます。 かなり力技になってしまいますが・・・よければご参考までに まず市販ソフトということなのでTabIndexが設定されてると思います。 そこで、Button押下後Tabキーと入力文字キーを送ってやります。 下記にサンプルを記述します。 using System.Runtime.InteropServices; [DllImport("user32.dll")] extern static IntPtr GetWindow(IntPtr hWnd, uint uCmd); [DllImport("user32.dll")] extern static IntPtr GetForegroundWindow(); [DllImport("user32.dll")] extern static int GetWindowText(IntPtr hWnd, StringBuilder lpStr, int nMaxCount); [DllImport("user32.dll")] extern static bool IsWindowVisible(IntPtr hWnd); [DllImport("user32.dll")] extern static bool SetForegroundWindow(IntPtr hWnd); //ButtonClickイベント const int GW_HWNDNEXT = 2; StringBuilder sb = new StringBuilder(100); IntPtr hwnd = GetForegroundWindow(); while (hwnd != IntPtr.Zero) { if (IsWindowVisible(hwnd)) { GetWindowText(hwnd, sb, sb.Capacity); // タイトルバー文字列を取得 if (sb.ToString().IndexOf(textBox1.Text) != -1) { SetForegroundWindow(hwnd); // アクティブ /*** *ここにSendKeys.SendWaitでキーを送ります。 *ラジオボタンがある場合Tabキーでラジオボタンをアクティブにし「↑」「↓」ボタンで変更 *チェックボックスの場合スペースキーでOnOff切り替え可能 *下記にキーコードが記述されています。 *MSDN SendKeys:http://msdn.microsoft.com/ja-jp/library/system.windows.forms.sendkeys(VS.80).aspx * * ***/ break; } } hwnd = GetWindow(hwnd, GW_HWNDNEXT); } この例ではTextBox1に別アプリケーションの名前の一部を入れることでアクティブにしています。 Ex)GoogleChrome → Google を入力し、Button1をクリックでGoogleChromeがアクティブになります。 力技すぎて汎用性も何もありませんが・・・ご参考までに
その他の回答 (2)
- rk_les
- ベストアンサー率63% (23/36)
申し訳ありません。説明を履き違えていましたね。 ちなみに補足ですが >早速本題ですが、キーロガーの様なソフトでいいんですよね・・・? これは別にキーロガー自体を指しているわけではありません。キーロガーの様な入力されたものを監視するということを指して記述しました。 監視するということは入力されたものが取得できるということです。 >アプリのフォームの上から順に配列に代入された文字列の入力をした いと思います。 このことからTextBoxか何かに文字を入れ配列に代入していると判断しました。そのことから「キーで入力した値を[文字を入れるプログラム(a)]のオブジェクトに格納する」と推測していました。 >シンプルに言うとaとbのアプリがありまして、bのアプリ内の変数に宣言されている文字列をaのアプリの文字入力フォームにボタン一つで入力するというものです。 正しい表現ではないですね。この書き方だとなんとなくは伝わりますが不明確な部分が多いです。 「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、aについているボタンで格納する。」 又は、 「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、bについているボタンで格納する。」 かどちらかですか?それとも違いますでしょうか? ちなみにaは自作ソフトというのは分かりますがbはどうなのでしょうか? 補足宜しくお願いします。
補足
rk_les様 度々のご回答に感謝します。 説明不足で申し訳ありません。 「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、bについているボタンで格納する。」というのが正しいです。 ちなみにbが自作ソフトでaが市販のソフトです、 市販のソフトの構成が複雑なため、入力の手間を省くために考えたのがbのソフトです。 お時間のある時にでもアドバイス頂ければ幸いです よろしくお願いします。
- rk_les
- ベストアンサー率63% (23/36)
こんにちは。 早速本題ですが、キーロガーの様なソフトでいいんですよね・・・? このようなソフトではグローバルフックをするのが一般的です。 試してはいませんがSendKeyでも出来るとは思います・・・がかなり面倒だとおもいます。 http://homepage1.nifty.com/MADIA/vc/vc_bbs/200502/200502_05020024.html 上記のサイトが非常に参考になると思います。 ご参考までに
補足
お返事ありがとうございます。 キーロガーとは違って、キーボード入力内容やマウスの動き等を記録する必要はございません。 私の説明が分かりにくいので申し訳ありませんが シンプルに言うとaとbのアプリがありまして、bのアプリ内の変数に宣言されている文字列をaのアプリの文字入力フォームにボタン一つで入力するというものです。 他のアプリを動かすアプリということです よろしくお願いします。
お礼
ご丁寧な解説に感謝します。 さっそく実行しまして、自分の好み通りに設定したところ 面白いようにうまくいきました。 助かりました、本当にありがとうございます。 また機会がありましたらよろしくお願いします。