Russian Qt Forum
Сентябрь 30, 2024, 16:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кроссплатформенный reboot или shutdown  (Прочитано 6643 раз)
yunixon
Гость
« : Апрель 15, 2009, 12:40 »

Может есть какой-нибудь класс для работы с системой? Хочется загнать и линух и винду в ребут используя Qt.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Апрель 15, 2009, 12:50 »

нет такого класса, реализовывай сам на АПИ платформы
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex03
Гость
« Ответ #2 : Апрель 15, 2009, 18:11 »

Кроссплатформенный способ - запуск внешнего процесса, а уж командлайн хранить в конфиге проги.
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #3 : Апрель 16, 2009, 13:17 »

Пользую
Выключить комп - команды
Windows
cmd /c shutdown  -s -t 0
Linux
sudo halt  // ест-но права root

Перезагрузить комп - команды
Windows
cmd /c shutdown  -r -t 0
Linux
sudo reboot
Записан
Rcus
Гость
« Ответ #4 : Апрель 16, 2009, 14:03 »

Справка по ExitWindowsEx говорит что без привелегии SE_SHUTDOWN_NAME отключить компьютер не получится.
Записан
yunixon
Гость
« Ответ #5 : Апрель 16, 2009, 14:57 »

еще в линухе есть вот такой костыль: system("init 0") (помоему в stdlib)
а в винде?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #6 : Апрель 16, 2009, 18:43 »

Вот рабочий код для Windows
Код
C++ (Qt)
DWORD rebootWin()
{
   HANDLE hToken;
   TOKEN_PRIVILEGES tkp;
   DWORD dwRetVal;
 
// Получаем маркер (token) для этого процесса.
 if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    return (GetLastError());
 
// Получаем LUID для привилегии выключения (shutdown).
 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
 tkp.PrivilegeCount = 1;
 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 
// Получаем привилегию выключения (shutdown) для этого процесса.
 AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
 if ((dwRetVal = GetLastError()) != ERROR_SUCCESS) return dwRetVal;
 
// Выключаем или перезагружаем в соответствие с ExitFlags
 if (!ExitWindowsEx(EWX_LOGOFF|EWX_REBOOT, 0)) return (GetLastError());
}
Записан
yunixon
Гость
« Ответ #7 : Апрель 17, 2009, 08:15 »

а чтоб mingw-шный компилер понял сей код, какой заголовок нужен? windows.h?
Записан
spirit
Гость
« Ответ #8 : Апрель 17, 2009, 08:37 »

qt_windows.h
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 23.