掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
別アプリのステータスバーの文字列を取得するには? (ID:12296)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すみません。 最近つかってないので間違えました &Fが4ビットだということを忘れていました (^_^; 上に書かれているMr.XRAYさんのTCommonMemory 使うと 他のソフトへアクセスできました。 Class[msctls_statusbar32]が使われているもので試しましたら IE, outolook,Explorer は文字取得できました。 MicrosoftDocument Explorer では、取得できなかったです。 ( SB_GETTEXTLENGTH で、長さが0がかえってくるようです) procedure TForm1.Button1Click(Sender: TObject); const SB_GETTEXT = WM_USER+2; SB_GETTEXTLENGTH = WM_USER+3; SB_GETPARTS = WM_USER+6; SB_ISSIMPLE = WM_USER+14; var Buffer : PChar; Handle, MemHdl, i , PanelCount ,BufferSize ,TextLen : integer; SimpleMode : Boolean; s : string; var TempCM : TCommonMemory; begin s := ''; Handle := StatusBar1.Handle; SimpleMode := (SendMessage(Handle,SB_ISSIMPLE,0,0)<>0); PanelCount := SendMessage(Handle,SB_GETPARTS,0,0); for i := 0 to PanelCount-1 do begin BufferSize := 1 + LOWORD(SendMessage(Handle,SB_GETTEXTLENGTH,i,0)); TempCM := GetCommonMemory(Handle,BufferSize); try GetMem(Buffer,BufferSize+1); try if (BufferSize = 1) then Buffer[0] := Char(0) else if (BufferSize > 1) then begin TextLen := LOWORD(SendMessage(Handle,SB_GETTEXT,i,LPARAM(TempCM.MemPtr))); if (BufferSize > TextLen) then begin TempCM.Read(0,Buffer,TextLen); Buffer[TextLen] := Char(0) end else begin ShowMessage( Format( 'Handle[%d]' + #13+#10 + ' Roop[%d/%d]' + #13+#10 + 'エラー:BufferSize[%d] < TextLen[%d] ' ,[ Handle , i+1 ,PanelCount ,BufferSize,TextLen ])); Buffer[0] := Char(0); end; end; s := s + Buffer + #13+#10; if (SimpleMode) then Break; finally FreeMem(Buffer); end; finally TempCM.Free; end; end; // for ShowMessage(s); end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.