Entwickler-Ecke

Sonstiges (Delphi) - Anderes Programm pausieren


bawa - Mi 24.09.08 18:54
Titel: Anderes Programm pausieren
Heyho,
ich habe eine kurze frage. Wie kann ich andere Programme pausieren?

Schonmal danke :)

Bawa


platzwart - Mi 24.09.08 18:57

bitte etwas präziser


Delete - Mi 24.09.08 19:03

man kann threads anhelten...


bawa - Mi 24.09.08 19:03

Okay dachte es wäre ersichtlich was ich meine.
Also ich möchte, dass ein anderes Programm (z.B. firefox) kurz pausiert wird (so wie wenn mal sleep(x) macht). Es soll sozusagen von meinem Programm eingefroren werden (So wie es Antivir mit programmen macht die eine virusmeldung auslösen, bis diese beantwortet ist)


Sinspin - Mi 24.09.08 19:17

Genau wie du das jetzt ansprichst, das Antivir das tut, würde ich sagen, das ist nichts für "Kinderhände"! Denn auf eben diese Weise könnte man dann auch Programme wie Antivir anhalten um einen Virus oder was anderes unfreudliches daran vorbei zu schmucklen.
Also schreib bitte nochmal genau um was für Programme es sich handelt die du anhalten willst.
Sind das Programme von dir oder Fremde?


bawa - Mi 24.09.08 19:41

Ich will lediglich einen Trainer für ein Spiel programmieren. Dieses setzt jedoch beim erhöhen der Rostoffe den wert gleich wieder zurück. Ich habe mir überlegt, dass man das mit pausieren des spiels möglicherweise umgehen könnte.


Hidden - Mi 24.09.08 19:51

Hi,

Ob dein Vorhaben legal ist, bin ich mir nicht so ganz sicher :roll: Der Programmierer wollte dies anscheinend verhindern, daher das Zurücksetzen.

Das wird aber sowieso so nicht gehen, da das Zurücksetzen damit nur Pausiert würde.

mfG,


Chryzler - Mi 24.09.08 19:55

user profile iconbawa hat folgendes geschrieben:
Ich habe mir überlegt, dass man das mit pausieren des spiels möglicherweise umgehen könnte.

Sehr sehr unwarscheinlich.

AntiVir hält übrigens das andere Programm nicht explizit an, sondern "beantwortet" die Anfrage, auf eine Datei zuzugreifen erst dann, wenn die Warnmeldung bestätigt worden ist. Im Endeffekt wird dadurch natürlich das Programm, das auf die Datei zugreifen will, angehalten.
user profile iconSinspin hat folgendes geschrieben:
Denn auf eben diese Weise könnte man dann auch Programme wie Antivir anhalten um einen Virus oder was anderes unfreudliches daran vorbei zu schmucklen.

Eigentlich nicht, da dann AntiVir das Programm, das AntiVir anhalten will, schon erkennen sollte bevor es gestartet wird, vorrausgesetzt Signaturen sind dafür vorhanden.


jaenicke - Mi 24.09.08 20:55

Nun ja, der Process Explorer bietet die Möglichkeit ein Programm zu pausieren. Irgendwie muss das also gehen, auch ohne, dass schlicht ein Dateizugriff blockiert wird o.ä., aber wie der das macht habe ich keine Ahnung. Wenn ich mal Zeit finde könnte ich mal schauen ob ich das herausfinde, aber im Moment siehts da nicht gut aus.


Chryzler - Mi 24.09.08 21:07

Ich tippe mal auf SuspendThread [http://msdn.microsoft.com/en-us/library/ms686345(VS.85).aspx] und ResumeThread [http://msdn.microsoft.com/en-us/library/ms685086(VS.85).aspx]. user profile iconLuckie meinte aber mal, dass es mit dem allein nicht getan ist, glaub ich.


Delete - Mi 24.09.08 23:19

user profile iconChryzler hat folgendes geschrieben:
Ich tippe mal auf SuspendThread [http://msdn.microsoft.com/en-us/library/ms686345(VS.85).aspx] und ResumeThread [http://msdn.microsoft.com/en-us/library/ms685086(VS.85).aspx]. user profile iconLuckie meinte aber mal, dass es mit dem allein nicht getan ist, glaub ich.

Wenn du den richtigen Thread erwischt schon. Nu sollte man einen Thread nie von aussen anhalten oder gar beenden. Befindet r sich nämlich gerade in einer CriticalSection und man hält ihn an oder beendet ihn gar, dann warten sich die andren Threads zu Tode, die auf die Freigbae der CriticalSection warten.

Und wie schon gsagt wurde, hat entweder der Programmierer vorgesorgt und hat sein Programm dagegen abgesichert und dann ist es egal, ob du das Programm eine Sekunde oder drei Stunden anhälts. Der Code, der den Wert wieder zurücksetzt wird trotzdem ausgeführt. Oder du guckst an der falschen Stelle. Oder du machst grundsätzlich was falsch. Ich wüde auf letzteres tippen, denn wenn jemand so viel Ahnung hat, wie man einen Trainer schreibt, der sollte sich mit den grundlegenden API-Funktionen und Windows Interna auskennen oder zumindest wissen, wo er dieses Wissen herbekommt ohne fragen zu müssen.


Boldar - Do 25.09.08 00:04

user profile iconLuckie hat folgendes geschrieben:

Befindet r sich nämlich gerade in einer CriticalSection und man hält ihn an oder beendet ihn gar, dann warten sich die andren Threads zu Tode, die auf die Freigbae der CriticalSection warten.


Dann müsste man ja nur irgendwie feststellen, ob ein Thread in einer Critical Section ist... aber geht dass denn??