AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi PID eines prozesses merken, Anwendung ähnlich Taskleiste
Thema durchsuchen
Ansicht
Themen-Optionen

PID eines prozesses merken, Anwendung ähnlich Taskleiste

Ein Thema von LokutusvB · begonnen am 31. Jul 2009 · letzter Beitrag vom 11. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3      
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#11

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 5. Aug 2009, 07:58
Ich hoffe ich nerve nicht , aber die Probleme gehen weiter.

Leider konnte ich im Netz nichts finden. Gibt es eine einfache Möglichkeit, alle Fensterhandle zu ermitteln und z.B. in einer TStringList zu speichern?

ich habe große Probleme, nach dem Fensterhandle zu suchen, wenn das Programmfenster des externen Programmes minimiert ist, das Hauptprogramm mit den Buttons den Fokus hat oder aber ein Unterprogramm des externen Programmes geöffnet ist.

Ich dachte beim Unterprogramm könnte ich einfach mittels
aktHndl := GetTopWindow(GetDesktopWindow);
wTmpH := GetParent(aktHndl);
das Handle des externen Hauptfensters ermitteln, aber weit gefehlt. Es liefert mir ständig ein anderes Handle zurück. Und im falle des Fokus auf meinen "Taskmamager" bin ich mir auch nicht ganz sicher, ob ich so einfach nach dem handle des externen Hauptfensters suchen kann, was ist z.B. wenn es minimiert oder gar "unsichtbar" ist, da ein Unterprogramm aktivi ist, was wiederum vielleicht minimiert ist?

Deswegen wäre es mir an dieser Stelle lieb, wenn ich eine Möglichkeit hätte, alle aktuellen Fensterhandles des Systems zu ermitteln um dort dann einfach zu suchen, ob mein Handle mit von der Partie ist.
MFG
LokutusvB
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 5. Aug 2009, 08:11
Spontan fällt mir da MSDN-Library durchsuchenEnumWindows ein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#13

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 5. Aug 2009, 08:51
Danke, zusätzlich konnte ich noch EnumWindows & Co gekapselt finden. Das sollte weiter helfen.
MFG
LokutusvB
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#14

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 5. Aug 2009, 10:05
Der Fehler liegt bei mir .

Durch das Probieren mit EnumWindows bin ich drauf gekommen, daß die Handle schon noch existieren, FindWindowsEx jedoch 0 zurückliefern muß, da ich ja immer noch bei der Suche nach dem speziellen Fenstername gesucht habe. Nehme ich den raus, wird das Handle gefunden, auch wenn ein anderes Fenster aktiv ist bzw. ein Unterpgrogramm und der Timer kann nun entsprechend reagieren.

Durch die EnumWindows-Funktionen jedoch spare ich mir viel Auswertungskram und kann direkt die Liste durchsuchen.
MFG
LokutusvB
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#15

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 5. Aug 2009, 14:15
Eine Frage:

ich arbeite nun mit der EnumWindowsUnit, wie von mir schon verlinkt.

Nun kommt es vor, das ein externes Programm wiederum ein anderes externes Programm startet. Ist das der Fall, sieht man zwar in der Windows-Taskleiste unten noch den Eintrag, dieser ist aber disabled, bei einem Klick passiert nichts.

EnumWindows bzw. EnumTopLevelWindows aus der Unit kann dieses Fenster bzw.Handle nicht finden. Versuche ich das selbe mit FindWindowEx, wird das Handle jedoch erkannt, also ist da auch was da. Kann ich die EnumWindowsUnit irgendwie erweitern, das sie inaktive jedoch laufende Programme bzw. Fenster auch erkennt? So langsam schlaucht mir das echt zu sehr. Wenn die Probleme so weiter gehen, werde ich das wohl doch mit Threads lösen .
MFG
LokutusvB
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#16

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 6. Aug 2009, 10:54
Endlich funktioniert mal etwas und liefert mir sogar die passenden Handle zurück. Kann ich das noch irgendwie optimieren?

Delphi-Quellcode:
function TFormMainDlg.getTWHandle: HWND;
var
  tmpTW: HWND;
begin
  Result := 0;
  tmpTW := FindWindowEx(0, 0, 'abc', 'xyz');
  if (tmpTW = 0) then Exit;
  if (tmpTW = twH1) then begin
    tmpTW := FindWindowEx(0, twH1, 'abc', 'xyz');
    if (tmpTW = 0) then Exit;
    if (tmpTW = twH2) then begin
      tmpTW := FindWindowEx(0, twH2, 'abc', 'xyz');
      if (tmpTW = 0) then Exit;
      Result := tmpTW;
      Exit;
    end;
    if (tmpTW = twH3) then begin
       tmpTW := FindWindowEx(0, twH3, 'abc', 'xyz');
      if (tmpTW = 0) then Exit;
      Result := tmpTW;
      Exit;
    end;
  end;
  // analog twH2 und 3
  Result := tmpTW;
end;
MFG
LokutusvB
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
287 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 6. Aug 2009, 12:21
ungefähr so insgesamt?

Delphi-Quellcode:
function getTWHandle(twH1,twH2,twH3 : THandle) : THandle;
function checkHandle(hToCheck : THandle) : boolean;
begin // muss true sein wenn hToCheck nicht schon in Handle123 registriert ist
  result := (twH1 <> hToCheck) and (twH2 <> hToCheck) and (twH3 <> hToCheck);
end;
begin
  result := 0;
  repeat
    result := FindWindowEx(0,result,'Notepad','Unbenannt - Editor');
  until (result = 0) or checkHandle(result);
end;
(Ich checkte das mal schnell für drei gleiche NotePad-Aufrufe).
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#18

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 6. Aug 2009, 12:36
Ok, dann warte ich so lange^^.

Ist es eigentlich egal, ob man THandle oder HWND vereinbart?
MFG
LokutusvB
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
287 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 6. Aug 2009, 12:46
Ich schrieb "checkte", das ist "past tens", sozusagen auch die Vergangenheitsform des Verbes *g*.


Zitat von LokutusvB:
Ist es eigentlich egal, ob man THandle oder HWND vereinbart?
imo müsste das eigentlich egal sein.
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#20

Re: PID eines prozesses merken, Anwendung ähnlich Taskleiste

  Alt 6. Aug 2009, 12:52
Oh, jetzt wo du es sagst, da habe ich doch wirklich das "t" überlesen *g*.

Na dann danke schön für die Optimierung .
MFG
LokutusvB
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 01:43 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