C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: PostMessage? SendMessage?


(過去ログ 114 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■67520 / inTopicNo.1)  PostMessage? SendMessage?
  
□投稿者/ もふもっふ (1回)-(2013/08/07(Wed) 14:51:39)

分類:[VB.NET/VB2005 以降] 

VB2008で作業しています。

作成したアプリから他のアプリを操作したいと思い、いろいろ試しています。
まずは自分で作成したアプリ(仮にAAA)があります。(TopMost=True)

AAAはアクティブにしたウィンドタイトルを表示します。(ウィンドタイトル表示)
Dim APPtitle As New System.Text.StringBuilder(256)
Dim GEThWnd As IntPtr = GetForegroundWindow()
If Not (IntPtr.Zero.Equals(GEThWnd) OrElse Me.Handle.Equals(GEThWnd)) Then
Dim ret As Integer = GetWindowText(GEThWnd, APPtitle, 256)
Dim GetTitleWin As String = APPtitle.ToString(0, ret)
Label1.Text = GetTitleWin
End If

AAAをつかって指定のウインドタイトルに対してEnterキーを押す。
※ここのプログラムがよく理解できない

PostMessageやSendMessageで指定したウインドタイトルのアプリに
Enterキーを押す(送信?)という作業だけなのですがいろいろ調べていくと
逆に頭の中がごちゃごちゃになってしまいました。

引用返信 編集キー/
■67521 / inTopicNo.2)  Re[1]: PostMessage? SendMessage?
□投稿者/ 魔界の仮面弁士 (296回)-(2013/08/07(Wed) 15:07:57)
No67520 (もふもっふ さん) に返信
> AAAをつかって指定のウインドタイトルに対してEnterキーを押す。
SendInput API かな。

ただ、相手も自作アプリなら、API に頼るよりも
WCF なりソケット通信なりで通信した方が良さそう。
引用返信 編集キー/
■67523 / inTopicNo.3)  Re[1]: PostMessage? SendMessage?
□投稿者/ kiku (17回)-(2013/08/07(Wed) 15:40:51)
質問者さんのやりたいこととは下記のことでしょうか?

1.アプリAAAを起動。
2.アプリBBBを最前面に持ってくる。
3.ENTERキーを押下すると、アプリAAAのテキストボックスに、
  アプリBBBのWindowタイトルが表示される。

引用返信 編集キー/
■67524 / inTopicNo.4)  Re[2]: PostMessage? SendMessage?
□投稿者/ kiku (18回)-(2013/08/07(Wed) 15:46:19)
No67523 (kiku さん) に返信
> 質問者さんのやりたいこととは下記のことでしょうか?
>
> 1.アプリAAAを起動。
> 2.アプリBBBを最前面に持ってくる。
> 3.ENTERキーを押下すると、アプリAAAのテキストボックスに、
>   アプリBBBのWindowタイトルが表示される。

勘違いしておりました。
確認取り下げます。(ごめんなさい)
引用返信 編集キー/
■67530 / inTopicNo.5)  Re[2]: PostMessage? SendMessage?
□投稿者/ もふもっふ (2回)-(2013/08/08(Thu) 08:11:10)
No67521 (魔界の仮面弁士 さん) に返信
>AAAをつかって指定のウインドタイトルに対してEnterキーを押す。
> SendInput API かな。
>
> ただ、相手も自作アプリなら、API に頼るよりも
> WCF なりソケット通信なりで通信した方が良さそう。

いろいろなところで調べものしていると「魔界の仮面弁士さん」の名前をよく目にします。
そしてよく参考にさせていただいています。
ちょっとだけこの場をお借りして
魔界の仮面弁士さんいつもありがとうございます。

さて、SendInputとなるものがあるんですね。
ちょっと調べて使ってみたいと思います。
引用返信 編集キー/
■67531 / inTopicNo.6)  Re[3]: PostMessage? SendMessage?
□投稿者/ もふもっふ (3回)-(2013/08/08(Thu) 08:19:53)
No67524 (kiku さん) に返信
> ■No67523 (kiku さん) に返信
>>質問者さんのやりたいこととは下記のことでしょうか?
>>
>>1.アプリAAAを起動。
>>2.アプリBBBを最前面に持ってくる。
>>3.ENTERキーを押下すると、アプリAAAのテキストボックスに、
>>  アプリBBBのWindowタイトルが表示される。
>
> 勘違いしておりました。
> 確認取り下げます。(ごめんなさい)

たぶん私の質問のしかたも紛らわしかったかもしれません。
1:AAAを起動
2:他のアプリ(アクティブになっていなくても)にAAAからEnterキーを送信
ということをやりたいと思っています。

引用返信 編集キー/
■67560 / inTopicNo.7)  Re[1]: PostMessage? SendMessage?
□投稿者/ もふもっふ (4回)-(2013/08/09(Fri) 14:19:34)
SendInputをいろいろ調べてやってみたのですが
これはアクティブでないアプリに対してはできないのでしょうk?
アクティブでないアプリに対してはPostMessageを使用するのでしょうか?
引用返信 編集キー/
■67563 / inTopicNo.8)  Re[2]: PostMessage? SendMessage?
□投稿者/ 魔界の仮面弁士 (304回)-(2013/08/09(Fri) 17:08:56)
No67560 (もふもっふ さん) に返信
> SendInputをいろいろ調べてやってみたのですが
> これはアクティブでないアプリに対してはできないのでしょうk?
SendInput は、マウス入力やキーボード入力をエミュレートするものです。

自アプリが非アクティブな時に、ユーザーがキーボード操作をしても
反応しないでしょうから、アクティブにしておく必要があるでしょうね。

キーエミュレートは大抵のアプリケーションに対して使える反面、相手が
アクティブでないと意味を持たないため、確実性に欠けます。SendKeys も同様ですね。


> アクティブでないアプリに対してはPostMessageを使用するのでしょうか?

PostMessage 等で処理できる場合もあるかもしれませんが、
制御方法に関しては、相手のアプリ次第だと思いますよ。
(今回通信したい相手は、Enter キーの受信をどのようにして検知しているのでしょうか?)

たとえば相手が TextBox なら、WM_SETTEXT を送って文字列を渡すことができますが、この方法は
IE 等で開いた HTML 上の TEXTAREA に対しては使えません(MSHTML 経由で送り込むことはできます)。

あるいは、ダイアログ上のボタンを押したいのなら、それがデフォルトボタンなら、
Enter キーを送出するという手もありますし、既定のボタンでは無いなら、
ボタンをアクティブにしてから Space を送出すると言う手があります。
相手をアクティブにせずボタンを押したことにしたいのなら、
 PostMessage(hdlg, WM_COMMAND, MAKEWPARAM(id, BN_CLICKED), hbtn)
とか
 PostMessage(hbtn, BM_CLICK, 0, 0)
とか
 PostMessage(hbtn, WM_LBUTTONDOWN, MK_LBUTTON, 0)
 PostMessage(hbtn, WM_LBUTTONUP, 0, 0)
などの方法も使えるかも。IAccessible.doDefaultAction メソッドで処理する手もありますね。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -