Hallo,
ich programmiere im Moment an einem kleinen Kommandozeilen-Tool in C
unter Visual Studio 2008. Das Tool installiert und richtet einige Sachen
ein und sollte daher nach Möglichkeit während der Ausführung nicht
geschlossen werden können. Gibt es eine Möglichkeit das Schliessen der
Kommandozeile durch den Benutzer zu verbieten? Ich habe im Internet
bereits das Tool "DontCloseMe" gefunden, jedoch bräuchte ich dann zu dem
Tool selber noch eine zweite Datei.
Gesucht ist also eine Möglichkeit dieses "Schliessverbot" selber zu
implementieren!
Vielen Dank.
PS: Verwendet werden soll das Tool später unter XP.
es gibt immer noch den taskmanager...ich wuerde an deienr stelle lieber
das kommandozeilenfenster verstecken und aus der taskleiste nehmen und
ein weiteres forms fenster anlegen, dass nur sagt "installiere..." und
in diesem dann alle "schliessen" events abfangen dass das forms fenster
wiederrum anzeigt.
Wird beim Schließen nicht irgendeine Exit-Routine vom OS aufgerufen,
bevor es wirklich geschlossen wird? Dann könnte mann doch den
Schließbefehl evtl. abfangen (irgendwie ;-)
Gegen den Taskmanager biste aber sicherlich machtlos ...
Jens G. schrieb:> Wird beim Schließen nicht irgendeine Exit-Routine vom OS aufgerufen,> bevor es wirklich geschlossen wird? Dann könnte mann doch den> Schließbefehl evtl. abfangen (irgendwie ;-)> Gegen den Taskmanager biste aber sicherlich machtlos ...
In C# lässt sich das Schließen einer Form durch Abfangen des FormClosing
Events verhindern, indem man das Event canceled.
e.Cancel = true;
Dann lässt sich die Form beispielsweise nur noch per Task Manager
schließen und man schaut dumm aus der Wäsche beim Wegklicken (was
natürlich nicht geht). :)
programmer schrieb:> Hallo,>> ich programmiere im Moment an einem kleinen Kommandozeilen-Tool in C> unter Visual Studio 2008. Das Tool installiert und richtet einige Sachen> ein und sollte daher nach Möglichkeit während der Ausführung nicht> geschlossen werden können. Gibt es eine Möglichkeit das Schliessen der> Kommandozeile durch den Benutzer zu verbieten? Ich habe im Internet> bereits das Tool "DontCloseMe" gefunden, jedoch bräuchte ich dann zu dem> Tool selber noch eine zweite Datei.> Gesucht ist also eine Möglichkeit dieses "Schliessverbot" selber zu> implementieren!
Nein, sowas geht aus gutem Grund nicht wirklich.
Denk mal nach, wie würdest Du es finden wenn jeder Dödel auf Deinem
Rechner unschliessbare Progamme machen könnte? Was würde das für die
Sicherheit bedeuten? Usw. usf.
Mach einfach eine unmissverständliche Anleitung, und entsprechende
Ausgaben in das Tool - alles weitere ist am Ende bloss
Zeitverschwendung.
Und halte einen Baseballschläger oder eine Kettensäge für die
unvermeidlichen Schwachköpfe bereit die nicht lesen können/wollen...
ist zwar pure basic
aber hier gäbe es die möglichkeit das Event_CloseWindow abzufangen
ure basic tut das für dich und gibt dir die Möglichkeit quit nicht
durchzureichen indem du die abbruchbedingung nicht erfüllst. habe es
gerade ausprobiert.
Es geht dem Threadstarter nicht um ein Programm, das in einem Fenster
läuft, sondern um eine Konsolapplikation. Die zeichnet sich dadurch aus,
daß sie kein Fenster hat und folglich auch keine Fensternachrichten
empfangen kann.
Eine Konsolapplikation kann einen Eventhandler registrieren, der
aufgerufen wird, wenn die Anwendung beendet wird (z.B. durch Schließen
des Konsolenfensters oder durch Abmeldung des Benutzers), aber damit
lässt sich das Beenden nicht unterdrücken, sondern höchstens um 30
Sekunden herauszögern.
http://msdn.microsoft.com/en-us/library/ms686016(v=vs.85).aspx
Vielen Dank euch allen die mir geholfen haben!
Rufus' Ansatz war der Richtige, ich habe eine Konsolenapplikation und
möchte verhindern, dass die Konsole durch den Benutzer während der
Ausführung geschlossen werden, und somit die Anwendung beendet werden
kann.
Ich habe nun selber noch einige Zeit recherchiert und folgendes
gefunden, was bei mir auch wunderbar funktioniert:
Duch diesen Befehl wird das X der Kommandozeile deaktiviert, somit kann
sie nicht ohne weiteres (den Taskmanager mal außen vorgelassen)
geschlossen werden.
Vlad Tepesch schrieb:> oder das Menü hinter dem Titelleisten-Icon?> oder Doppelklick auf das Titelleisten-Icon?
Das ist das Systemmenü, aus dem "programmer" gerade den
"Schließen"-Eintrag entfernt hat. Und der Doppelklick darauf ruft den
Default-Eintrag auf (der eben "Schließen" war, jetzt aber nicht mehr
ist).
Rufus Τ. Firefly schrieb:> Das ist das Systemmenü, aus dem "programmer" gerade den> "Schließen"-Eintrag entfernt hat. Und der Doppelklick darauf ruft den> Default-Eintrag auf (der eben "Schließen" war, jetzt aber nicht mehr> ist).
Exakt, mit Alt+F4 lässt sich die Kommandozeile nun nicht mehr beenden.
Auch ein Rechtklick auf das Symbol in der Taskleiste bringt kein
"Schliessen"-Feld zum Vorschein, genausowenig wie ein Klick links oben
ins Eck der Kommandozeile. Die einzigst verbleibende Möglichkeit wäre
nun den Task zu beenden...
Volker Zabe schrieb:> Und auch [Strg]+[c] bzw. [Strg]+[break] abgefangen?>> Volker
Das kann er abfangen indem er wie hier zu sehen ist
http://msdn.microsoft.com/en-us/library/ms685049%28v=vs.85%29.aspx
einen Control Handler einsetzt.
Nur das hier
while( 1 ){ }
empfiehlt sich nicht, sonst gibt es 100% Systemauslastung. Das lässt
sich aber beispielsweise durch ein Sleep(100); entschärfen.
programmer schrieb:> Vielen Dank euch allen die mir geholfen haben!> Rufus' Ansatz war der Richtige, ich habe eine Konsolenapplikation und> möchte verhindern, dass die Konsole durch den Benutzer während der> Ausführung geschlossen werden, und somit die Anwendung beendet werden> kann.>> Ich habe nun selber noch einige Zeit recherchiert und folgendes> gefunden, was bei mir auch wunderbar funktioniert:>
1
>DeleteMenu(GetSystemMenu(GetConsoleWindow(),
2
>false),SC_CLOSE,MF_BYCOMMAND);
3
>
>> Duch diesen Befehl wird das X der Kommandozeile deaktiviert, somit kann> sie nicht ohne weiteres (den Taskmanager mal außen vorgelassen)> geschlossen werden.
Es gibt ja noch mehr als den Taskmanager, der ja nun auch kein Geheimnis
ist.
Letztlich hast Du bloß eine bessere Mausefalle gebaut, woraufhin das
Universum sofort dran geht bessere Mäuse zu entwickeln. Das Spiel geht
weiter...
Jasch schrieb:> Es gibt ja noch mehr als den Taskmanager, der ja nun auch kein Geheimnis> ist.
Den aber darf nicht jeder Benutzer aufrufen oder gar Prozesse damit
beenden.