Autor |
Beitrag |
Blafasel
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 23.06.05 15:48
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 raziel: BBCodes aktiviert.
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 23.06.05 15:58
so kriegst du die prozessid: GetWindowThreadProcessId(Hnd, @PID);
kannst dann mit KILLPROCESS abschiessen
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Blafasel
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 23.06.05 16:32
Mahlzeit.
retnyg hat folgendes geschrieben: | so kriegst du die prozessid: GetWindowThreadProcessId(Hnd, @PID); |
Ähm, ja.. Das mache ich doch in dem Code oben?
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
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 23.06.05 17:00
vielleicht solltest du dir erst mit GETDEBUGPRIVILEGE debug - privilegien holen...
und verwende mal meine killprocess funktion, ist bei dem PSVIEW thread mehrfach zu kopieren
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Blafasel
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 23.06.05 17:42
Danke für deine Zeit/Hilfe.
retnyg hat folgendes geschrieben: | vielleicht solltest du dir erst mit 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.
retnyg hat folgendes geschrieben: | und verwende mal meine killprocess funktion, ist bei dem 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
Hält's aus hier
Beiträge: 14
|
Verfasst: 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
Hält's aus hier
Beiträge: 14
|
Verfasst: 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
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 23.06.05 21:12
TerminateProcess mal ausprobiert ?
|
|
Blafasel
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 23.06.05 21:14
F34r0fTh3D4rk 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..
Zuletzt bearbeitet von Blafasel am Do 23.06.05 21:16, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 23.06.05 21:15
ach ja stimmt, sry
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 23.06.05 21:52
Gehört der Prozess auch dir? Sprich läuft er unter deinem Benutzeraccount?
|
|
Blafasel
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 23.06.05 22:46
Jein..
Nein, ausser man zählt "beide Programme laufen als Service, "Local System", als ein Ja..
|
|