Beenden vom fremden Anwendungen

Hallo,

ich habe folgendes Problem. Mein Programm startet irgendwann den Acrobat Reader. Da dieser nicht offen bleiben soll, beende ich ihn, indem ich den Prozess einfach beende. Problem an der Sache ist, dass dann natürlich auch der Speicher nicht freigegeben wird, der vom Reader reserviert wurde. Wenn ich die ganze Sache nu öfter mache, wird der Speicher vollgemüllt, was definitiv ein Problem ist.
Kann ich andere Anwendungen auch so beenden, dass die den Speicher wieder freigeben? Mit der SendMessage Methode? Die Nachricht „WM_CLOSE“ senden oder so? Funktioniert das?

Danke und Grüße…

Peter

Hallo, Peter!

die ganze Sache nu öfter mache, wird der Speicher vollgemüllt,
was definitiv ein Problem ist.

Dann benutze ein besseres Betriebssystem, welches nicht solche Speicherschweinereien macht. (Sch… Kommentar, ich weiß.)

Speicher wieder freigeben? Mit der SendMessage Methode? Die
Nachricht „WM_CLOSE“ senden oder so? Funktioniert das?

Sollte funktionieren. Aber nur, wenn Acrobat tatsächlich sich selbst auch sauber beendet und aus dem Speicher entfernt. Die MS-Produkte machen das nicht (immer), wie ich meine, festgestellt zu haben. Ich würde es aber genau so (SendMessage) machen.

Gruß, Manfred

Hm… hab es eben versucht. Per OpenProcess den Handle auf den Acrobat Reader ermittelt. Mit Send Message die Nachricht „WM_CLOSE“ gesendet aber es interessiert den Reader anscheinend nicht. Es tut sich gar nichts. Aber auch bei anderen Programmen nicht.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hm… hab es eben versucht. Per OpenProcess den Handle auf den
Acrobat Reader ermittelt. Mit Send Message die Nachricht
„WM_CLOSE“ gesendet aber es interessiert den Reader
anscheinend nicht. Es tut sich gar nichts. Aber auch bei
anderen Programmen nicht.

Ich kenne mich mit den WM_*-Konstanten nicht so klasse aus. Versuch’s mal mit WM_QUIT. Aber macht TerminateProcess und CloseHandle den Acrobat nicht sauber zu?

Gruß, Manfred

den Acrobat Reader. Da dieser nicht offen bleiben soll, beende
ich ihn, indem ich den Prozess einfach beende. Problem an der
Sache ist, dass dann natürlich auch der Speicher nicht
freigegeben wird, der vom Reader reserviert wurde. Wenn ich
die ganze Sache nu öfter mache, wird der Speicher vollgemüllt,
was definitiv ein Problem ist.

Hallo Peter.
Wie beendest Du denn den Prozess?
Verwendest Du ein spezielles Control für den Reader(was am einfachsten nd am sichersten wäre) oder startest Du einfach nur die *.pdf Datei?
Was eigentlich funktionieren sollte, das wäre ein Shell über das Windowsapi auf die Anwendung „Acrobat Reader.exe“ mit der Dateiangabe des zu öffnenden Dokuments als Parameter. Es sollte dann ein Handle geben (aber ich müßte selber noch mal nachschauen, um es genau zu wissen), wie es sich zur Beendigung des Reader verwenden läßt.
Was auch funktionieren sollte, das ist ein Methode wie sie Strg-Alt-Entf anbietet, heiß es Taskmanager??
Nur ist dann dabei das Problem, das man nicht so einfach feststellen kann, welcher Thread vom eigenen Programm ausgelöst wurde.
Die Nachrichtenbehandlung wird leider von den verschiedenen Programmen unterschiedlich ausgeführt.
Wenn ein Programm regulär beendet werden soll, aber nicht vollständig entladen wird, dann ist es ein Programmfehler, also dann kannst Du nichts dafür.
Dem Windows würde ich zunächst „keine Schuld“ geben.
Schau doch mal nach genauen Beispielen zum Thema API-Calls oder „Windows-Api“ im Internet nach. Ich finde da mehr als genug.
MfG
Matthias

OpenProcess liefert wohl ein Process-Handle, Sendmessage braucht aber das Fenster-Handle des Hauptfensters.

Nebenbei bemerkt: MS ist nicht an allem schuld, ganz besonders nicht an Acrobat, denn der wird bei MS vollkommen ignoriert. Beschimpfungen dazu sind an Adobe zu richten.

Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]