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

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

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

Re[12]: VB.netから他アプリケーションの操作について


(過去ログ 106 を表示中)

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

■63316 / inTopicNo.1)  VB.netから他アプリケーションの操作について
  
□投稿者/ よっし (1回)-(2012/08/13(Mon) 14:13:42)

分類:[.NET 全般] 

現在VB.netを使い、他のアプリケーション( 以下 甲 )を起動するプログラムを作成したいと考えています。
甲は、EXEを起動するとまずタスクトレイにアイコンができ、そのアイコンをダブルクリックして初めて操作する為のウィンドウが表示されるものです。
この「 起動 ⇒ アイコンのダブルクリック ⇒ ウィンドウ表示 」を VB.netを使い「 VB.net ボタン押下 ⇒ ウィンドウ表示 」にしたいのですがどのようにすれば実現できるかわかりません。
現在 windows apiの
ShowWindow( hwnd, 5 )
SetForgroundWindow( hwnd )
EnableWindow( hwnd, true )
を試したのですが、どれもwindowの表示にまでは至りませんでした。

どうぞよろしくお願いします!
引用返信 編集キー/
■63319 / inTopicNo.2)  Re[1]: VB.netから他アプリケーションの操作について
□投稿者/ オショウ (5回)-(2012/08/13(Mon) 16:57:12)
No63316 (よっし さん) に返信
> この「 起動 ⇒ アイコンのダブルクリック ⇒ ウィンドウ表示 」を VB.netを使い「 VB.net ボタン押下 ⇒ ウィンドウ表示 」にしたいのですがどのようにすれば実現できるかわかりません。

  ttp://d.hatena.ne.jp/tomoemon/20090912/p2
  ttp://zenu.xrea.jp/XC2CCCAB82FA5BFA5B9A5AFA5C8A5ECA5A4A4CEA5A2A5A4A5B3A5F3CEF3B5F3CAFDCBA1X.xhtml

  できるかできないかは、そのアプリ次第。
  だた、できない可能性の方が高いように思います。

  尚、OSによって、タスクトレイのクラス名が異なりますので、ご注意ください。

以上。参考まで
引用返信 編集キー/
■63320 / inTopicNo.3)  Re[2]: VB.netから他アプリケーションの操作について
□投稿者/ よっし (3回)-(2012/08/13(Mon) 17:55:39)
返答ありがとうございます。
取得する方法はない、と はっきり書かれてしまっていますね。
合わせて今回の件では windows7 も考慮しなければならないので教えていただけた方法でも難しそうです。

タスクトレイは諦め、起動されいるプロセスからのアプローチでもう少し考えてみたいと思います。

引用返信 編集キー/
■63322 / inTopicNo.4)  Re[3]: VB.netから他アプリケーションの操作について
□投稿者/ クロエ (1回)-(2012/08/14(Tue) 10:15:03)
No63320 (よっし さん) に返信
オショウさんが参照されている、
>ttp://d.hatena.ne.jp/tomoemon/20090912/p2
>ttp://zenu.xrea.jp/XC2CCCAB82FA5BFA5B9A5AFA5C8A5ECA5A4A4CEA5A2A5A4A5B3A5F3CEF3B5F3CAFDCBA1X.xhtml

こちらのタスクトレイにメッセージを送信する方法は、条件付きではありますが、いちおうWindows7でも使えます。


私も昔WindowsXP時代に、タスクトレイのアイコンをダブルクリックするDLLを作成したことがあるのですが、
Windows7になってから、そのアイコンがインジケータに隠れるようになってしまい、XP時代の手法が使えなくなってしまいました。

いろいろと調べても結局、プログラムで回避する方法がわからなかったのですが、インジケータのカスタム設定から
「アイコンと通知を表示」として対象のアイコンを常にタスクトレイに表示してしまえば、DLLは変更せずに済むことがわかりました。
現在はインジケータの設定だけは手動で対応してもらっています。(レジストリでも対応できそうでしたが)


ただ、タスクトレイを操作しない方法が見つかれば、そちらのほうが楽かもしれませんね。
DLL作ったときも結構面倒くさかった(−−;

引用返信 編集キー/
■63323 / inTopicNo.5)  Re[4]: VB.netから他アプリケーションの操作について
□投稿者/ 渋木宏明 (11回)-(2012/08/14(Tue) 13:28:24)
渋木宏明 さんの Web サイト
操作対象が特定のアプリケーションなら、タスクトレイのアイコンを操作するより、アプリケーションウィンドウに対してトレイアイコンから通知されるのと同じメッセージを送りつけた方が話が早いかもしれません。
引用返信 編集キー/
■63324 / inTopicNo.6)  Re[5]: VB.netから他アプリケーションの操作について
□投稿者/ オショウ (6回)-(2012/08/14(Tue) 14:00:38)
SPY++使って、どんなWindowsメッセージが流れているのかをロギングし
うまくエミュレーションすることができれば問題なく動作するでしょう。

ただ、アプリケーションでどんな仕掛けを作っているのか、その仕様に
限定される場合もありますので、一様なプログラムにできない可能性が
高いです。

まぁ〜特定のアプリ操作なので、バージョンが変わらなければ、使える
方法が見つかるかもしれません。

SPY++等使って、頑張ってもらうしかないでしょう。

※ Win7 Pro で付箋紙21に対してSPY++でロギングしてみました。
  トレイアイコンの個数取得や情報取得のメッセージも飛んでいるの
  が確認できました。まぁ〜何とかできるのでは?と思います。

以上。




引用返信 編集キー/
■63325 / inTopicNo.7)  Re[6]: VB.netから他アプリケーションの操作について
□投稿者/ よっし (5回)-(2012/08/14(Tue) 16:59:00)
数々の貴重な御助言ありがとうございます。
初めて SPY++ を使用し、ダブルクリック後の Messageを IsWindowVisibleで確認しながら送信してみたのですが、 .netのFormから フォーカスが外れる以外の変化は得られませんでした。
何が間違っていて、何が出来ないのか、すべてが上手くいったとして本当に windowを立ち上げられるアプリなのか、何もかもわからなくなり 自分には過ぎた技術であると一先ず保留としました。

オショウさんに教えていただいたサンプルを 目的のアイコンのハンドルにダブルクリックをPostMessageするよう改良してみたのですが、思い通りに動いてくれませんでした。(取得は出来ているようなのですが。)
なぜか 目的のアイコンのハンドルではなくタスクトレイのハンドルに変更し PostMessageすると 目的の windowが起動してくれます。

ttp://zenu.xrea.jp/XC2CCCAB82FA5BFA5B9A5AFA5C8A5ECA5A4A4CEA5A2A5A4A5B3A5F3CEF3B5F3CAFDCBA1X.xhtml

PostMessageを送るのは こちらで取得できるハンドルで宜しいのでしょうか?

よろしくお願いします。
引用返信 編集キー/
■63326 / inTopicNo.8)  Re[7]: VB.netから他アプリケーションの操作について
□投稿者/ オショウ (7回)-(2012/08/14(Tue) 18:38:30)
> なぜか 目的のアイコンのハンドルではなくタスクトレイのハンドルに変更し PostMessageすると 目的の windowが起動してくれます。

  タスクトレイのハンドルでSPY++してメッセージの内容をロギングし、
  その次に同様のメッセージを自作プログラムからタスクトレイに流し
  こむことで、目当てのソフトウェアが再表示されればOK〜と言う事
  になると思いますが。

  もしくは、タスクトレイに常駐している状態のそのソフトウェアが、
  ウィンドウがどこかに隠されているのであれば、そのハンドルでSPY++
  してみて、タスクトレイでダブルクリックした際のメッセージの内容
  が、実際にそのアプリにどのように伝わっているのかが解れば、最終
  的には、その常駐しているアプリのWindowハンドルを探して、直接、
  そのメッセージを流し込むことで代替できるのでは?・・・

  と言うことだと思いますが。

  その常駐アプリは、何ですか?(答えられないなら構いませんが)

以上。
引用返信 編集キー/
■63327 / inTopicNo.9)  Re[8]: VB.netから他アプリケーションの操作について
□投稿者/ よっし (6回)-(2012/08/14(Tue) 19:11:45)
scansnap managerと言う スキャンのソフトです。
スキャンしたデータの管理と共に利便性の面で頼まれました。

重ね重ねありがとうございます。
実験を繰り返しているうちに タスクバーのアイコンが表示されていないところをダブルクリックしても scansnap managerが立ち上がるようになっていました。
タスクトレイのハンドルで立ち上がるのはこの辺りに問題がありそうです。

ご指摘いただいた タスクトレイのハンドルで PostMessageした際の解析をみたいと思います。
引用返信 編集キー/
■63330 / inTopicNo.10)  Re[9]: VB.netから他アプリケーションの操作について
□投稿者/ オショウ (8回)-(2012/08/14(Tue) 21:38:56)
少々無理やりですが、ScanSnap Manager のタスクトレイアイコンを
ダブルクリックする機能を実験してみました。

Win7 Pro 32bit SP1 です。
因みに、タスクトレイの何番目に当該ソフトのアイコンがあるのかを
探す機能は別途考えて下さい。

タスクトレイのウィンドウハンドルに・・・
1.WM_LBUTTONDOWN wParam:1 lPatam:タスクトレイの矩形内のマウス座標
2.WM_LBUTTONUP wParam:0 lPatam:タスクトレイの矩形内のマウス座標
3.WM_LBUTTONDOWN wParam:1 lPatam:タスクトレイの矩形内のマウス座標
4.WM_LBUTTONUP wParam:0 lPatam:タスクトレイの矩形内のマウス座標
5.WM_LBUTTONDBLCLK wParam:1 lPatam:タスクトレイの矩形内のマウス座標
6.WM_LBUTTONUP wParam:0 lPatam:タスクトレイの矩形内のマウス座標

上記の順序でメッセージを投げたところ、ScanScap Manager が、再表示
されました。

因みに、他の常駐ソフトのアイコン座標に変更して投げてみたところ、ダブル
クリックで再表示されるものは全て同様に表示動作されました。

以上。参考まで
引用返信 編集キー/
■63331 / inTopicNo.11)  Re[10]: VB.netから他アプリケーションの操作について
□投稿者/ オショウ (9回)-(2012/08/14(Tue) 22:40:56)
あとアイコンの場所の検索は・・・

ttp://zenu.xrea.jp/XC2CCCAB82FA5BFA5B9A5AFA5C8A5ECA5A4A4CEA5A2A5A4A5B3A5F3CEF3B5F3CAFDCBA1X.xhtml

このサンプルで取得されたszLocalTitleの文字列を元に、探しているものと合致している
ものが、何個目にあるのか・・・

とすれば、あとは、タスクトレイの矩形領域から大体わかる。
試してみましたが、そう難しくはなかったです。

Win7 なので、wchar_t に変更しないといけない箇所が何か所かあるけど・・・

以上。参考まで
引用返信 編集キー/
■63332 / inTopicNo.12)  Re[11]: VB.netから他アプリケーションの操作について
□投稿者/ オショウ (10回)-(2012/08/14(Tue) 22:44:59)
補足
commctrl.hには、TB_GETBUTTONINFOが登録されているので、コメント部分を
修正してやれば、正しく取得できます。

因みに、Win7 の場合は、(WM_USER + 65) ではなく、(WM_USER + 63) ですネ!

以上。
引用返信 編集キー/
■63333 / inTopicNo.13)  Re[12]: VB.netから他アプリケーションの操作について
□投稿者/ よっし (8回)-(2012/08/15(Wed) 01:02:06)
わざわざ検証までして頂き ありがとうございます。
おかげさまで なんとか実用レベルにまで進むことができました。
windows7 での検証はまだ済んでいませんが 教えて頂いた知識をもとに何とか頑張ってみたいと思います。

長いことお付き合い頂き 本当にありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -