DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ToolStripのボタンを別アプリからクリックするには

環境/言語:[Windows7]
分類:[.NET]

ToolStrip上のボタンを別アプリでクリックするにはどうしたらよいでしょうか。

ToolStripをもったアプリケーションがあり、その上にあるボタンをクリックしたいのですがうまくいきません。

クリックする側のアプリケーションはDelphiで作成しているため手順を記載いたします。


1.WinSpector SPYをつかい、ToolStripのハンドルを調べる。WindowsForms10.Window.8.app.0.33c0d9dとなっている。

2.FindWindow,FindWindowExをつかいToolStripのハンドルまで取得したので、TB_GETITEMRECTをSendMessageし、Rect情報を共有メモリに出力。

3.共有メモリの情報を読み、PostMessageでWM_LBUTTONDOWN、WM_LBUTTONUPを投げる。

4.ボタンはクリックされて欲しいが現状されない。

2.のSendMessageで戻り値を調べると0なのでFalse。
TB_GETITEMRECTは取得できていないようです。

ToolStripはTB_GETITEMRECTでは取得できないのでしょうか?

ToolStripがのっているプログラムのソース等はありませんため詳細なバージョン等は不明です。

よろしくお願いいたします。
■No30420に返信(Atchoumさんの記事)
> ToolStrip上のボタンを別アプリでクリックするにはどうしたらよいでしょうか。

IAccessible インターフェイスの accDoDefaultAction メソッドを
試してみては如何でしょう。

DelphiでIAccessibleインターフェース試してみたいと思います。
情報ありがとうございました。
解決済み!
試してみたら意外と簡単にできました。

AccessibleObjectFromWindowでツールバーのハンドルからIAccessibleを取得し、
accDoDefaultAction(取得したいコントロールのインデックス)でOKでした。
Delphiのコードですが載せときます。ありがとうございました。

Ret : HRESULT;
oAccessible : IAccessible;
hToolBar : HWND;

Ret := AccessibleObjectFromWindow(hToolBar, OBJID_CLIENT, IID_IAccessible, oAccessible);

if Ret = S_OK then begin
varChild := 3;//ツールバーの3番目のコントロールをクリックする
oAccessible.accDoDefaultAction(varChild);
end;
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板