Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/125: Рейтинг темы: голосов - 125, средняя оценка - 4.83
Deovalek666

Как создать программу для выключения компьютера?

09.10.2006, 19:58. Показов 24637. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать программу для выключения компьютера?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2006, 19:58
Ответы с готовыми решениями:

Wake-on-LAN для выключения компьютера?
Понимаю абсурдность вероятности подобного пакета, но хочется спросить. Существует ли какой "Magic packet" не для пробуждения...

Прикрутить свой сценарий для выключения компьютера
Здравствуйте. Есть ли возможность изменить действия выполняемые при выключении компьютера ? А именно: Опробовав instant boot был...

Команда выключения компьютера для WIN7 работает некорректно
Всем привет! Вообщем есть таймер который вырубает компьютер, это всё отлично работает на XP, но на 7-ке код "ShutDown", "/s...

20
5 / 4 / 3
Регистрация: 01.05.2006
Сообщений: 181
09.10.2006, 21:37
Это не сюда. И это зависит от конфигурации. Тему перенес
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
27.10.2006, 22:49
Попробуй функцию ExitWindowEx().
0
5 / 4 / 3
Регистрация: 01.05.2006
Сообщений: 181
28.10.2006, 00:26
Для винды что ли?.. Да и выйдет он из нее... не факт, что комп выключится сам, его же подготовить надо, а этого может не произойти!
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.10.2006, 12:48
Согласен. Работает не во всех случаях. О чем даже в SDK упоминается...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.12.2006, 00:16
Кстати, работает во всех случаях. На самом деле, тонкость в том, что для выключения процесс, выключающий сию тачку, должен иметь определенные привелегии. Меняешь привелегии процесса - и радуешься жизни. :roll:
0
5 / 4 / 3
Регистрация: 01.05.2006
Сообщений: 181
23.12.2006, 20:35
То есть он сам смотрит, как вырубать машину? Или говорит винде "вырубайся", а она уже все выключает?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.12.2006, 01:30
Вызов функции ExitWindowEx заставляет csrss послать всем оконным функциям в системе сообщение WM_QUERYENDSESSION и ожидать их согласия...или несогласия. При сопротивлении какого-либо процесса завершению выводится всем знакомое сообщение об этом мятежнике :mrgreen: . Первыми завершаются пользовательские прцессы, затем системные... :roll:
Помешать нормальному завершению может процесс, который занят очень важными дя него делом... Тогда завершение работы может отложиться на известное лишь сему процессу время... :mrgreen:
Жалко, что нет еще функции WINAPI, которая шнур питания из сети выдергивает... :mrgreen:
0
0 / 0 / 0
Регистрация: 05.05.2008
Сообщений: 3
05.05.2008, 09:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <windows.h>
#include <winbase.h>
#include "stan.h"
#define _WINNT_WIN32 0x0500
#define _WINNT_IE 0x0500
unsigned long * ukz,
unsigned long   dli;
char IMI[1024];
bool logrez;
///////////////////////////////
HWND nwnd;
int hwn;
HANDLE hToken; 
TOKEN_PRIVILEGES tkp; 
///////////////////////////////
 
 
 
 
void DisplayLastError(LPSTR szAPI) 
{ 
    LPSTR MessageBuffer; 
    DWORD dwBufferLength; 
 
//    fprintf(fot,"%s error!\n", szAPI); 
 
    if(dwBufferLength=FormatMessage( 
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM, 
            NULL, 
            GetLastError(), 
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
            (LPSTR) &MessageBuffer, 
            0, 
            NULL 
            )) 
    { 
        DWORD dwBytesWritten; 
 
 MessageBox(NULL,MessageBuffer,"YRA",MB_OK);
 
 
        WriteFile( 
                GetStdHandle(STD_ERROR_HANDLE), 
                MessageBuffer, 
                dwBufferLength, 
                &dwBytesWritten, 
                NULL 
                ); 
        // 
        // Освободить буфер, распределенный системой 
        // 
        LocalFree(MessageBuffer); 
    } 
} 
 
 
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 dli=512;
 ukz=&dli;
 logrez = GetComputerName(IMI,ukz);
 
// MessageBox(NULL,"KUKU","YRA",MB_OK);
 if (!OpenProcessToken(GetCurrentProcess(), 
        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
DisplayLastError("OpenProcessToken");
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
        &tkp.Privileges[0].Luid); 
 
tkp.PrivilegeCount = 1;  // одна  
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
        (PTOKEN_PRIVILEGES)NULL, 0); 
 
 
if (GetLastError() != ERROR_SUCCESS) 
    DisplayLastError("AdjustTokenPrivileges"); 
 
 
/*
DialogBox(NULL,"DIALOGG",NULL,(DLGPROC)DlgProc);
DisplayLastError("InitiateSystemShutdown");
 
*/
 
 
if(InitiateSystemShutdown(NULL,"ПРИНУДИТЕЛЬНОЕ ВЫКЛЮЧЕНИЕ ЧЕРЕЗ 30 сек.",30,true,false)==0)
DisplayLastError("InitiateSystemShutdown");
 
 
if(MessageBox(NULL,"ОТМЕНИТЬ ВЫКЛЮЧЕНИЕ ?","ПРЮВЕТ",MB_OK)==IDOK)
   AbortSystemShutdown(NULL);
 
 
/*
if(!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,NULL))
DisplayLastError("ExitWindowsEx");
// logrez = GetComputerNameEx(ComputerNameDnsDomain,IMI,ukz);
 
*/
 
// return 0;
 
}
 
LRESULT CALLBACK DlgProc( HWND hDlg, UINT uMsg, 
                              WPARAM wParam, LPARAM lParam )
{
   
 switch( uMsg )
   {
      case WM_INITDIALOG :
 
                  
  break;
      case WM_COMMAND :
 
    switch( LOWORD( wParam ) )
            {
               case IDOK :
                      {
 
        }
                      }
                      break;
break;
 }
 
return true;
   }
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2008, 10:00
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int ShutdownWindows()
{
  HANDLE            hToken;
  LUID              takeOwnershipValue;
  TOKEN_PRIVILEGES  tkp;
  if (!OpenProcessToken(GetCurrentProcess(),
                        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    return 0;
  if (!LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, &takeOwnershipValue))
    return 0;
  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Luid = takeOwnershipValue;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken, false, &tkp, sizeof(TOKEN_PRIVILEGES), 0, 0);
  if (GetLastError())
    return 0;
  flag = false;
  return ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}
0
 Аватар для dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
10.06.2008, 19:22
Люди.. А как вам тупой способ через ShellExecute (кажется такое имя носит функция запуска команды через командную строку) вызвать "shutdown". Я недавно над компом глумился с помощью диспетчера заданий. Выполняешь эту команду с параметрами (можно в виндовой справке ознакомиться) и все. Не надо особых мудростей с WinAPI.
Сойдет за альтернативу? )
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
10.06.2008, 21:33
Дак ведь Shutdown.exe есть не во всех виндах.
0
xobot
31.07.2009, 07:03
Вот так можно "жестко" выключить компьютер:

C++
1
2
3
4
5
__asm
{
   mov  al,0F0h  
   out  64h,al
}
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
14.04.2011, 10:19
Да, жесче некуда. Программу так можно только повесить.
0
98 / 101 / 30
Регистрация: 21.10.2012
Сообщений: 320
05.11.2012, 16:57
Lord Voodoo, а для windows 7 , будет работать хорошо ?

Просто не так давно, на windows 7, попробывал вот такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HANDLE hToken;
TOKEN_PRIVILEGES* NewState;
OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
NewState = (TOKEN_PRIVILEGES*) malloc (sizeof (TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
 
NewState->PrivilegeCount = 1;
LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, &NewState->Privileges[0].Luid);
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, NewState, NULL, NULL, NULL);
free(NewState);
CloseHandle (hToken);
 
ExitWindowsEx(EWX_POWEROFF, 0);
В итоге не знаю как, видно магическим образом, диск C стал D, а диск D стал C, и в итоге компьютер больше не включился.
1
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
05.11.2012, 19:21
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Дак ведь Shutdown.exe есть не во всех виндах.
Хмм.. С 2000 по 7 Shutdown.exe есть. Вы 9Х имете ввиду?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
06.11.2012, 14:52
Цитата Сообщение от _lucius_ Посмотреть сообщение
Хмм.. С 2000 по 7 Shutdown.exe есть. Вы 9Х имете ввиду?
Сейчас уже и не вспомню. Много воды утекло.
0
Эксперт GPSS
 Аватар для SergProgC++
555 / 414 / 105
Регистрация: 02.07.2010
Сообщений: 1,729
07.11.2012, 00:34
Отошли друзья от темы, предлагаю вашему вниманию программу+исходники TimerPC, Deovalek666 рассмотрите исходники и найдете по комментариям то что вам нужно, там реализовано несколько функций и отключение и перезагрузка и выход из системы, если что не будет ясно поясню.
Вложения
Тип файла: rar TimerPC.rar (7.28 Мб, 96 просмотров)
0
19 / 18 / 1
Регистрация: 06.09.2012
Сообщений: 110
15.11.2012, 10:42
Можно сделать гораздо удебнее, но не знал что не бывает на пк ShutDown, а так вот:

C++
1
2
3
4
5
6
7
int main()
{
  int a;
  cout << time : ";
  cin >> time;
  lstrcat("shutdown -s -t", time);
}
Это самый легки вариант из всех
0
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 10:49
aassdd, Вместо -s -t лучше /s /t 0, толи на висте, толи на 7'ке (точно не помню) с черточками не будет работать, а так везде где есть shutdown должно робить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2012, 10:49
Помогаю со студенческими работами здесь

Программа для выключения компьютера, все ли верно в коде
В программирование совсем недавно и вот решил написать программу для выключения компа... хочу чтоб вы посмотрели и может подсказали какие...

Вывести IP-адрес компьютера, имя компьютера, имя пользователя и дату и время включения/выключения компьютера
необходимо написать скрипт который, будет лежать в автозагрузке на локальных машинах и выводить в log файл(который лежит на сетевом диске)...

Как написать программу для Samsung Smart TV, реализующая таймеры включения/выключения
Доброе время суток! Сразу прошу прощения, если пост не в теме. Недавно столкнулся с проблемой недостатка таймеров...

Как увидеть события перед выключения компьютера
Имеется компьютер который находится на отдаленном участке, доступ только удаленно.Компьютер выключается сам собой через некоторое...

Нужно создать программу для фиксации компонентов компьютера
Задали программу сделать на лето. Никак не могу сообразить как сделать. (Не обязательно на делфи можно на любом другом языке) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru