プロが教える店舗&オフィスのセキュリティ対策術

例えばabc.exeというアプリがあったとします。
このアプリには文字列を入力するフォームがいくつかあり、
このアプリのフォームに文字を入れるプログラムを作成したいと思います。

まずはabc.exeをアクティブにし、
アプリのフォームの上から順に配列に代入された文字列の入力をしたいと思います。

つまり、
abc.exeの一番上のフォームにはmoji[0]にある文字列
二番目のフォームにはmoji[1]にある文字列
三番目のフォームにはmoji[2]にある文字列

という形です、こういったことは可能でしょうか?
SendKeys.SendWaitというのはこういうケースでも使えるのでしょうか?
もし可能であれば解説ページ、コードの例をご教示頂ければ幸いです。
よろしくお願いします。

教えて!goo グレード

A 回答 (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.w …
*
*
***/


break;
}
}
hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}


この例ではTextBox1に別アプリケーションの名前の一部を入れることでアクティブにしています。
Ex)GoogleChrome → Google を入力し、Button1をクリックでGoogleChromeがアクティブになります。

力技すぎて汎用性も何もありませんが・・・ご参考までに
    • good
    • 1
この回答へのお礼

ご丁寧な解説に感謝します。
さっそく実行しまして、自分の好み通りに設定したところ
面白いようにうまくいきました。

助かりました、本当にありがとうございます。
また機会がありましたらよろしくお願いします。

お礼日時:2010/04/06 12:33

申し訳ありません。

説明を履き違えていましたね。

ちなみに補足ですが
>早速本題ですが、キーロガーの様なソフトでいいんですよね・・・?
これは別にキーロガー自体を指しているわけではありません。キーロガーの様な入力されたものを監視するということを指して記述しました。
監視するということは入力されたものが取得できるということです。

>アプリのフォームの上から順に配列に代入された文字列の入力をした
いと思います。

このことからTextBoxか何かに文字を入れ配列に代入していると判断しました。そのことから「キーで入力した値を[文字を入れるプログラム(a)]のオブジェクトに格納する」と推測していました。


>シンプルに言うとaとbのアプリがありまして、bのアプリ内の変数に宣言されている文字列をaのアプリの文字入力フォームにボタン一つで入力するというものです。

正しい表現ではないですね。この書き方だとなんとなくは伝わりますが不明確な部分が多いです。
「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、aについているボタンで格納する。」
又は、
「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、bについているボタンで格納する。」
かどちらかですか?それとも違いますでしょうか?

ちなみにaは自作ソフトというのは分かりますがbはどうなのでしょうか?

補足宜しくお願いします。

この回答への補足

rk_les様
度々のご回答に感謝します。

説明不足で申し訳ありません。
「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、bについているボタンで格納する。」というのが正しいです。

ちなみにbが自作ソフトでaが市販のソフトです、
市販のソフトの構成が複雑なため、入力の手間を省くために考えたのがbのソフトです。

お時間のある時にでもアドバイス頂ければ幸いです
よろしくお願いします。

補足日時:2010/04/05 22:08
    • good
    • 0

こんにちは。



早速本題ですが、キーロガーの様なソフトでいいんですよね・・・?
このようなソフトではグローバルフックをするのが一般的です。
試してはいませんがSendKeyでも出来るとは思います・・・がかなり面倒だとおもいます。

http://homepage1.nifty.com/MADIA/vc/vc_bbs/20050 …

上記のサイトが非常に参考になると思います。
ご参考までに

この回答への補足

お返事ありがとうございます。
キーロガーとは違って、キーボード入力内容やマウスの動き等を記録する必要はございません。

私の説明が分かりにくいので申し訳ありませんが
シンプルに言うとaとbのアプリがありまして、bのアプリ内の変数に宣言されている文字列をaのアプリの文字入力フォームにボタン一つで入力するというものです。

他のアプリを動かすアプリということです
よろしくお願いします。

補足日時:2010/04/05 12:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

人気Q&Aランキング