![]() |
Statusbar auslesen
Hallo,
ich will per sendmessages die statusbar des VLC players auslesen, folgendes hab ich versucht:
Delphi-Quellcode:
nur jedesmal wenn ich den code ausführe geht der VLC player hopps :(
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; MfG - Ghost007 |
Re: Statusbar auslesen
//sry, was falsch verstanden :o)
|
Re: Statusbar auslesen
Das geht so nicht. Siehe hier:
![]() |
Re: Statusbar auslesen
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.
|
Re: Statusbar auslesen
Hi,
ich habs jetzt mal anders versucht ... doch irgendwie hab ich glaub ich noch irgendwo den wurm drin.
Delphi-Quellcode:
Wo liegt mein denkfehler?
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; MfG - Ghost007 |
Re: Statusbar auslesen
Zitat:
was willst du denn hinter den Text noch auslesen, das length + 1 kannst du dir sparen. WriteProcessMemory kennst du dir IMHO auch noch sparen. |
Re: Statusbar auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
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; |
Re: Statusbar auslesen
Danke erstmal, die method von toms funktioniert.
Werde die mir nun ma schritt für schritt anguggen und das nachvollziehen ;) MfG - Ghost007 |
Re: Statusbar auslesen
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 |
Re: Statusbar auslesen
Hallo, siehe meine Funktion oben. Dort kannst du die Pannel Nummer übergeben.
Delphi-Quellcode:
function GetStatusBarText(hStatusBarHandle: HWND; PanelNumber: Integer): string;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz