AGB  ·  Datenschutz  ·  Impressum  







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

Handle ermitteln

Ein Thema von Martin K · begonnen am 1. Apr 2006 · letzter Beitrag vom 1. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Handle ermitteln

  Alt 1. Apr 2006, 20:42
Hi Leute,

habe mal eine Frage zu FindWindow:
Ist es irgendwie möglich, die Funktion mittels eines Dateinamen anstatt lpClassName aufzurufen?
Gibt es dafür eine andere Funktion, wie ich das Handle eines Programms mittels seines Dateinamen herausfinden kann?

z.B. wenn ich eingebe:
FindWindow('notepad',nil) dann klappt das wunderbar.

Wenn ich aber z.B. das Handle vom Windows Media Player haben will:
FindWindow('wmplayer',nil) oderFindWindow('Windows Media Player',nil) funktioniert nicht.
Deshalb wollte ich es über den FileName machen, aber da komme ich nicht weiter...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Handle ermitteln

  Alt 1. Apr 2006, 20:45
Hallo,

Bei mir findet es den MP so:
FindWindow('WMPlayerApp','Windows Media Player');
Zitat:
Deshalb wollte ich es über den FileName machen, aber da komme ich nicht weiter...
Waere eine Moeglichkeit, jedoch wird's dann komplizierter.
Zudem koennen zu einem Prozess mehrere Fenster gehoeren. Dann muesstest du noch das richtige finden.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Handle ermitteln

  Alt 1. Apr 2006, 20:49
Danke erstmal, werd ich gleich ausprobieren.

Ich wollte es halt nur allgemein, also für JEDES Programm machen, deshalb über FileName...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Handle ermitteln

  Alt 1. Apr 2006, 20:54
Zitat von toms:
Zitat:
Deshalb wollte ich es über den FileName machen, aber da komme ich nicht weiter...
Waere eine Moeglichkeit, jedoch wird's dann komplizierter.
Zudem koennen zu einem Prozess mehrere Fenster gehoeren. Dann muesstest du noch das richtige finden.
Naja, das mit den mehreren Fenstern kann man ja weglassen...
Meinetwegen kann der ganze Prozess beendet werden.

Wie würde das denn gehen?
Also Handle eines Prozesses erhalten ???
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Handle ermitteln

  Alt 1. Apr 2006, 20:56
Zitat von Martin K:
Danke erstmal, werd ich gleich ausprobieren.

Ich wollte es halt nur allgemein, also für JEDES Programm machen, deshalb über FileName...
Dann muesstest du aber jeden EXE-Namen kennen. Eine Datei kann man jedoch auch umbenennen.
Was genau moechtest du mit den Handles machen?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Handle ermitteln

  Alt 1. Apr 2006, 21:00
Also:
Ich starte zunächst ein Programm per ShellExecute.
Dieses Programm läuft im Hintergrund, also SW_Hide. Da der Nutzer deshalb dieses Programm dann nur im Taskmanager beenden kann, will ich es eben so beenden:
PostMessage(FindWindow('WMPlayerApp','Windows Media Player'),WM_SYSCOMMAND,SC_Close,0); Da das Programm im Normalfall der Windows Media Player ist, funzt der Code auch.

Der Benutzer soll aber das Programm auch ändern können (also ein anderes Programm für die Musikwiedergabe), und eben dann habe ich ein Problem mit dem Beenden...

Zitat von toms:
Dann muesstest du aber jeden EXE-Namen kennen. Eine Datei kann man jedoch auch umbenennen.
Nein, es soll nur ein Programm sein, dass der Nutzer angibt. Den FileName kenne ich also.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Handle ermitteln

  Alt 1. Apr 2006, 21:14
Kannst du nicht über MSDN-Library durchsuchenCreateProcess oder ähnliches das Handle des Prozesses "behalten" und dann per Kill-Message abschießen?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Handle ermitteln

  Alt 1. Apr 2006, 21:23
Ich will das Programm schon "ordentlich" beenden, also nicht killen.

Ich weiß zwar nicht, wie CreateProcess funktioniert, aber ich habe das schon ausprobiert:
Hab mir eine globale Integer-Variable genommen, in der das Handle meines Prozesses gespeichert wird.
Danach wollte ich dann das Programm zu diesem Handle beenden:
Delphi-Quellcode:
//Programm starten und Handle speichern
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(Info);
  Info.Wnd := Application.Handle;
  Info.fMask := SEE_MASK_NOCLOSEPROCESS;
  Info.lpVerb := PChar('open');
  Info.lpFile := PChar('C:\Programme\Windows Media Player\wmplayer.exe');
  Info.nShow := SW_Hide;
  ShellExecuteEx(@Info);
  x := exInfo.hProcess; //x habe ich als globale Integer-Variable deklariert


//dann Beenden:
  PostMessage(x,WM_SYSCOMMAND,SC_Close,0);
Der Code hat aber leider nicht funktioniert...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Handle ermitteln

  Alt 1. Apr 2006, 21:32
Ein Prozess-Handle ist ja auch kein Fensterhandle.

Also damit es mit einem Dateinamen funktioniert:
1. Alle Prozesse auflisten (Forensuche)
2. Die dazugehörigen ProzssIDs und Dateinamen holen
3. Alle Fenster(handles) holen (Forensuche)
4. Vergleichen welches Handle zur ProzessID passt mit MSDN-Library durchsuchenGetWindowThreadProcessId.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: Handle ermitteln

  Alt 1. Apr 2006, 21:34
Schaut euch mal diesen Thread an. (vorallem letzte Antwort)
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 11:56 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