| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > ExitWindowsEx() ??? |
| Автор: qaz 29.3.2002, 20:28 |
| Чем можно заменить ф-цию ExitWindpwsEx (ShutDown) и ExitWindpwsEx (Reboot) - в 98 сносно работает, но в ХР только LogOff делает вместо всего этого. Как быть? |
| Автор: Garik 29.3.2002, 21:22 |
| Скажу сразу, сам не пробовал и не знаю, прокатит ли это в ХР, но есть еще такой вариант: rundll32 shell32,SHExitWindowsEx 1 - выключение rundll32 shell32,SHExitWindowsEx 2 - перезагрузка. Ну, а запускать через ShellExecute например. |
| Автор: Vit 29.3.2002, 21:47 |
| Я тоже подумал об этом способе, но XP что-то не очень хочет так делать. |
| Автор: qaz 30.3.2002, 07:53 |
| Не хотить! No such entry in shel32 Ещё какие нить варианты будут? |
| Автор: Vit 30.3.2002, 09:03 |
| Была такая еще функция, только я не помню где ExitKernel, по моему то-ли в User.EXE то ли в чем то подобном. Поищи по системным файлам в списках экспортируемых функций. Незнаю как в XP а предыдущих виндах закрывала винды мгновенно и без запросов, правда не давала и другим программам что либо закрыть. Кстати, а посылать Explorer сообщение wm_quit не пробовали? |
| Автор: VitSoft 30.3.2002, 11:37 |
| да все работает ExitWindowsEx: ... Windows NT/2000/XP: To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, see Privileges. HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) error("OpenProcessToken"); // Get the LUID for the shutdown privilege. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); // Cannot test the return value of AdjustTokenPrivileges. if (GetLastError() != ERROR_SUCCESS) error("AdjustTokenPrivileges"); // Shut down the system and force all applications to close. if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) error("ExitWindowsEx"); Good Luck VitSoft http://www.development.efficientit.com |
| Автор: qaz 4.4.2002, 19:52 |
| Вот это работает. Сенкс. Только вот ещёё одна проблемма: при запуске функции ExitWindowsEx() в 98 комп сам вырубался без никаких вопросов (типа "теперь питание можно выключить"), а по предложенной схеме ХР умничать начинает - что теперь вам всё дозволено и выключайте комп руками .... Как от этого избавиться можно? |
| Автор: neutrino 4.4.2002, 20:00 |
| Тут, мне кажется, уже надо писат Биллу. |