IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> выключить комп
kikoz
сообщение 18.03.2007 19:23
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  1  +


привет,народ smile.gif в программировании я начинающий любитель.понадобилась тут мне програмка,которая бы выключала комп через заданное количество минут (ну скажем до 1000) искать такую прогу в нете лень,да разобраться самому было бы приятнее. как бы такое реализовать на паскале? какой оператор комп выключает-то? smile.gif


--------------------
Знанием API пугать никого не нужно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 18.03.2007 19:33
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Начинающему любителю лучше начинать с примитива.

 ! 
Нечего сказать по теме ? Промолчи. Человек пришел с конкретным вопросом и хочет получить на него ответ



Сообщение отредактировано: klem4 - 19.03.2007 8:29


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kikoz
сообщение 18.03.2007 19:37
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  1  +


Цитата(Tan @ 18.03.2007 19:33) *

Начинающему любителю лучше начинать с примитива.


спасибо,но лучше ссылочку на исходник blum.gif


--------------------
Знанием API пугать никого не нужно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 19.03.2007 8:31
Сообщение #4


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
kikoz


Решение нужно именно на Паскале ? Делфи не подойдет ? Там есть функции ExitWindows и ExitWindowsEx, с помощью которых это реализуется.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 19.03.2007 10:27
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Для паскаля можно сделать так:
asm
mov ah,0dh { Dos fn release cache}
int 21h
mov ax,5301h {APM function 1, Real Mode Connect}
sub bx,bx {APM BIOS (power device ID)}
int 15h
jc @Exit
mov ax,530eh {APM function e, APM Driver Version}
sub bx,bx {APM BIOS}
mov cx,0102h {select APM 1.2 functionality}
int 15h
jc @Exit
mov ax,5307h {APM function 7, Set Power State}
mov bx,1 {All devices}
mov cx,3 {Off state}
int 15h
@Exit:
end;

С виндовсом наверное не прокатит, не знаю, сейчас пробовать не хочется smile.gif

Сообщение отредактировано: Malice - 19.03.2007 10:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kikoz
сообщение 19.03.2007 12:47
Сообщение #6





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  1  +


дельфи подойдет smile.gif а вот за ассемблер я пока не принимался,так что в плане образования решение на ассемблере мне пока не интересно,но в любом случае спасибо за беспокойство.приду домой-попробую


--------------------
Знанием API пугать никого не нужно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kikoz
сообщение 19.03.2007 16:18
Сообщение #7





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  1  +


оказывается тут не все так просто,пообщался с дядей Гуглем,нашел один способ,но мне кажется он чреват потерей данных (на момент выключения у меня будет работать всего одна программа-eMule):


var
t: _Token_Privileges;
ht: cardinal;
rl: cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ht) then begin
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', t.Privileges[0].Luid);
t.PrivilegeCount:=1;
t.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(ht, false, t, 0, nil, rl);
end;
ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN, 0);
end;


проверить пока не могу-на работе нету Делфи



--------------------
Знанием API пугать никого не нужно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 18:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"