Jump to content
СофтФорум - всё о компьютерах и не только

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


Recommended Posts

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

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

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

Link to comment
Share on other sites

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
Edited by Rulchik
Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

ExitWindowsEx 1, 0

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

EWX_LOGOFF

EWX_POWEROFF

EWX_REBOOT

EWX_SHUTDOWN

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

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

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

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

Link to comment
Share on other sites

Чтобы определить версию 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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

SHARKenstein

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

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

Вот пример:

Private Sub Command1_Click()

Dim lpVersionInformation As OSVERSIONINFO

lpVersionInformation.dwOSVersionInfoSize = Len(lpVersionInformation)

GetVersionEx lpVersionInformation

MsgBox lpVersionInformation.dwBuildNumber

End Sub

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

Link to comment
Share on other sites

dmc

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

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

  • 4 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...