Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Блин, как комп вырубить в XP


Рекомендуемые сообщения

Субж, сам находил кучку исходников для перезагрузки, переключения пользователей, выключения, но срабатывало тока переключение пользователя (LogOff). Я конечно знаю функцию

ExitWindowsEx 1,0
Тока она почемуто LogOff делает, а машину не вырубает.

Помажите люди добрые, а то у меня таймер не завершённый, он под 9х виндой работает, а пд ХР никак не хочет.

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

DIKAR™

Перестань пороть чушь. Я уже неоднократно взывал к тому, что если нечего сказать — не говори. :D

SHARKenstein

Попробуй сделать так:

dim OpSysSet, objSet OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate," & _                        "(Shutdown)}//./root/cimv2").ExecQuery _                        ("SELECT * FROM Win32_OperatingSystem" &_                        " WHERE Primary=true")For Each obj In OpSysSet   obj.Win32Shutdown(8)Next
Изменено пользователем Rulchik
Ссылка на комментарий
Поделиться на другие сайты

Rulchik, спасибо, ты где такой хитрый, и главное рабочий, код надыбал?

Ещё бы как заставить комп различать какая винда установлена (9х или NT (XP)). А то как я понимаю этот код не будет в 98-й винде пахать. Вот я и думаю как бы заставить определить прогу что за система стоит и в зависимости от этого выбрать вариант кода для выключения. Самое главно определить систему, а дальше я и сам справлюсь.

ЗЫ. DIKAR™, ты уж совсем... мне программно надо, что бы к компу не надо было бегать, а чтоб он сам отрубался.

Ссылка на комментарий
Поделиться на другие сайты

ExitWindowsEx 1, 0

Первый параметр может принимать значения

EWX_LOGOFF

EWX_POWEROFF

EWX_REBOOT

EWX_SHUTDOWN

и при необходимости прибавлять флаг EWX_FORCE

Второй параметр не используется. Естественно константы нужно объявить в модуле.

Перезагружался у тебя потому, что ты использовал флаг EWX_SHUTDOWN, надо использовать EWX_POWEROFF

Это есть самый оптимальный код, т.к. Win32 API. Если будешь использовать код выше, не факт что он будет работать под всеми ОС

Ссылка на комментарий
Поделиться на другие сайты

Чтобы определить версию windows, существует API функция GetVersionEx, у нее единственный параметр структура типа OSVERSIONINFO

Public Type OSVERSIONINFO

dwOSVersionInfoSize As Long

dwMajorVersion As Long

dwMinorVersion As Long

dwBuildNumber As Long

dwPlatformId As Long

szCSDVersion As String * 128

End Type

Ссылка на комментарий
Поделиться на другие сайты

dmc

EWX_LOGOFFEWX_POWEROFF EWX_REBOOT EWX_SHUTDOWN

Ты забыл указать, что это константы и они принимают определённые циферки. Но всё равно, я уже их перепробывал раньше и у меня нифига не вышло, комп делает LogOff и усё тут.

На счет функции GetVersionEx, че-то я не понял, как её задавать?

Описывается она так понимать так:

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As LongPublic Type OSVERSIONINFOdwOSVersionInfoSize As LongdwMajorVersion As LongdwMinorVersion As LongdwBuildNumber As LongdwPlatformId As LongszCSDVersion As String * 128 End Type

А вот как её вызывать, и какой ответ она приносит?

Подробнее плиз на счёт её использования.

Ссылка на комментарий
Поделиться на другие сайты

SHARKenstein

Насчет того, что это константы я в курсе, а вот то, что ты используешь цифры это зря, написав более менее большую программу или переходя на другой язык, будут проблемки.

Чтобы работать со структурой, необходимо dwOSVersionInfoSize присвоить размер самой структуры, т.е. выделить память под нее, а затем можешь использовать как хошь.

Вот пример:

Private Sub Command1_Click()

Dim lpVersionInformation As OSVERSIONINFO

lpVersionInformation.dwOSVersionInfoSize = Len(lpVersionInformation)

GetVersionEx lpVersionInformation

MsgBox lpVersionInformation.dwBuildNumber

End Sub

При нажатии кнопки выскочит номер билда ОС. Не забудь также объявить все, что нужно в модуле.

Ссылка на комментарий
Поделиться на другие сайты

dmc

Насчет того, что это константы я в курсе, а вот то, что ты используешь цифры это зря, написав более менее большую программу или переходя на другой язык, будут проблемки.
Дык на то они и константы, их опредилить надо, т.е. сказать, чему им равняться.
GetVersionEx lpVersionInformation
С этим я справился, но как из цифр, содержащихся с этих переменных, опредилить какая винда (95,98,NT,2000,Me,XP) ? Ведь в завимости от тога, какая винда, мне надо тот или иной код запускать.
Ссылка на комментарий
Поделиться на другие сайты

Кстати насчет выключения компа, можешь использовать API ShellExecute или т.п. и работать с shutdown

shutdown -s -f -t 0 ....

Ссылка на комментарий
Поделиться на другие сайты

Ну вот, после ссылки, хоть понятно стало, где именно и как означается версия виндов.

Кажись тема закрыта, пасиб за ответы.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...