【[delphi-users:2799] Re: Re:ToolbarWindow32クラスのボタン状態取得】 へ
のレスです.
こんにちは.Mr.XRAYです.福士さん,どうもです.
>にTB_GETBUTTONではTBBUTTON構造体について相手側プロセスでの
>メモリの確保が必要なのではないかという指摘があります
ということでやってみました.
ToolbarWindow32クラスの適当なアプリを思いつかないので,
Windows の通知領域のテキストを取得してみました.
共有メモリは,手抜きで,以下の,Halbow資料館のコードを使いました.
http://mrxray.on.coocan.jp/Halbow/VCL08.html#VChap8-3
implementation
uses CommCtrl, CommonMemoryUnit;
{$R *.dfm}
//----------------------------------------------------------------------
// TB_GETBUTTONメッセージの使用例
//
// タスクトレイの通知領域のテキストを取得
// TTBButton.dwDataが空でない時に取得
// Halbow資料館の共有メモリクラスのコード(CommonMemoryUnit.pas)を使用
//
// 動作確認環境 Windows XP(SP3) + Delhi 5(UP1) Pro
// Windows 7 64bit では 64bit版のEXEを作成する必要がある
// (CommonMemoryUnit.pasの変数numReadの型をNativeUIntに変更する)
//---------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
AppClassName : String;
h1 : HWND;
BtnCount : integer;
i : Integer;
BtnInfo : TTBButton;
CommMem : TCommMemNT;
InfoSize : Integer;
IdNo : Integer;
TextLength : Integer;
Buffer : array[0..MAX_PATH] of Char;
begin
AppClassName := 'Shell_TrayWnd';
h1 := FindWindow('Shell_TrayWnd', nil);
h1 := FindWindowEx(h1, 0, 'TrayNotifyWnd', nil);
h1 := FindWindowEx(h1, 0, 'SysPager', nil);
h1 := FindWindowEx(h1, 0, 'ToolbarWindow32', nil);
if h1 = 0 then Exit;
BtnCount := SendMessage(h1, TB_BUTTONCOUNT, 0, 0);
for i := 0 to BtnCount - 1 do begin
InfoSize := SizeOf(TTBBUTTON);
CommMem := TCommMemNT.Create(h1, InfoSize);
SendMessage(h1, TB_GETBUTTON, i, LPARAM(CommMem.MemPtr));
CommMem.Read(0, @BtnInfo, InfoSize);
if BtnInfo.dwData <> 0 then begin
IdNo := BtnInfo.idCommand;
CommMem.Free;
CommMem := TCommMemNT.Create(h1, MAX_PATH);
TextLength := SendMessage(h1, TB_GETBUTTONTEXT, IdNo,
LPARAM(CommMem.MemPtr));
FillChar(Buffer, SizeOf(Buffer), #0);
CommMem.Read(0, @Buffer, TextLength * SizeOf(Buffer[0]));
Memo1.Lines.Add(IntToStr(IdNo) + ' ' + Buffer);
CommMem.Free;
end;
end;
end;
MLホームページ:
http://www.freeml.com/delphi-users
----------------------------------------------------------------------
最強の基地を築け!【ロボ・ウォーズ】
http://ad.freeml.com/cgi-bin/sa.cgi?id=iXg44
------------------------------------------------------[freeml byGMO]--