AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme beim Auslesen von Festertext
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Auslesen von Festertext

Ein Thema von Helmi · begonnen am 5. Jan 2015 · letzter Beitrag vom 5. Jan 2015
 
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Probleme beim Auslesen von Festertext

  Alt 5. Jan 2015, 17:27
Hallo,

mit folgender Procedure starte ich ein Programm und lass mir dessen Handle zurückgeben:

Delphi-Quellcode:
function start_process(const FileName: String): THandle;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;

begin
  //Rückgabewert vordefinieren
  Result := 0;

  If not FileExists(FileName) then
    exit;

  //Variable mit nullen auffüllen und Größe setzen
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb := SizeOf(TStartupInfo);

  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_HIDE;

  If CreateProcess(nil, PChar(FileName + #0), nil, nil, false, 0, nil, nil,
                    StartupInfo, ProcessInfo) then
    begin
      If WaitForInputIdle(ProcessInfo.hProcess, INFINITE) = 0 then
        Result := ProcessInfo.hProcess;
    end;
end;
Den Fenstertext lasse ich mir mit einer von den 2 nachfolgenden Proceduren ausgeben:

#1:
Delphi-Quellcode:
function WindowText(const WHandle: THandle): String;
var
  length: LongInt;
  Title : String;

begin
  Result := '';

  If WHandle <= 0 then
    exit;

  length := GetWindowTextLength(WHandle) + 1;
  SetLength(Title, length);

  GetWindowText(WHandle, PChar(Title), length);
  Result := TrimRight(Title);
end;
#2:
Delphi-Quellcode:
function WindowText(Wnd: HWND): String;

  function EnumWindowsProc(wHandle: HWND; StringList: TStringList): Bool; stdcall;
  var
     Title: array[0..255] of Char;
  begin
    Result := true;

    GetWindowText(wHandle, Title, length(Title));

    If IsWindowVisible(wHandle) then
      StringList.AddObject(String(Title), TObject(wHandle));
  end;

var
  i : Integer;
  Window_HND: HWND;
  StringList: TStringList;

begin
  Result := '';

  If Wnd = 0 then
    exit;

  StringList := TStringList.Create;

  try
    EnumWindows(@EnumWindowsProc, Integer(StringList));

    for i := 0 to Pred(StringList.Count) do
      begin
        Window_HND := HWND(StringList.Objects[i]);

        If Window_HND = Wnd then
          begin
            Result := StringList.Strings[i];

            break;
          end;
      end;
  finally
    FreeAndNil(StringList);
  end;
end;
Ich lade insgesamt 2 Programme, speichere mir jeweils die Handles und lasse mir dann den Fenstertext ausgeben.

Bei dem 1. Programm, das nur die Haupt-Form besitzt (beide Programme sind von mir), wird von beiden Proceduren der richtige Text ausgegeben.
Beim 2. Programm, dass neben der Haupt-Form noch eine 2. Form besitzt, bekomm ich bei der 1. Procedure den Fenstertext der 2. Form (nicht den der Hauptform) und bei der 2. Procedure nur den leeren Rückgabewert der Procedure selbst (also nichts).

Wie kann ich sauber den (richtigen) Fenstertext auslesen?

[edit]
warum bei der 2. Procedure nichts rückgemeldet wird, hab ich jetzt rausgefunden:

blende ich diese If-Abfrage aus:
Delphi-Quellcode:
// If IsWindowVisible(wHandle) then
      StringList.AddObject(String(Title), TObject(wHandle));
so erhalte ich das gleiche, wie bei der 1. Procedure - nämlich den Text der 2. Form
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi ( 5. Jan 2015 um 17:38 Uhr)
  Mit Zitat antworten Zitat
 


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 10:48 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