AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FindWindow von Pfad

Ein Thema von Premaider · begonnen am 2. Mai 2012 · letzter Beitrag vom 3. Mai 2012
Antwort Antwort
Seite 2 von 2     12   
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: FindWindow von Pfad

  Alt 3. Mai 2012, 03:01
Geht es nur darum, zu einem einzelnen, festgelegten Programm den aktuellen Fenstertitel zu ermitteln, insofern dieses Programm gestartet worden ist ? Dann geht das auch wesentlich direkter, also ohne aufwändiges Filtern diverser Listen:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  PID: DWORD;
  ExePath: string;
  EnumInfo: TEnumInfo;
begin
  // vor dem ButtonClick ein Explorerfenster öffnen
  // oder hier ein anderes Programm eintragen und starten
  ExePath := 'C:\WINXP\Explorer.exe';
  PID := PathToPid(ExePath);
  if PID = 0 then
  begin
    ShowMessage(Exepath + #13#10'Process not found!');
    exit;
  end;
  EnumInfo := FindMainWindow(PID);
  with EnumInfo do
    ShowMessage(format('Exe: %s'#13#10 +
      'ProcessID: %d'#13#10 +
      'Window Handle: %d'#13#10 +
      'Window Class Name: %s'#13#10 +
      'Window Title: "%s"', [ExePath, ProcessID, WindowHandle, ClassName, WindowTitle]));
end;
Kompletter Code im Anhang.

Komplizierter wird es allerdings etwas, wenn gleichzeitig mehrere Instanzen desselben Programms geladen sein sollten, da diese dann natürlich alle unterschiedliche PIDs und unterschiedliche Fensterhandles haben, wobei jede Instanz auch ihren eigenen Titel im sichtbaren Fenster aufweist.
Angehängte Dateien
Dateityp: pas Unit1.pas (3,0 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#12

AW: FindWindow von Pfad

  Alt 3. Mai 2012, 16:21
Geht es nur darum, zu einem einzelnen, festgelegten Programm den aktuellen Fenstertitel zu ermitteln, insofern dieses Programm gestartet worden ist ? Dann geht das auch wesentlich direkter, also ohne aufwändiges Filtern diverser Listen:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  PID: DWORD;
  ExePath: string;
  EnumInfo: TEnumInfo;
begin
  // vor dem ButtonClick ein Explorerfenster öffnen
  // oder hier ein anderes Programm eintragen und starten
  ExePath := 'C:\WINXP\Explorer.exe';
  PID := PathToPid(ExePath);
  if PID = 0 then
  begin
    ShowMessage(Exepath + #13#10'Process not found!');
    exit;
  end;
  EnumInfo := FindMainWindow(PID);
  with EnumInfo do
    ShowMessage(format('Exe: %s'#13#10 +
      'ProcessID: %d'#13#10 +
      'Window Handle: %d'#13#10 +
      'Window Class Name: %s'#13#10 +
      'Window Title: "%s"', [ExePath, ProcessID, WindowHandle, ClassName, WindowTitle]));
end;
Kompletter Code im Anhang.

Komplizierter wird es allerdings etwas, wenn gleichzeitig mehrere Instanzen desselben Programms geladen sein sollten, da diese dann natürlich alle unterschiedliche PIDs und unterschiedliche Fensterhandles haben, wobei jede Instanz auch ihren eigenen Titel im sichtbaren Fenster aufweist.
Sicher, das das mit Delphi7 funktioniert ?

Bei mir kommen dann diese Fehlermeldungen.
Delphi-Quellcode:
[Fehler] Unit1.pas(91): Undefinierter Bezeichner: 'TEnumInfo'
[Fehler] Unit1.pas(97): Undefinierter Bezeichner: 'PathToPid'
[Fehler] Unit1.pas(103): Undefinierter Bezeichner: 'FindMainWindow'
[Fehler] Unit1.pas(109): Undefinierter Bezeichner: 'ProcessID'
[Fehler] Unit1.pas(109): Undefinierter Bezeichner: 'WindowTitle'
[Fehler] Unit1.pas(112): '.' erwartet, aber ';' gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#13

AW: FindWindow von Pfad

  Alt 3. Mai 2012, 16:36
Ja, das wird bestimmt funktionieren,
nur wirst du dir erstmal die fehlenden Funktionen und Definitionen suchen müssen.

Angefangen mit Hier im Forum suchenFindMainWindow (wo sich auch TEnumInfo finden läßt).

Hatte auf die Schnelle ein FindMainWindow gefunden, welches zwar einen DWORD, anstatt TEnumInfo zurückgibt, aber wenn man genau hinguckt, wird intern nur ein Teil des TEnumInfo ans Result weitergegeben ... odrt kann man es so umbauen, daß das gesamte TEnumInfo ins Result wanders.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:42 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