[S] Hilfestel. System herunterfahren verhindern
-
Guten Tag,
Ich möchte ganz gerne ein programm schreiben unter XP und mit C++,
das verhindert das der Pc herunter fährt.Ablauf:
Der benutzer soll "start/computer auschalten/ausschalten" klicken es soll danach aber nix geschehen. bzw. soll der Pc erst nach 2 min herunterfahren aber das ist nicht soo wichtig.
Habe schon angefangen mit einer konsolenanwendung:
#include<iostream>
#include <windows.h>
using namespace std;int main()
{
while
{
system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
Sleep(500);
}
}leider beendet windows dann cmd und das system fährt trozdem herunter.
kennt ihr noch eine andere möglichkeit; Außer mit einer schleife.ich weiß das noch die möglichkeit der acc-verwaltung gibt, aber dort ist ja das ganze "start/computer auschalten/ausschalten" prozedere weg und das soll nicht sein.
der Grund für diese aktion ist eine rache an meinen jungeren bruder.
mfg Jasmin H.
-
J_Bunny schrieb:
der Grund für diese aktion ist eine rache an meinen jungeren bruder.
mfg Jasmin H.
Wie schön das du so offen und ehrlich bist.
-
Ist ja schön... und nu?
-
Vielleicht hilft es, wenn Du mehrer Prozesse machst, so daß immer mindestens einer frisch gestartet ist und noch Zeit hat, seine Nutzlast abzuwerfen. Viel Spaß mit der Forkbomb.
[cpp]
#include <iostream>
#include <windows.h>
using namespace std;int main()
{
char myName[1000];
GetModuleFileName(0,myName,1000);
while(true)
{
Sleep(500);
system(myName);
system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
}
}
[/quote]
-
Das war nicht gut. Kinder, die von system gestartet werden, sterben mit, wenn der Papa stirbt.
#include <iostream> #include <windows.h> using namespace std; int main() { char myName[1000]; GetModuleFileName(0,myName,1000); while(true) { Sleep(5000); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi); system("C:\\WINDOWS\\System32\\shutdown.exe -a "); } }
-
volkard schrieb:
Das war nicht gut. Kinder, die von system gestartet werden, sterben mit, wenn der Papa stirbt.
#include <iostream> #include <windows.h> using namespace std; int main() { char myName[1000]; GetModuleFileName(0,myName,1000); while(true) { Sleep(5000); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi); system("C:\\WINDOWS\\System32\\shutdown.exe -a "); } }
Aber wirklich zufriedenstellend funzen wird das erst, wenn Du keine Konsoleanwendung baust und die entsprechende Windows-Message benutzt. Alternativ eine unsichtbare Dialoganwendung (siehe oben, alle bis auf die erste) und die Zeit, bis nicht-reagierende Anwendungen beim Runterfahren abgeschossen werden, auf 2 Minuten erhöhst.
-
Hm.
Ich frage mich gerade, ob man sich nicht in den Shell-Prozess (explorer.exe) einklinken könnte (DLL Injection oder wie auch immer), und dort mittels eines Message-Hooks einfach die entsprechende Window-Message abfangen, die dem Explorer mitteilt, dass der User auf "Shutdown" gedrückt hat.
Bzw. vielleicht sogar die Message die der "OK" Button im "Shut Down Windows" Dialog auslöst. Was den Vorteil hätte dass eben der "Shut Down Windows" Dialog noch ganz normal erscheint.
-
Es gab mal nen HP-Driver, der hatte das unter Windows integriert...
Man konnte den Rechner nicht mehr herunterfahren, ohne den Prozess vorher zu killen.
-
volkard schrieb:
volkard schrieb:
Das war nicht gut. Kinder, die von system gestartet werden, sterben mit, wenn der Papa stirbt.
#include <iostream> #include <windows.h> using namespace std; int main() { char myName[1000]; GetModuleFileName(0,myName,1000); while(true) { Sleep(5000); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi); system("C:\\WINDOWS\\System32\\shutdown.exe -a "); } }
Aber wirklich zufriedenstellend funzen wird das erst, wenn Du keine Konsoleanwendung baust und die entsprechende Windows-Message benutzt. Alternativ eine unsichtbare Dialoganwendung (siehe oben, alle bis auf die erste) und die Zeit, bis nicht-reagierende Anwendungen beim Runterfahren abgeschossen werden, auf 2 Minuten erhöhst.
Ich weiß das ich nerve^^
Erstmal vielen dank für die mühe.
Leider kommen bei mir immer 2 fehler auf:GetModuleFileName(0,myName,1000);
c:\dokumente und einstellungen\Jasmin Haase\eigene dateien\projekte\shutdown\shutdown\shutdown.cpp(8) : error C2664: 'GetModuleFileNameW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWCH' nicht möglich
CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
c:\dokumente und einstellungen\Jasmin Haase\eigene dateien\projekte\shutdown\shutdown\shutdown.cpp(17) : error C2664: 'CreateProcessW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWSTR' nicht möglich
ich stehe noch ziehmlich am anfang mit der ganzen geschichte und ich weiß das ich noch so einiges lernen sollte und auch will. So langsam begreif ich das ich mich mit diesem projekt vielleicht übernommen habe.
Trotzdem wäre es verdammt lieb von euch wenn ihr weitere lösungsvorschläge posten könntet.mfg jasmin h.
-
Kind, lass doch den Unsinn
-
Kóyaánasqatsi schrieb:
Kind, lass doch den Unsinn
schaffst du es auch ein produktiven Beitrag zu schreiben???
wenn nicht dann lass es bitte gleich bleiben.
-
J_Bunny schrieb:
[...]
GetModuleFileName(0,myName,1000);
error C2664: 'GetModuleFileNameW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWCH' nicht möglich
CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
error C2664: 'CreateProcessW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWSTR' nicht möglich
[...]
Das Problem liegt daran, dass du irrgendwo in den Projekteinstellungen auf Unicode gestellt hast, also werden die Unicode-Funktionen von Windows benutzt. Du kannst entweder die Parameter in Unicode-Strings(LPWSTR) umwandeln (Nicht ganz einfach) oder die Ansi Version der Funktionen benutzen (Einfach ein A für Ansi anhängen):
GetModuleFileNameA(0,myName,1000); CreateProcessA(0,myName,0,0,0,0,0,0,&si,&pi);
MfG SWW13
-
Müßte recht leicht gehen, wenn man statt char WCHAR nimmt.