人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C#で、ある外部アプリの子Windowのタイトルキャプションを認識して、アクティブにし<これは必要ないかも、ハンドラーも一応認識し、適当な座標をマウスポインターで左クリックする、タイプを送る、ということを実現したいと思います。おそらくWin32APIを呼び出したりすると思うのですが、わかりやすいサンプルを紹介してもらえないでしょうか?
http://ukamen.hp.infoseek.co.jp/Programming1/WindowFunctions/
http://www.codeproject.com/dotnet/wfspy.asp
これらを発見したのですが、目的のアプリの子Windowのハンドル/タイトルキャプションはできないようです。ちなみにSPY+でやればきちんと認識します。これのコアの部分をC#で書ければいいのですが。

●質問者: kenokabe
●カテゴリ:コンピュータ
✍キーワード:C# アクティブ アプリ キャプション クリック
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● aki73ix
●70ポイント

http://www.kumei.ne.jp/c_lang/

猫でもわかるプログラミング

//

char str3[256];

int CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam){

char str2[256];

int vv;

::GetClassName(hwnd,str2,255);

if(!lstrcmp(str2,”Edit”)){

int nY;

WINDOWPLACEMENT wp;

GetWindowPlacement(hwnd,&wp);

nY = wp.rcNormalPosition.top;

if(nY==100){

//オブジェクトのY座標が100で名前がEditのものに対して実行

SendMessage(hwnd,WM_GETTEXT,255,(LPARAM)(str3));

return 0;

}

}

return (int)(hwnd);

}

HWND GETHW;

int CALLBACK EnumWindowProc(HWND hwnd,LPARAM lParam)

{

int i;

char str[256],szClassName[256],ttt[3];

GetWindowText(hwnd,str,255);

GetClassName( hwnd, szClassName, sizeof(szClassName) );

//キャプションが”はてな 回答ウィンドウ”かクラス名が”#32770”の窓を取得ハンドルを返す

if(!lstrcmp(str,”はてな 回答ウィンドウ”)&& !lstrcmp(szClassName,”#32770”) ){

GETHW=hwnd;

}

return (int)hwnd;

}

EnumWindows((WNDENUMPROC)EnumWindowProc,0);//でまずGETHWにハンドルを取得

SetWindowPos(GETHW,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE| SWP_NOMOVE | SWP_NOSIZE);//最上位設定

PostMessage((HWND)GETHW,WM_SETFOCUS,0,0);//フォーカス取得

::EnumChildWindows((HWND)GETHW,(WNDENUMPROC)EnumChildProc,0);//対象の子オブジェクトを取得して、メッセージ送信でテキストを取ってくる

という具合に、フォアグランドにしてみてからSetKeyboardStateなどを使うと上手くいきませんか?

フォアグランドにするのがだめなら、DLL化して強引にメッセージ投げてやらないと無理だと思います

◎質問者からの返答

DLL化とかそんな複雑にはならないはずの作業だと思うのですが、できれば数多くあるであろうサンプルでC#にべったりというのが良いのですが。


2 ● くいっぱ
●70ポイント

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

ご指定のページが見つかりません

子ウインドウの参照はEnumWindowsでできると思います。

最初の掲題のホームページにも記述がありましたが、いかがでしょうか?

以下、使いそうなAPIをピックアップしておきます。

言語はとりたてて制限していませんがご容赦ください。

http://homepage1.nifty.com/MADIA/vb/API/EnumWindows.htm

EnumWindows(全てのウインドウを列挙する)

すべてのウインドウを列挙する

EnumWindows user32

GetWindowText user32

http://www.infonia.ne.jp/~maximum/Window/FindWindow.htm

ウィンドウ名が指定された文字列と一致するトップ レベル ウィンドウのハンドルを取得

user32 FindWindowA

http://hp.vector.co.jp/authors/VA015521/api.html

VisualBasic Frontier - API

マウスポインタを指定した位置に移動する

user32 SetCursorPos

http://yokohama.cool.ne.jp/chokuto/urawaza/api/SendMessage.html

SendMessage

PostMessage user32

みぎくりっく&H2

ひだりくりっく&H1

◎質問者からの返答

役にたちます、 thx!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ