tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル他プログラムのメッセージボックス消去
記事No9896
投稿日: 2010/02/23(Tue) 10:13
投稿者イカミ
お世話になります。

解らない事がありましたので教えてください。

開発環境:WindowsXP VB2008

プログラムA.設備と通信しCSVを作成する  ←既存ソフト
プログラムB.CSVをデータベースへ登録する ←私が設計
 (ひとつのPCでプログラムA,Bを稼働させています)

プログラムAが就業時間になるとメッセージボックスが表示されるんですが、
プログラムBからOKボタンを押下(又はメッセージボックス消去)する事は可能でしょうか?

できることならプログラムAを改造したいのですが、
実行ファイルしか持ってないみたいなので・・・。

宜しくお願いします。

[ツリー表示へ]
タイトルRe: 他プログラムのメッセージボックス消去
記事No9897
投稿日: 2010/02/23(Tue) 13:42
投稿者オショウ
> お世話になります。
> プログラムAが就業時間になるとメッセージボックスが表示されるんですが、
> プログラムBからOKボタンを押下(又はメッセージボックス消去)する事は可能でしょうか?

  可能だと思います。

  まずそのメッセージボックスが表示された段階で、SPY++等使って
  そのウィンドウのクラスや情報をSPY++で取得し・・・

  プログラムB側で、Win32 API使うことになると思いますが、タイマー
  等でメッセージボックスのクラス名等でウィンドウ情報を取得させ、
  該当するものがあれば、そのウィンドウ内の子ウィンドウであるボタ
  ンを検索してボタンクリックに相当するメッセージをPostMessageし
  てやれば、OKかと・・・

  EnumWindow/EnumChildWindow/PostMessage あたりのAPIを使うことに
  なるかと思います。
  検索するウィンドウの情報が解っているので、FindWindow/FindwindowEx
  で、一発で検索する方法もあります。

※ ただ、いつも監視していると他アプリのメッセージボックスにも反応
  してしまうので、就業時刻(終業時刻?)になったら監視を始める様
  にしないと・・・

※ メッセージボックスのOKボタン等の情報もSPY++で取得しておく必要
  があります。
  因みにプログラムAはVB.NETアプリ?VB6?VC++?

以上。参考まで

[ツリー表示へ]
タイトルRe^2: 他プログラムのメッセージボックス消去
記事No9898
投稿日: 2010/02/23(Tue) 17:08
投稿者イカミ
>   EnumWindow/EnumChildWindow/PostMessage あたりのAPIを使うことに
>   なるかと思います。

レスありがとうございます ^^

早速FindWindowExとSendMessage関数を使ってソフトを設計してみました。

終業時刻の17:00(±30秒)になったら以下の処理をループさせる。

        Dim iHwnd1 As Integer, iHwnd2 As Integer

        iHwnd1 = FindWindow("#32770", "確認メッセージ")
        iHwnd2 = FindWindowEx(iHwnd1, 0, "Button", "OK")

        SendMessage(iHwnd2, BM_CLICK, 0, 0)


という処理でメッセージボックスを消す事ができました。

初めてFindWindowExという関数を使ったのですが、
使い方は間違っていないでしょうか?

[ツリー表示へ]
タイトルRe^3: 他プログラムのメッセージボックス消去
記事No9899
投稿日: 2010/02/23(Tue) 18:57
投稿者オショウ
>         iHwnd1 = FindWindow("#32770", "確認メッセージ")
>         iHwnd2 = FindWindowEx(iHwnd1, 0, "Button", "OK")
>
>         SendMessage(iHwnd2, BM_CLICK, 0, 0)
>
>
> という処理でメッセージボックスを消す事ができました。
>
> 初めてFindWindowExという関数を使ったのですが、
> 使い方は間違っていないでしょうか?

  間違ってませんが・・・
  iHwnd1 が正しく取れているか確認するようにされた
  方がよいですヨ!
  因みに、iHwnd2も。

以上。

[ツリー表示へ]