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 1 von 2  1 2      
Premaider

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

FindWindow von Pfad

  Alt 2. Mai 2012, 17:03
Ist es möglich bei Delphi7 einen Fensternamen eines Programmes anhand dessen .exe-Pfad herrauszufinden ? Wenn ja wie ?
Für einen fetzen Sourcecode wäre ich dankbar
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 17:20
Du kannst mit EnumWindows die Liste der Fenster durchgehen und mit GetWindowThreadProcessId herausfinden, zu welchem Prozess dieses Fenster gehört.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Premaider

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 17:30
Du kannst mit EnumWindows die Liste der Fenster durchgehen und mit GetWindowThreadProcessId herausfinden, zu welchem Prozess dieses Fenster gehört.
Ich verstehe die msdn-Beispiele nie wirklich. Könnest du mir ein Beispiel geben ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 18:05
Ähnliches Problem samt Lösungsvorschlägen: http://www.delphipages.com/forum/showthread.php?t=96891
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
Premaider

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 18:08
Das Problem ist dort wird die exe anhand des Handles gesucht. Ich suche das Handle anhand der exe
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 18:14
Der Vergleich ist aber doch derselbe. Ob Du nun von links oder von rechts kommst, dürfte doch egal sein.
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
Benutzerbild von jaenicke
jaenicke

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 18:16
Ich verstehe die msdn-Beispiele nie wirklich. Könnest du mir ein Beispiel geben ?
Was hast du denn versucht?

Beispiele findet man eigentlich bei Google genug:
Bei Google suchendelphi enumwindows
z.B. ausführlich kommentiert:
http://delphi.about.com/od/windowssh.../aa080304a.htm
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Premaider

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 18:28
Ich habe erst seit einem halben Jahr Informatik und seit ca. 1/4 Jahr programmieren. Es ist für mich schon schwer zu verstehen wie ich die beiden Funktionen überhaupt benutze und mit einander verbine. Für mich wäre es am einfachsten einen Sourcecode zu sehen in den ich nurnoch meinen Pfad einsetzten müsste und am Ende den Fensternamen herausbekommen würde
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 18:33
Dafür gibt es die Forensuche (Hier im Forum suchenEnumWindows, Hier im Forum suchenGetWindowThreadProcessID, Hier im Forum suchenCreateToolHelp32Snapshot). Wenn Du Dir eine Aufgabe suchst, die (momentan) einige Nummern zu hoch für Dich ist, so kann es nicht die Lösung sein, Dir diese komplett auf dem Silbertablett zu servieren, dabei lernst Du ja nichts.

[edit] Wenn Du es selbst versuchst und dabei steckenbleibst, helfen wir natürlich gerne weiter, nicht, dass wir uns da missverstehen. [/edit]
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
Benutzerbild von DeddyH
DeddyH

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

AW: FindWindow von Pfad

  Alt 2. Mai 2012, 19:30
Ich habe soeben feststellen müssen, dass das Ganze wohl wirklich nicht so ganz ohne ist. Daher habe ich 2 Hilfsfunktionen geschrieben, ich hoffe, das hilft zunächst weiter, Fehler sind natürlich vorbehalten.
Delphi-Quellcode:
uses TLHelp32, PsAPI;

function ExeNameFromProcessID(ID: Cardinal): string;
var
  ProcessHandle: THandle;
begin
  Result := '';
  ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
    false, ID);
  if ProcessHandle <> 0 then
    try
      SetLength(Result, MAX_PATH);
      if GetModuleFileNameEx(ProcessHandle, 0, PChar(Result), Length(Result)) <> 0 then
        SetLength(Result, StrLen(PChar(Result)));
    finally
      CloseHandle(ProcessHandle);
    end;
end;

procedure ListExeNamesAndIDs(const ResultList: TStrings);
var
  PE: TProcessEntry32;
  Snap: THandle;
  ExeName: string;
begin
  Assert(Assigned(ResultList));
  ResultList.BeginUpdate;
  try
    ResultList.Clear;
    Snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PE.dwSize := SizeOf(PE);
    if Snap <> 0 then
      try
        if Process32First(Snap, PE) then
          repeat
            ExeName := ExeNameFromProcessID(PE.th32ProcessID);
            if ExeName <> 'then
              ResultList.AddObject(ExeName, TObject(PE.th32ProcessID));
          until not Process32Next(Snap, PE);
      finally
        CloseHandle(Snap);
      end;
  finally
    ResultList.EndUpdate;
  end;
end;
Für Dich von Belang ist dabei ListExeNamesAndIDs. Der übergibst Du ein TStrings-Objekt (Stringliste, ListBox.Items, ComboBox.Items oder Ähnliches), und dieses sollte nach dem Aufruf die kompletten Pfade zu den laufenden Prozessen sowie deren ProcessID (im Object-Feld hinterlegt) enthalten. Diese Liste kannst Du nun nach dem gesuchten Pfad filtern, die ProcessID auslesen und zum Vergleich für EnumWindows und GetWindowThreadProcessID heranziehen. Wenn ich keinen Denkfehler mache/gemacht habe, sollte das eigentlich funktionieren.
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
Antwort Antwort
Seite 1 von 2  1 2      


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 16:36 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