AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi FensterHandle über den Prozess ermitteln

FensterHandle über den Prozess ermitteln

Ein Thema von Asatru · begonnen am 13. Apr 2009 · letzter Beitrag vom 15. Apr 2009
Antwort Antwort
Seite 1 von 3  1 23   
Asatru

Registriert seit: 30. Mai 2007
Ort: Leipzig
78 Beiträge
 
#1

FensterHandle über den Prozess ermitteln

  Alt 13. Apr 2009, 10:45
Guten Tag und frohe Ostern,

Hab mal wieder eine kleine Frage, nur leider wees ich nicht ganz wie ich sie formulieren soll. Ich habe ein Programm eben mehrmals auf dem Rechner laufen kann und besitzt auch immer ein anderen Namen. Also schätze ich mal das findwindow dann rausfällt.

Zum testen habsch folgenden Code bis jetzt

Delphi-Quellcode:
  procedure TForm1.Label1Click(Sender: TObject);
var
  handle1,handle2: HWND;
  x,y: String;
begin
  handle1 := FindWindow('wxWindowClassNR', '[123]WheresMyChar');
  handle1 := FindWindowEx(handle1, 0, 'wxWindowClassNR', 'ID_PANEL1');
  handle1 := FindWindowEx(handle1, 0, 'wxWindowClassNR', 'ID_PANEL2');
  handle1 := GetDlgItem(handle1, 532);

  handle2 := FindWindow('wxWindowClassNR', '[123]WhersMyChar');
  handle2 := FindWindowEx(handle2, 0, 'wxWindowClassNR', 'ID_PANEL1');
  handle2 := FindWindowEx(handle2, 0, 'wxWindowClassNR', 'ID_PANEL2');
  handle2 := GetDlgItem(handle2, 534);

  if handle1 and handle2 <> 0 then
  begin
    x := PCHar('x: ' + GetWinText(handle1));
    y := PCHar(' y: ' + GetWinText(handle2));
    //Hier wird Code später weitergeführt zur auflistung der Daten

  end;
end;
Dieser Test lief wunderbar. Nun möchte ich mir aber das HWND nicht anhand des Textes holen sondern anhand des Prozesses (Beschreibung) Weil dieser immer gleich ist und der Inhalt von [ und ] immer anders sein kann und er soll es solange wiederholen bis eben alle gefunden wurden.


Hoffe ihr konntet mich verstehen, was mein Vorhaben ist!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: GetDlgItem

  Alt 13. Apr 2009, 10:55
Wie wäre es mit EnumWindows + GetClassName?

// EDIT1:
Nebenbei: Wozu suchst du die selben Handles zweimal? Das ist doch das selbe wie so:
Delphi-Quellcode:
  handle1 := FindWindow('wxWindowClassNR', '[123]WheresMyChar');
  handle1 := FindWindowEx(handle1, 0, 'wxWindowClassNR', 'ID_PANEL1');
  handle1 := FindWindowEx(handle1, 0, 'wxWindowClassNR', 'ID_PANEL2');
  handle2 := GetDlgItem(handle1, 534);
  handle1 := GetDlgItem(handle1, 532);
// EDIT2:
Und deine if-Abfrage ist Quatsch... So machst du ein logisches und mit den beiden Handles...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: GetDlgItem

  Alt 13. Apr 2009, 11:00
if (handle1 <> INVALID_HANDLE_VALUE) and (handle2 <> INVALID_HANDLE_VALUE) then
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Asatru

Registriert seit: 30. Mai 2007
Ort: Leipzig
78 Beiträge
 
#4

Re: GetDlgItem

  Alt 13. Apr 2009, 11:07
Danke für eure Hilfestellung, werd mal reinschnuppern

Ja ist neuland und da mach ich mir es eben lieber komplizierter als das es gar nicht funzt, werd aber besserung geloben

MFG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: GetDlgItem

  Alt 13. Apr 2009, 12:07
Äh, was hat das jett mit GetDlgItem zu tun? Dein eigentliches Problem scheint doch zu sein, das Fenster zu finden oder?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Asatru

Registriert seit: 30. Mai 2007
Ort: Leipzig
78 Beiträge
 
#6

Re: GetDlgItem

  Alt 13. Apr 2009, 18:05
Ich wusste leider nicht wie ich es nennen soll, deshalb habsch einfach mal nen namen aus der Funktion genommen die ich für wichtig hielt! Hoffe ist net so schlimm!

MFG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: GetDlgItem

  Alt 13. Apr 2009, 18:07
Schlimm nicht aber blöd. Un dim letzten Absatz hast du doch geschriben was du machen willst: Das fensterhanlde über den Prozess ermitteln.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Asatru

Registriert seit: 30. Mai 2007
Ort: Leipzig
78 Beiträge
 
#8

Re: FensterHandle über den Prozess ermitteln

  Alt 13. Apr 2009, 19:27
Habs mal geändert wie ein Mann

So hab mich mal ein bisschen von google beraten lassen aber im entdefekt bin ich bei 0

Auflisten der Fenster versteh ich teilweise
So sollte dann eingentlich die "Schleife" aussehen oder binsch aufn falschen Schiff?

Nur will mein Logisches Denken nicht verstehen wie ich das GetClassName in das EnumWindows einbinde.

Gibts vlt noch ein Gutes Tutorial (Auf Deutsch) was ich vlt übersehen habe im www und mich mit der Materie etwas mehr vertraut macht?


Schon mal danke im Voraus und noch frohe Ostern!

MFG


PS: OK 0 wäre bissle übertrieben, allgemein anzeigen ist mir klar aber direkt das suchen auf ein spezielles ist mir Bahnhof!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: FensterHandle über den Prozess ermitteln

  Alt 13. Apr 2009, 19:33
Zitat von Asatru:
Nur will mein Logisches Denken nicht verstehen wie ich das GetClassName in das EnumWindows einbinde.
Genau das steht in deinem ersten Link unter EnumWindows schon drin...

Nur dass du die Klasse nicht auflisten sondern mit deiner gesuchten Klasse vergleichen willst...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: FensterHandle über den Prozess ermitteln

  Alt 13. Apr 2009, 21:34
Also bei Delphi 5 gibt es die Unit TlHelp32, mit der sich ein Schnappschuss der Prozesse machen lässt. Aus dem Schnappschuß kann man dann Prozesse und deren Exe-Namen ermitteln. Natürlich auch die zugehörigen Fenster, aber ersters könnte ja schon reichen.

Hier mal ein Ausschnitt aus meinem Quellcode, denke das sollte fast schon reichen
Delphi-Quellcode:
uses TlHelp32, ShellApi;

var
  Handle : THandle;
  Continue : boolean;
  ProcEntry : TProcessEntry32;
  i : Integer;
begin
  i := 0;
  Handle := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0);
  ProcEntry.dwSize := Sizeof(ProcEntry);

  // gehe alle Prozesse durch (m.H. der TlHelp32 - Unit)
  Continue := Process32First(Handle, ProcEntry);

  while Continue do begin

    SetLength(TaskListe,i +1);

    // Daten zum Prozess ermitteln
    ProcID := ProcEntry.th32ProcessID;
    Threads := ProcEntry.cntThreads;
    ExeFile := ProcEntry.szExeFile;
    if ExeFile = '[System Process]then
      ExeFile := 'Leerlaufprozess';

    // Nächster Prozess
    Continue := Process32Next(Handle, ProcEntry);
    inc(i);
  end;
  CloseHandle(Handle);
zum Fenster durchlaufen mal der Ausschnitt:
Delphi-Quellcode:
var
  Current : hwnd;
  i : Integer;
begin
  // Erstes Fenster holen
  i := 0;
  Current := GetTopWindow(GetDesktopWindow);

  while Current <> 0 do begin

    // Daten zum Fenster ermitteln
    visible := IsWindowVisible(Current);
    iconic := IsIconic(Current);
    handle := Current;
    parent := GetParent(Current);
    GetWindowThreadProcessID(Current, ProcID);
    GetWindowText(Current, Titel, 255);
    GetClassName(Current, Klasse, 255);

    // Nächstes Fenster
    Current := GetNextWindow(Current,GW_HWNDNEXT);
    inc(i);
  end;
end;
Die hier erhaltenen Informationen (z.B. ProcID) kann man mit der Information aus dem vorherigen Beispiel verknüpfen.

Die Variablen, auf die zugewiesen wird, sehen im Beispiel sinnlos aus. Das liegt daran, das ich den Code aus einem Programm ausgeschnitten hab' (da wird auf ein dyn. Record-Array zugewiesen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:04 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