![]() |
mit dem Programmname an den Fenstertitel heran kommen?
Hallo Alle!
Wie kann ich an Hand des Dateinamens ein Programm mit Fenster in den Fordergrund bringen? Wie man ein Fenster in den Fordergrund bringt ist mir bekannt. Dafür brauche ich den Fenstertitel. Nur wie komme ich mit dem Programmname an den Fenstertitel heran? Gruß Heike |
Re: mit dem Programmname an den Fenstertitel heran kommen?
|
Re: mit dem Programmname an den Fenstertitel heran kommen?
Schau dir mal das an! So in der Art wird es gehen.
Delphi-Quellcode:
function GetStatusText(wndWindow: THandle;
StatusBarClassName: string; PanelIndex: Byte): string; var WndStatusBar: THandle; StatusBarText: array[0..$FFF] of Char; begin Result := ''; WndStatusBar := FindWindowEx(wndWindow, 0, PChar(StatusBarClassName), nil); if WndStatusBar <> 0 then begin if PanelIndex = 0 then SendMessage(WndStatusBar, WM_GETTEXT, $FFF, Longint(@StatusBarText)) else SendMessage(WndStatusBar, SB_GETTEXT, PanelIndex, Longint(@StatusBarText)); Result := StrPas(StatusBarText); end; end; procedure TForm1.Button1Click(Sender: TObject); begin // Read statustext from Internet Explorer label1.Caption := GetStatusText(FindWindow('IEFrame', nil), 'msctls_statusbar32', 0); // Also works with a TStatusBar Label2.Caption := GetStatusText(Form1.Handle, 'TStatusBar', 0); end; uses CommCtrl, uProcessMemMgr { from Download }; 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; // Example to read the statusbar text of the explorer.exe // Beispiel, um den Statusbar text des explorers auszulesen procedure TForm1.Timer1Timer(Sender: TObject); var hWindow, hStatusBarHandle: HWND; begin hWindow := FindWindow('ExploreWClass', nil); if FensterHandle = 0 then Exit; hStatusBarHandle := FindWindowEx(hWindow, 0, 'msctls_statusbar32', nil); label1.Caption := GetStatusBarText(hStatusBarHandle, 2); end; |
Re: mit dem Programmname an den Fenstertitel heran kommen?
Hallo.
ich habe mir mal folgendes zusammen gebaut:
Delphi-Quellcode:
Aufruf mit
function GetText(Wnd: HWND): string;
var textlength: Integer; Text: PChar; begin textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); if textlength = 0 then Result := '' else begin GetMem(Text, textlength + 1); SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text)); Result := Text; FreeMem(Text); end; end;
Delphi-Quellcode:
mit dem Programm notepad klappt die ganze Sache aber mit anderen Programmen nicht. Was mache ich falsch?
procedure TForm1.Button1Click(Sender: TObject);
var hWindow: HWND; begin hWindow := FindWindow('notepad', nil); Label2.Caption := GetText(hWindow); end; Gruß Heike |
Re: mit dem Programmname an den Fenstertitel heran kommen?
Zitat:
das war wohl eher Zufall, da bei Notepad der Klassenname des Fensters mit dem Programmnamen übereinstimmt. ![]() |
Re: mit dem Programmname an den Fenstertitel heran kommen?
Zitat:
vielen Dank auch, der Tipp war klasse. Genau sowas hatte ich gesucht. Gruß Heike |
Re: mit dem Programmname an den Fenstertitel heran kommen?
Anhand der Adresse den Namen des Empfängers meines Briefes rausfinden! (<-- in Klammern - es handelt sich um ein Hochhaus - in Klammern -->) :mrgreen:
Bitsetter hat es ja schon angesprochen. Ich würde empfehlen, den Fensterstil zumindest als Anhaltspunkt zu nehmen, ob das Fenster überhaupt in der Taskleiste dargestellt wird. Am besten ist es sowas immer sehr speziell für das Zielprogramm (ich gehe mal davon aus, daß es da eines gibt) zu schreiben und nicht zu generisch, weil es eben für eine generische Lösung zuviele unbekannte Variablen gibt. |
Re: mit dem Programmname an den Fenstertitel heran kommen?
Zitat:
der Hintergrund ist eigentlich ein ganz Anderer. Da muss ich etwas ausholen. Ich habe hier eine Steuersoftware für CNC- Drehbänke. Da ist eine abgespeckte WIN XP- Version dabei. Das heißt, keine Oberfläche, keine Taskleiste usw. Man installiert die Software und Windows wird sofort mit installiert. Frag nicht nach dem wieso oder warum. Jetzt bin ich auf die Idee gekommen, eine eigene Shell zu schreiben. Das klappt auch ganz gut. Die Shell läuft prima. Jetzt bin ich gerade dabei einen Ersatz für die Taskleiste zu schreiben. Genau da habe ich etwas Probleme. Gruß Heike |
Re: mit dem Programmname an den Fenstertitel heran kommen?
Handelt es ich wirklich um eine abgespeckte Version oder ist nur nicht der Explorer als Shell eingetragen? Existiert Explorer.exe?
|
Re: mit dem Programmname an den Fenstertitel heran kommen?
Zitat:
Nein, der ist tatsächlich nicht dabei. Da ist nur, sagen wir mal, ein Grundwindows auf XP- Basis dabei. Es fehlt alles außer die Systemwiederherstellung. Für diesen speziellen Einsatz braucht man auch nicht mehr. Aber eine Shell wäre schon ganz nützlich. Gruß Heike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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