Entwickler-Ecke

Windows API - Killen eines Prozesses, wenn ich nur ein Fensterhandle habe.


Blafasel - Do 23.06.05 15:48
Titel: Killen eines Prozesses, wenn ich nur ein Fensterhandle habe.
Mahlzeit.

Weiter unten steht ein Thread von mir der sich damit beschäftigt Fehlerpopups von einer kritischen (und verbuggten) Software zu finden und - zu schliessen. Das Finden klappt inzwischen, dank der Hilfe hier im Forum.

Nun ende ich mit einem Window-Handle und krieg einfach das Fenster nicht geschlossen.. Was ich bisher mache:

3 verschiedene Hacks das Fenster definitiv in den Vordergrund & aktiv zu bekommen
Sendkey VK_ENTER (Es gibt immer nur einen Button mit "OK" und der ist Default)

und

PostMessage:
- WM_CLOSE
- WM_SYSCOMMAND/SC_CLOSE
- WM_DESTROY
- WM_NCDESTROY

und


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
GetWindowThreadProcessId(hDialog, @iProcessId);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, iProcessId);
try
  GetExitCodeProcess(hProcess, iExitCode);
  TerminateProcess(hProcess, iExitCode);
finally
  CloseHandle(hProcess);
end;


Wie man sieht bin ich ziemlich verzweifelt, und das Fenster lacht sich ins Fäustchen. Beide Prozesse (mein Service der eben diese Dinge dort oben macht und der Papa des Popups) sind als Lokales System gestartet. Wie in meinem anderen Thread zu sehen ist, sind die Popups meistens auf dem WinLogon Desktop (als neben dem "Ctrl+Alt+Del to log on" Screen).

Was mache ich falsch? Was kann ich überhaupt noch weiteres versuchen?
Danke für jede Hilfe,
Ben

Moderiert von user profile iconraziel: BBCodes aktiviert.


retnyg - Do 23.06.05 15:58

so kriegst du die prozessid: GetWindowThreadProcessId(Hnd, @PID);
kannst dann mit Suche in: Delphi-Forum, Delphi-Library KILLPROCESS abschiessen


Blafasel - Do 23.06.05 16:32

Mahlzeit.

user profile iconretnyg hat folgendes geschrieben:
so kriegst du die prozessid: GetWindowThreadProcessId(Hnd, @PID);


Ähm, ja.. Das mache ich doch in dem Code oben?

user profile iconretnyg hat folgendes geschrieben:
kannst dann mit Suche in: Delphi-Forum, Delphi-Library KILLPROCESS abschiessen


Wenn ich die Suchergebnisse anschaue, dann machen die das gleiche was ich auch versuche..?
No offense, aber das sieht irgendwie nach - doppelt aus?

Ben


retnyg - Do 23.06.05 17:00

vielleicht solltest du dir erst mit Suche in: Delphi-Forum, Delphi-Library GETDEBUGPRIVILEGE debug - privilegien holen...
und verwende mal meine killprocess funktion, ist bei dem Suche in: Delphi-Forum, Delphi-Library PSVIEW thread mehrfach zu kopieren


Blafasel - Do 23.06.05 17:42

Danke für deine Zeit/Hilfe.

user profile iconretnyg hat folgendes geschrieben:
vielleicht solltest du dir erst mit Suche in: Delphi-Forum, Delphi-Library GETDEBUGPRIVILEGE debug - privilegien holen...


Das wird wohl nichts.. Delphi 5 hier.. Erstens gibt es bei mir keinen PPointer (Gut, den kann ich vermutlich als ^Pointer selber deklarieren), danach gibt es im Assember-Teil das Problem "Undeclared identifier DB".. Ganz davon abgesehen, dass ich Strings wie

Quelltext
1:
2:
@muell:
  DB $0F DB $80

bedenklich finde, was die Namensgebung angeht..
Nun ja - habe gerade doch noch eine andere Möglichkeit gefunden, an das Debug-Recht zu kommen.. Wird auch getestet.

user profile iconretnyg hat folgendes geschrieben:
und verwende mal meine killprocess funktion, ist bei dem Suche in: Delphi-Forum, Delphi-Library PSVIEW thread mehrfach zu kopieren

Hab ich gerade verglichen. Der Unterschied ist ja nur in den Privilegien und dem Inherit-Flag bei OpenProcess zu sehen. Die Privilegien habe ich nun auf (PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION) reduziert und werd es damit mal testen. Danke.


Blafasel - Do 23.06.05 18:22

Gerade getestet. Sowohl die explizite Angabe der Privilegien als auch das Debug-Privileg helfen nicht weiter - der Process ist einfach nicht tot zu kriegen.. Mache ich da etwas falsch?


Blafasel - Do 23.06.05 20:55

Vorsichtig gefragt, weil mein erstes Googlen nicht sehr vielversprechend war: Liesse sich ggf. auch mit einem systemweiten Hook (z.B. bei jedem neuen Fenster?) ein ungewünschter Dialog abfangen? Performance-Probleme wären mir gerade mehr als egal.. *auf die Uhr schau*


F34r0fTh3D4rk - Do 23.06.05 21:12

TerminateProcess mal ausprobiert ?


Blafasel - Do 23.06.05 21:14

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
TerminateProcess mal ausprobiert ?


Sei mir nicht bös: Ja.. Steht 3-4 Beiträge weiter oben.. *sigh* Wird wohl ne lange Nacht heute..


F34r0fTh3D4rk - Do 23.06.05 21:15

ach ja stimmt, sry :D


Delete - Do 23.06.05 21:52

Gehört der Prozess auch dir? Sprich läuft er unter deinem Benutzeraccount?


Blafasel - Do 23.06.05 22:46

Jein..

Nein, ausser man zählt "beide Programme laufen als Service, "Local System", als ein Ja..