Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mit dem Programmname an den Fenstertitel heran kommen? (https://www.delphipraxis.net/98332-mit-dem-programmname-den-fenstertitel-heran-kommen.html)

smart 25. Aug 2007 09:49


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

Klaus01 25. Aug 2007 11:06

Re: mit dem Programmname an den Fenstertitel heran kommen?
 
Hallo Heike,

vielleicht findest Du hier und hier ein paar Ansätze.

Grüße
Klaus

Mark90 25. Aug 2007 11:17

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;

smart 25. Aug 2007 13:31

Re: mit dem Programmname an den Fenstertitel heran kommen?
 
Hallo.

ich habe mir mal folgendes zusammen gebaut:
Delphi-Quellcode:
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;
Aufruf mit
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hWindow: HWND;
begin
  hWindow := FindWindow('notepad', nil);
  Label2.Caption := GetText(hWindow);

end;
mit dem Programm notepad klappt die ganze Sache aber mit anderen Programmen nicht. Was mache ich falsch?

Gruß
Heike

bitsetter 25. Aug 2007 19:34

Re: mit dem Programmname an den Fenstertitel heran kommen?
 
Zitat:

Zitat von smart
mit dem Programm notepad klappt die ganze Sache aber mit anderen Programmen nicht. Was mache ich falsch?

Hi,

das war wohl eher Zufall, da bei Notepad der Klassenname des Fensters mit dem Programmnamen übereinstimmt. Hier gab es mal so einen ähnlichen Beitrag dazu. Ein Programm kann allerdings auch noch mehrere Fenster besitzen, dann müsste mann auch noch das Richtige davon finden.

smart 25. Aug 2007 20:10

Re: mit dem Programmname an den Fenstertitel heran kommen?
 
Zitat:

Zitat von bitsetter
Hi,

das war wohl eher Zufall, da bei Notepad der Klassenname des Fensters mit dem Programmnamen übereinstimmt. Hier gab es mal so einen ähnlichen Beitrag dazu. Ein Programm kann allerdings auch noch mehrere Fenster besitzen, dann müsste mann auch noch das Richtige davon finden.

Hi,

vielen Dank auch, der Tipp war klasse. Genau sowas hatte ich gesucht.

Gruß
Heike

Olli 25. Aug 2007 21:04

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.

smart 26. Aug 2007 09:06

Re: mit dem Programmname an den Fenstertitel heran kommen?
 
Zitat:

Zitat von Olli
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.

Hi,

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

mkinzler 26. Aug 2007 09:08

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?

smart 26. Aug 2007 09:27

Re: mit dem Programmname an den Fenstertitel heran kommen?
 
Zitat:

Zitat von mkinzler
Handelt es ich wirklich um eine abgespeckte Version oder ist nur nicht der Explorer als Shell eingetragen? Existiert Explorer.exe?

Guten Morgen.

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 09:40 Uhr.
Seite 1 von 2  1 2      

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