掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
別アプリのツールバーのボタンを押下するには (ID:42086)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちわ。 早速のレスありがとうございます。 てさん ご指摘ありがとうございます。 自分の中でSendMessageとPostMessageあいまいでした。 SendMessage→同期 PostMessage→非同期 ですね。 Mr.XRayさん いつもお世話になっています。 サンプルありがとうございました。 1回めのレス拝見してから、XRrayさんに甘えてちゃいかんなと思いがんばってみましたよ! もちろん、以前教えていただいた TCommMemNTを使いました。 そこで質問なんですが、共有メモリを使ってメッセージを送らなければいけないかどうか、どのように判断したらよいでしょうか? 別アプリに対してのメッセージを送るときはほぼ共有メモリがからむとおもっていいのでしょうか。 自アプリで取得したTB_GETITEMRECTで取得した値を別アプリに送信したところで、別アプリにとっては「寝耳に水」ってことはわかるんですけど、別アプリ、たとえば計算機のハンドルを取得してキーを押すときには共有メモリは必要ないですよね。 ------------------------------------------ ツールバーのあるテスト用フォームのソース TCOOLBarの上にTToolBarを乗せています。 ToolBarの上にToolButton3個設置。 ----------------------------------------- unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ToolWin, ImgList; type TForm2 = class(TForm) CoolBar1: TCoolBar; ToolBar2: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ImageList1: TImageList; procedure ToolButton1Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure ToolButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.ToolButton1Click(Sender: TObject); begin showmessage('3番目のボタンクリック!'); end; procedure TForm2.ToolButton2Click(Sender: TObject); begin showmessage('1番目のボタンクリック!'); end; procedure TForm2.ToolButton3Click(Sender: TObject); begin showmessage('2番目のボタンクリック!'); end; ------------------------------------------ クリック送信するアプリケーションのソース ------------------------------------------ procedure TForm1.Button14Click(Sender: TObject); var hCalc,hToolBar,hCoolBar:HWND; {ハンドル} CM: TCommMemNT; r:TRect; intSize:integer; begin //対象ハンドルを取得 hCalc:=FindWindow(nil,'Form2'); hCoolBar:=FindWindowEx(hCalc,0,'TCoolBar',0); hToolBar:=FindWindowEx(hCoolBar,0,'TToolBar',0); if hToolBar <> 0 then begin //共有メモリクラスを生成 intSize := Sizeof(r); CM := TCommMemNT.Create(hToolBar, intSize); try //初期化 r.Left := 0; r.Top := 0; r.Right := 0; r.Bottom := 0; CM.Write(0, @r, intSize); //共有メモリに転送データを格納 //ツールボタンは0番目から始まる。2番目のボタンを押下したいので1とする。 SendMessage(hToolBar, TB_GETITEMRECT, 1, Lparam(CM.MemPtr)); //共有メモリから読み出し CM.Read(0,@r,Sizeof(r)); //読み出した値でクリックイベントを送信 PostMessage(hToolBar,WM_LBUTTONDOWN,0,MakeLParam(r.Left + 2,r.Top +2)); PostMessage(hToolBar,WM_LBUTTONUP,0,MakeLParam(r.Left + 2,r.Top + 2)); //「2番目のボタンクリック!」が表示される。 finally CM.Free; end; end; end; 結構検索して似たようなトピックがあっても、質問された方が「できました!ありがとうございます」で終わっていることが 多く、どうやってできたのかとか、サンプルとかが表示されていなくて困ったりしたので、 長くなりますが、なるべく自分のソースも乗せようと思います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.