C#で、ある外部アプリの子Windowのタイトルキャプションを認識して、アクティブにし<これは必要ないかも、ハンドラーも一応認識し、適当な座標をマウスポインターで左クリックする、タイプを送る、ということを実現したいと思います。おそらくWin32APIを呼び出したりすると思うのですが、わかりやすいサンプルを紹介してもらえないでしょうか?

http://ukamen.hp.infoseek.co.jp/Programming1/WindowFunctions/
http://www.codeproject.com/dotnet/wfspy.asp
これらを発見したのですが、目的のアプリの子Windowのハンドル/タイトルキャプションはできないようです。ちなみにSPY+でやればきちんと認識します。これのコアの部分をC#で書ければいいのですが。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:aki73ix No.1

回答回数5224ベストアンサー獲得回数27

ポイント70pt

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化して強引にメッセージ投げてやらないと無理だと思います

id:kenokabe

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

2004/05/21 12:43:08
id:kuippa No.2

回答回数1030ベストアンサー獲得回数13

ポイント70pt

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

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

user32 FindWindowA

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

user32 SetCursorPos

PostMessage user32

みぎくりっく&H2

ひだりくりっく&H1

id:kenokabe

役にたちます、 thx!

2004/05/21 15:36:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません