Jak wymusić zamknięcie systemu

0

hej
potrzebuję zrobić coś takiego jak w temacie, ale chodzi mi o takie wymuszone zamknięcie, nie interesuje mnie czy sa otwarte jakieś pliki czy coś sie kopiuje itp, wszystkie procesy mają się natychmiastowo zamknąć (oczywiście mogą tam się jakoś pozakańczać jak umieją, ale chodzi mi o to by użytkownik nie musiał nic klikać, żadnego "ok", "tak", czy czegokolwiek)

Próbowałem już kilku sposobów (kod w C#):

  1. windows API
        [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern bool ExitWindowsEx(int flg, int rea);

z flagami

        private const int EWX_SHUTDOWN = 0x00000001;
        private const int EWX_REBOOT = 0x00000002;
        private const int EWX_POWEROFF = 0x00000008;
  1. czegoś takiego (chyba WMI czy jakoś tak)
        public static void ShutDownComputer()
        {
            ManagementBaseObject outParameters = null;
            ManagementClass sysOS = new ManagementClass("Win32_OperatingSystem");
            sysOS.Get();
            // enables required security privilege.
            sysOS.Scope.Options.EnablePrivileges = true;
            // get our in parameters
            ManagementBaseObject inParameters = sysOS.GetMethodParameters("Win32Shutdown");
            // pass the flag of 0 = System Shutdown
            inParameters["Flags"] = "1";
            inParameters["Reserved"] = "0";
            foreach (ManagementObject manObj in sysOS.GetInstances())
            {
                outParameters = manObj.InvokeMethod("Win32Shutdown", inParameters, null);
            }
        }

3) System.Diagnostics.Process.Start("ShutDown", "/*");
gdzie * to r lub s

ale wszystkie te sposoby wyświetlają messageboxy itp z jakimiś pytaniami o potwierdzenia, czasem pojawia się komunikat o zamykaniu aplikacji, że nie odpowiada jest pasek postępu i koniec komp i tak się nie wyłącza. Może znacie jakiś inny sposób na takie wyłączenie, albo na pozbycie się tych komunikatów. Lub niech się one i pojawiają, ale żeby komp się wyłączył??

z góry dzięki za pomoc i wszelkie podpowiedzi

0

private const int EWX_SHUTDOWN = 0x00000001;
private const int EWX_REBOOT = 0x00000002;
private const int EWX_POWEROFF = 0x00000008;

kiedyś grzebiąc po module od WinAPI napotkałem to, a gdzieś obok było też coś o nazwie bodajże EWX_FORCESHUTDOWN =) sprawdź =]

0

Korzystając z ExitWindowsEx() spróbuj ustawić flagi (EWX_SHUTDOWN | EWX_FORCE)

@down: a idź Ty ;p

0

byłem pierwszy =D

@up: a idę sobie! ;P

0

działa z tym EWX_FORCE, dzięki [browar]

0

uważaj z tym lepiej =) jak ja się tym bawiłem ( w Delphi - użyłem jakiegoś EWX_SHUTDOWNFORCE ), chciałem sprawdzić czy działa ... i zadziałało =D

0

Używam funkcji ExitWindowsEx w kilku wersjach ...
ExitWindowsEx(0, 0);
ExitWindowsEx(0, 1);
ExitWindowsEx(1, 1);
ExitWindowsEx(1, 0);

Niestety one zamykają mi tylko mój program, a nie cały windows ...

Próbowałem też: System.Diagnostics.Process.Start("Shutdown", "-s");

Linijka wyżej zamyka system, ale po 30 sekundach ... a ja chce od razu, bez pytań i zbędnych komunikatów

Proszę o pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1