AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Statusbar auslesen

Ein Thema von ghost007 · begonnen am 30. Apr 2008 · letzter Beitrag vom 8. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#1

Statusbar auslesen

  Alt 30. Apr 2008, 18:17
Hallo,
ich will per sendmessages die statusbar des VLC players auslesen, folgendes hab ich versucht:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 var
  sb:THandle;
  length: Integer;
  item: PChar;
begin
 sb := FindWindow('wxWindowClassNR','VLC media player');
 sb := FindWindowEx(sb, 0, 'msctls_statusbar32', nil);
 //Erstes Item
 length := SendMessage(sb, SB_GETTEXTLENGTH, 0, 0);
 GetMem(item, length + 1);
 SendMessage(sb, SB_GETTEXT, 0, Integer(item));
 Label4.Caption := item;
 FreeMem(item);
 //DONE
end;
nur jedesmal wenn ich den code ausführe geht der VLC player hopps

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#2

Re: Statusbar auslesen

  Alt 30. Apr 2008, 18:28
//sry, was falsch verstanden :o)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Statusbar auslesen

  Alt 30. Apr 2008, 19:16
Das geht so nicht. Siehe hier: http://www.michael-puff.de/Artikel/2...sComCtrl32.php
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Statusbar auslesen

  Alt 30. Apr 2008, 19:41
Falls du nur das 1. Feld der Statusbar auslesen möchtest, (beim VCL Player steht da die Laufzeit des Videos) dann kannst du es auch einfach mit WM_GETTEXT auslesen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#5

Re: Statusbar auslesen

  Alt 1. Mai 2008, 23:21
Hi,
ich habs jetzt mal anders versucht ... doch irgendwie hab ich glaub ich noch irgendwo den wurm drin.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 const
  BufferSize = 1024;
 var
  ProcessID: DWORD;
  Proc,BytesR, BytesW: Cardinal;
  MemOwn, MemFor : Pointer;
  length:integer;
  sb:THandle;
begin
 //StatusbarHandle ermitteln
 sb := FindWindow('wxWindowClassNR','VLC media player');
 sb := FindWindowEx(sb, 0, 'msctls_statusbar32', nil);
 //Done
 //ProcessID + ProcessHandle ermitteln
 GetWindowThreadProcessId(sb, @ProcessId);
 Proc := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
 //Done
 //Speicher Reservieren
 MemOwn := VirtualAlloc(nil, BufferSize, MEM_COMMIT, PAGE_READWRITE);
 MemFor := VirtualAllocEx(Proc, nil, BufferSize, MEM_COMMIT, PAGE_READWRITE);
 //Done
 //In Fremdanwendung schreiben und kopieren
 WriteProcessMemory(Proc, MemFor, MemOwn, BufferSize, BytesW);
 SendMessage(sb,SB_GETTEXT, 0, LPARAM(MemFor));
 length:= SendMessage(sb,SB_GETTEXTLENGTH,0,0);
 ReadProcessMemory(Proc, MemFor, MemOwn, BufferSize, BytesR);
 //Done
 //Daten auslesen
 Label4.Caption := PChar(Cardinal(MemOwn) + length + 1);
 //Done
 //Reservierten Speicher wieder freigeben
 VirtualFreeEx(Proc, MemFor, 0, MEM_RELEASE);
 VirtualFree(MemOwn, 0, MEM_RELEASE);
 CloseHandle(Proc);
 //Done
end;
Wo liegt mein denkfehler?

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Statusbar auslesen

  Alt 2. Mai 2008, 21:42
Zitat von ghost007:
Hi,
ich habs jetzt mal anders versucht ... doch irgendwie hab ich glaub ich noch irgendwo den wurm drin.

Delphi-Quellcode:
...
 Label4.Caption := PChar(Cardinal(MemOwn) + length + 1);
...
Wo liegt mein denkfehler?

MfG - Ghost007
Hi,

was willst du denn hinter den Text noch auslesen, das length + 1 kannst du dir sparen.
WriteProcessMemory kennst du dir IMHO auch noch sparen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Statusbar auslesen

  Alt 2. Mai 2008, 21:57
Hallo, ich hab's mal so gemacht:

Delphi-Quellcode:
uses
  CommCtrl, uProcessMemMgr;

function GetStatusBarText(hStatusBarHandle: HWND; PanelNumber: Integer): string;
var
  PMM: TProcessMemMgr;
  NumberOfPanels, Len: Integer;
  PrcBuf: PChar;
  PartText: string;
begin
  if hStatusBarHandle = 0 then Exit;
  PMM := CreateProcessMemMgrForWnd(hStatusBarHandle);
  try
    NumberOfPanels := SendMessage(hStatusBarHandle, SB_GETPARTS, 0, 0);
    if PanelNumber < NumberOfPanels then
    begin
      Len := LOWORD(SendMessage(hStatusBarHandle, SB_GETTEXTLENGTH, PanelNumber, 0));
      if Len > 0 then
      begin
        PrcBuf := PMM.AllocMem(Len + 1);
        SendMessage(hStatusBarHandle, SB_GETTEXT, PanelNumber, Longint(PrcBuf));
        Result := PMM.ReadStr(PrcBuf);
        PMM.FreeMem(PrcBuf);
      end
      else
      begin
        Result := '';
      end;
    end;
  finally
    PMM.Free;
  end;
end;
Angehängte Dateien
Dateityp: pas uprocessmemmgr_141.pas (10,9 KB, 25x aufgerufen)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#8

Re: Statusbar auslesen

  Alt 2. Mai 2008, 22:06
Danke erstmal, die method von toms funktioniert.
Werde die mir nun ma schritt für schritt anguggen und das nachvollziehen

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Haeger23

Registriert seit: 11. Okt 2006
10 Beiträge
 
#9

Re: Statusbar auslesen

  Alt 8. Mai 2008, 16:38
Hallo,

ich hoffe es ist kein Problem wenn ich mit einsteige.
Sitze nämlich grad an einem ähnlichen Problem.

Undzwar möchte ich auch gern an den Inhalt des
Statusbar einer anderen Anwendung allerdings an den dritten Eintrag.

Geht das überhaupt?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: Statusbar auslesen

  Alt 8. Mai 2008, 16:47
Hallo, siehe meine Funktion oben. Dort kannst du die Pannel Nummer übergeben.
function GetStatusBarText(hStatusBarHandle: HWND; PanelNumber: Integer): string;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz