PDA

Показать полную графическую версию : Си'шная функция AbortSystemShutdown()


Greyman
18-03-2004, 13:07
Вроде в С/С++ (в како-нить из реализаций) существует некая функция AbortSystemShutdown()... Здеся ссылачка, где она упоминается:
http://www.computer-mentors.co.uk/wwwboard/c/messages/592.html
Дык вопрос: Можно ли воспользоваться используемым ею методом стандартными средствами Windows (через rundll или еще как)? Надо бы ярлычек создать, который применяет метод данной функции. Если таких средств нет, то как проще всего скомпилить себе прожечку, котора выполняет только эту функцию?

hasherfrog
18-03-2004, 13:18
Читай MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/abortsystemshutdown.asp). Весь вопрос в привилегиях.

Greyman
18-03-2004, 19:45
hasherfrog
Ок, спасибо. Разжевано вроде все достаточно подробно, однако меня все-же интересует возможность использования метода уже непосредственно на прикладном уровне. Неужели обязательно програмулечку компилить придеться?...:(

bilytur
19-03-2004, 02:52
Greyman
Эта функция которая отменяет выключение компа.
То есть если вызвать ее в течении тайм-аута перед выключением - то комп не выключиться
Не понимаю зачем она тебе?
кстати работает только на NT/2000/XP


Добавлено:

Если все-таки нужно именно это то могу скомпилить тебе программку (мне это не долго)

вызывать будешь так:
prog.exe "MachineName"

где:
prog.exe - это я тебе скоипилю.
"MachineName" - это имя машины (см описание функции)

Ну или ярлык сделаешь соотв.

Greyman
19-03-2004, 06:20
bilytur
Не понимаю зачем она тебе?
Именно для этого и нужна - отменять завершение работы компа. Я поднял в другом топике (http://forum.oszone.net/topic.cgi?forum=22&topic=1808) вопрос вообще об возможных способах, из наиболее "правильных" получил ссылку на эту функцию, вот и пошел ее "рыть"...
Если все-таки нужно именно это то могу скомпилить тебе программку (мне это не долго)
О, будь другом, если не сложно. А то уж больно не хочеться ради одной программульки компилятор опять ставить...

bilytur
19-03-2004, 23:55
Ну раз обещал то я сделал что ты просил, только зачем тебе это нужно все равно не пойму.
Читаем описание AbortSystemShutdown:
The AbortSystemShutdown function stops a system shutdown started by using the InitiateSystemShutdown function.
Теперь читаем InitiateSystemShutdown (фрагмент):
...
dwTimeout
[in] Specifies the time (in seconds) that the shutdown dialog box should be
displayed. While this dialog box is displayed, the shutdown can be stopped
by the AbortSystemShutdown function.
Иными словами AbortSystemShutdown сработает только при показе диалога (shutdown dialog)
Во время тайм-аута.
(А во время показа этого диалога ты имхо фиг что запустить сможешь)

При выключении другими функциями:
Например ExitWindows(): ExitWindowsEx():
Она скорей всего не поможет.

Вобщем получился файл ASSD.EXE 6 kB (в архиве 2.5 kB)

Высылаю... (надеюсь rar есть)

bilytur
24-03-2004, 02:05
Greyman
Что молчишь как партизан на допросе?
Ты письмо то получил?
Подозреваю что эта функция делает немного не то что ты ожидал, но все равно сообщи хоть пару слов.
Я все-таки старался. Там, между прочим, не так уж все и просто было, немного повозиться пришлось.
Уж не обидел ли я тебя чем?
Сообщи, может что еще придумаем...

Greyman
24-03-2004, 05:51
bilytur
О, спасибо, получил. Только пока не поверял че с ней можно сделать. Дома 2000'ми *не пользуюсь, а на работе забываю... Постараюсь проверить...

LodSB
29-03-2004, 18:53
a как насчет вызвать "shutdown -a"? Это как раз отмена завершения работы, причем команда shutdown - встроенная в Windows

Greyman
30-03-2004, 14:24
LodSB
К сожелению не нашел ее ни в Win2K ни в win98SE :(. *ХР я предпочитаю пока не пользоваться, а на компьютере, где я ее все-таки попробовал, это эффекта не дало. Либо слишком для нее быстро завершение происходит, либо она срабатывает только при отмене завершения работы, выполняемой с определенным таймаутом (-t).

bilytur
31-03-2004, 03:05
Объясните мне тупому зачем это вообще надо?
То есть я не понимаю последовательность действий, которая приводит к этой ситуации.

Например нажимаешь завершение работы, и тут вдруг вспоминаешь что забыл отправить письмо своей бабушке. И так каждый день?

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

Или наконец какой-то злобный админ удаленно постоянно отрубает твой комп?

Greyman
31-03-2004, 06:25
bilytur
Объясните мне тупому зачем это вообще надо?
То есть я не понимаю последовательность действий, которая приводит к этой ситуации.
Например нажимаешь завершение работы, и тут вдруг вспоминаешь что забыл отправить письмо своей бабушке.
Ну что-то вроде. Но обычно сложнее, т. к. письмо можно и после перезагрузки отправить. А так бывает, что работаешь в некоторых программах, которые при их завершении автоматом не сохраняют результатов (различные вычисления, тестирования, мониторинг и т.д.), соответственно в лучшем случае придется начинать с начала, а в худшем пропадают важные данные без возвратно.
И так каждый день?
Нет конечно. Но мне, например, достаточно одного раза (пока было уже два), чтоб я озаботился данным вопросом на будущее.

hasherfrog
05-04-2004, 09:35
Greyman
Проверьте почту. Там не вирусы. Это я выслал Вам кое-что по теме.




© OSzone.net 2001-2012