タイトル | : Re^3: VB上から別のアプリのメニューを操作 |
記事No | : 13549 |
投稿日 | : 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で、必要なウィンドウメッセージを、メニュー のハンドルに流し込むことで、欲しい動作を行わせる。 (必要があれば、何度もメッセージを送信させる)
※ 操作したいアプリが、誰でも持っているようなものであれば、どんな ウィンドウメッセージが流れているかは、教えてもらえるかもしれま せんが、業務的に固有のものであれば、無理です。
よって、理解し頑張ってもらうしかありません。
※ そういう仕事をどこかに発注したいのであれば・・・ 相談できるところは多数あると思います。
以上。
|