tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB上から別のアプリのメニューを操作
記事No13533
投稿日: 2009/03/25(Wed) 11:01
投稿者TANY
お世話になります。
VBは長くつきあいがありますが、apiなどは初心者です。
さて、VB6のアプリから、別のWindowsアプリのメニュー項目を操作(実行)したいのですが、どのようにすればよろしいでしょうか。

[ツリー表示へ]
タイトルRe: VB上から別のアプリのメニューを操作
記事No13534
投稿日: 2009/03/25(Wed) 11:13
投稿者オショウ
> VBは長くつきあいがありますが、apiなどは初心者です。
> さて、VB6のアプリから、別のWindowsアプリのメニュー項目を操作(実行)したいのですが、どのようにすればよろしいでしょうか。

  VC++をインストールしていれば、SPY++がインストールされますので
  SPY++を使って、操作したアプリのメインウィンドウをメッセージ監
  視させ、そのマウス操作等のメッセージを、VB6側からPostMessage
  させて行います。

  PostMessageするウィンドウハンドルは・・・
  VB6側でFindWindowとかで操作したいアプリを探してハンドルを取得
  して行います・・・

  何はともあれ、APIの知識も必要ですが、どんなウィンドウメッセー
  ジが流れているかSPY++で知る必要があろうかと。

  そこからようやくテスト的なプログラムを作成して動作確認し・・・
  本題突入〜頑張って下さい!

以上。

[ツリー表示へ]
タイトルRe^2: VB上から別のアプリのメニューを操作
記事No13539
投稿日: 2009/03/26(Thu) 08:20
投稿者TANY
ご教授有り難うございました。
私はプラント設計に携わるもので、VBで関連のプログラムを作成していますが、いわゆるシステム的なことには大変疎いのです。VC++やSPY++など分かりません。頑張れといわれて、有り難いことですが、とっかかりさえさっぱり分かりません。初めての投稿でしたが、ある必要もあり、どなたか例などご提示して教えていただけないでしょうか。

[ツリー表示へ]
タイトルRe^3: VB上から別のアプリのメニューを操作
記事No13549
投稿日: 2009/03/27(Fri) 12:27
投稿者オショウ
> ご教授有り難うございました。
> 私はプラント設計に携わるもので、VBで関連のプログラムを作成していますが、いわゆるシステム的なことには大変疎いのです。VC++やSPY++など分かりません。頑張れといわれて、有り難いことですが、とっかかりさえさっぱり分かりません。初めての投稿でしたが、ある必要もあり、どなたか例などご提示して教えていただけないでしょうか。

● APIの説明

  ウィンドウハンドル取得<=該当アプリを探す
  FindWindow関数
  http://msdn.microsoft.com/ja-jp/library/cc364634.aspx

  子ウィンドウハンドル取得
  FindWindowEx関数
  http://msdn.microsoft.com/ja-jp/library/cc410853.aspx

  メッセージの送信
  SendMessage関数
  http://msdn.microsoft.com/ja-jp/library/cc411022.aspx

  メッセージの送信
  PostMessage関数
  http://msdn.microsoft.com/ja-jp/library/cc410952.aspx

●  これらをVB6から呼び出すには、Declare宣言する

  Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  
  http://www.winapi-database.com/Window/Change/FindWindow.html

  Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
    (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
    ByVal lpszClass As String, ByVal lpszWindow As String) As Long
  
  http://www.winapi-database.com/Window/Change/FindWindowEx.html

  Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal MSG As Long,  _
    ByVal wParam As Long, ByVal lParam As Long) As Long
  
  http://www.winapi-database.com/Program/Message/SendMessage.html

  Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long,  _
    ByVal wParam As Long, ByVal lParam As Long) As Long
  
  http://www.winapi-database.com/Program/Message/PostMessage.html

● ウィンドウメッセージ

  http://www.winapi-database.com/Message/WM/

  どんなメッセージが流れているか・・・
  は、その操作したいアプリを起動し、SPY++でメッセージをモニターする
  ように設定して、マウスで操作すれば、ウィンドウメッセージのログが
  取れます。その中から探し出さないと、これ以上の説明はできません。

● プログラムの流れ

  1. FindWindowで、操作したいウィンドウハンドルを得る。
  2. FindWindowExで、メニューのコントロールのウィンドウハンドルを得る。
  3. SendMessageやPostMessageで、必要なウィンドウメッセージを、メニュー
    のハンドルに流し込むことで、欲しい動作を行わせる。
    (必要があれば、何度もメッセージを送信させる)

※ 操作したいアプリが、誰でも持っているようなものであれば、どんな
  ウィンドウメッセージが流れているかは、教えてもらえるかもしれま
  せんが、業務的に固有のものであれば、無理です。

  よって、理解し頑張ってもらうしかありません。

※ そういう仕事をどこかに発注したいのであれば・・・
  相談できるところは多数あると思います。

以上。

[ツリー表示へ]
タイトルRe^3: VB上から別のアプリのメニューを操作
記事No13550
投稿日: 2009/03/27(Fri) 13:42
投稿者ダンボ
> apiなどは初心者です。
> VC++やSPY++など分かりません。
> ある必要もあり、

となると、VBでの自作をあきらめてウィンドウズ操作を記憶・再生・プログラミング
できるフリーソフトの活用を検討したらいかがでしょう。

「マウス操作 記憶 履歴 再生」で検索するといろいろ見つかります。

[ツリー表示へ]
タイトルRe^3: VB上から別のアプリのメニューを操作
記事No13551
投稿日: 2009/03/27(Fri) 14:20
投稿者ぶぶ
まず、ここのサンプルから『他プロセスの連携』を見てみてはいかがですか?
参考になると思いますけど。

[ツリー表示へ]
タイトルRe^4: VB上から別のアプリのメニューを操作
記事No13552
投稿日: 2009/03/28(Sat) 09:45
投稿者TANY
皆様にはいろいろと教えていただき、有り難うございました。
初めての投稿でしたが、皆様の親切に感動いたしました。私は急遽、本日から出張となりました。帰りましてから改めて勉強をしたいと思います。

[ツリー表示へ]