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

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

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

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





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

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


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


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


Профи
****

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

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


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

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



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


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





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

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


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

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


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


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


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

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

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


Цитата
kikoz


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


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


--------------------
Знанием API пугать никого не нужно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 14.12.2019 14:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name