Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как написать прогу по выключению компа??? Добавлено: 28.09.06 10:34  

Автор вопроса:  DL | ICQ: 217213713 
Здравствуйте, начал разбираться в VB6 и столкнулся с проблемой, в ХР не работают некоторые функции??? есть такой Компонент CompControl )) и есть у него такие функции как OpenCDROM() - Открыть CD-ROM и т.д.... так же есть ShutDown()- Завершить работу компьютера , но почему то при написании мной програмки, с использованием данных функций функция OpenCDROM() работает а вот ShutDown() - нет! с чем это связано? и можно ли использовать API функции Винды, для выключения компа? через VB6? если можете помогите) Заранее благодарен! (Можно отправлять прямо на мыло Borison2004@mail.ru)

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #1 Добавлено: 28.09.06 10:48
API-функции ExitWindowsEx, InitiateSystemShutdown или IbitiateSystemShutdownEx. Там есть заморочки с правами, так что стоит внимательно читать описание этих функций в MSDN. ричем две последнии работают только в Windows 2000 и в Windows XP.

Еще стоит глянуть в сторону WMI

Ответить

Номер ответа: 2
Автор ответа:
 DL



ICQ: 217213713 

Вопросов: 1
Ответов: 7
 Профиль | | #2 Добавлено: 28.09.06 11:22
спасибо, но наверно я не так выразился, я еще только начинаю разбираться, нельзя ли по подробнее объяснить что есть MSDN. и где про них почитать?)) и что такое WMI ?

Ответить

Номер ответа: 3
Автор ответа:
 DL



ICQ: 217213713 

Вопросов: 1
Ответов: 7
 Профиль | | #3 Добавлено: 28.09.06 11:23
 а что CompControl )) в этом случае вообще не помошник?)

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 28.09.06 17:55
ExitWindowsEx
где про них почитать?))
Yandex знает
http://www.yandex.ru/yandsearch?text=Visual+Basic+ExitWindowsEx&stype=www

Ответить

Номер ответа: 5
Автор ответа:
 DL



ICQ: 217213713 

Вопросов: 1
Ответов: 7
 Профиль | | #5 Добавлено: 28.09.06 18:25
Народ, что то ничего у меня не получилось, взял с этого сайта даже коды, Call ShutDown(EWX_SHUTDOWN) но на выходе опять ноль((( кто нибудь может помочь реальным советом или кодом??? на ХР??? Александр, спасибо за ссылку) со скоростью моего интернета....я туда к утру попаду!)тут столько народу шарит, что никто помочь не может????

Ответить

Номер ответа: 6
Автор ответа:
 DL



ICQ: 217213713 

Вопросов: 1
Ответов: 7
 Профиль | | #6 Добавлено: 28.09.06 18:49
Александр, вот полазил я по твоим ссылкам, и нашел кучу таких как я ни у кого не работает(( хотя выудил кое что :
Платформа
Win 95/98, Win NT
ExitWindowsEx выключает или перезагружает компьютер.Функция возвращает 0 в случае ошибки и 1 в успешном случае.
а как быть с ХР??? что на нем не прет? дайте хотябы описание как ее декларировать, ну надо просто срочно((

Ответить

Номер ответа: 7
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #7 Добавлено: 28.09.06 19:35
В XP:
Shell "shutdown -s -t 0"
или
Shell "start shutdown -s -t 0"
(Хотя, может не работать)

Ответить

Номер ответа: 8
Автор ответа:
 DL



ICQ: 217213713 

Вопросов: 1
Ответов: 7
 Профиль | | #8 Добавлено: 28.09.06 19:53
programmer, ну вот что то обнадеживающее ";(Хотя, может не работать)" а вот это не радует( а ты не мог бы помоч с описанием этой функции в модуле? хотелось бы по больше конкретики)))

Ответить

Номер ответа: 9
Автор ответа:
 DL



ICQ: 217213713 

Вопросов: 1
Ответов: 7
 Профиль | | #9 Добавлено: 28.09.06 20:07
На этом сайте в Библиотеке кодов валяется этот код))) пробовал его, но не каких реакций вроде все согласно коду в нем что-то не правильно? может кто то подправит??

'КОД ФОРМЫ

Private Sub mnuCompOff_Click()
Call ShutDown(EWX_SHUTDOWN)
End Sub

Private Sub mnuCompReboot_Click()
Call ShutDown(EWX_REBOOT)
End Sub

'КОД МОДУЛЯ

Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)

Public Enum TokenRights
TOKEN_ASSIGN_PRIMARY = &H1
TOKEN_DUPLICATE = &H2
TOKEN_IMPERSONATE = &H4
TOKEN_QUERY = &H8
TOKEN_QUERY_SOURCE = &H10
TOKEN_ADJUST_PRIVILEGES = &H20
TOKEN_ADJUST_GROUPS = &H40
TOKEN_ADJUST_DEFAULT = &H80
TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
TOKEN_READ = (STANDARD_RIGHTS_READ Or TOKEN_QUERY)
TOKEN_WRITE = (STANDARD_RIGHTS_WRITE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE)
End Enum

Public Enum PrivilegeAttributes
SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
SE_PRIVILEGE_ENABLED = &H2
SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000
End Enum

Public Enum ExitOptions
EWX_LOGOFF = 0
EWX_SHUTDOWN = 1
EWX_REBOOT = 2
EWX_FORCE = 4
End Enum

Public Enum TokenAccess
TokenUser = 1
TokenGroups = 2
TokenPrivileges = 3
TokenOwner = 4
TokenPrimaryGroup = 5
TokenDefaultDacl = 6
TokenType = 8
TokenImpersonationLevel = 9
TokenStatistics = 10
End Enum

Type LUID
lowPart As Long
HighPart As Long
End Type

Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As PrivilegeAttributes
End Type

Type PTOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(0) As LUID_AND_ATTRIBUTES
End Type

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As TokenRights, ByRef TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValueA Lib "advapi32" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As PTOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As Long, ByRef ReturnLenght As Long) As Long
Private Declare Function AdjustTokenPrivilegesOld Lib "advapi32" Alias "AdjustTokenPrivileges" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As PTOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As PTOKEN_PRIVILEGES, ByRef ReturnLenght As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As ExitOptions, ByVal dwReserved As Long) As Long

Public Function ShutDown(Operation As ExitOptions) As Long
Dim lngProcess As Long
Dim lngReturn As Long
Dim lngToken As Long
Dim udtLUID As LUID
Dim lngTokenPrivileges As TokenRights
Dim udtTokenPrivNew As PTOKEN_PRIVILEGES
lngProcess = GetCurrentProcess()
lngTokenPrivileges = TOKEN_ADJUST_PRIVILEGES
lngReturn = OpenProcessToken(lngProcess, lngTokenPrivileges, lngToken)
lngReturn = LookupPrivilegeValueA(vbNullString, "SE_SHUTDOWN_NAME", udtLUID)
udtTokenPrivNew.PrivilegeCount = 1
udtTokenPrivNew.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
udtTokenPrivNew.Privileges(0).pLuid = udtLUID
lngReturn = AdjustTokenPrivileges(lngToken, 0, udtTokenPrivNew, 0&, 0, 0&;)
ShutDown = ExitWindowsEx(Operation, 0)
End Function

надо то всего навсего комп выключить, а ни один совет не помогает((( блин....

Ответить

Номер ответа: 10
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #10
Добавлено: 28.09.06 23:07
Public Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (Public Const EWX_SHUTDOWN = 1, 0) As Long
Чё, не работает?

Ответить

Номер ответа: 11
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 29.09.06 00:52
   Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

   Public Const EWX_LOGOFF = 0
   Public Const EWX_SHUTDOWN = 1
   Public Const EWX_REBOOT = 2
   Public Const EWX_FORCE = 4

Ответить

Номер ответа: 12
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #12 Добавлено: 29.09.06 10:02
Выключить комп можно так:
Private Sub Command1_Click()
    Dim OpSysSet, obj
    Set 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
End Sub

Правда если есть активное соединение с Internet, тогда все не так гладко...

Ответить

Номер ответа: 13
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #13
Добавлено: 29.09.06 16:05
ёмоё, во флуда развели. Объяснили тебе, чтобы выключить или перезагрузить компьютер нужно получить привелегии(если ОС XP) и вызывать ExitWindowsEx
Вот тебе код, но будь так добр, читай и ищи сам, этих проимров как грязи.
'Detect if the program is running under Windows NT
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
'set the shut down privilege for the current application
Public Sub EnableShutDown()
    Dim hProc As Long
    Dim hToken As Long
    Dim mLUID As LUID
    Dim mPriv As TOKEN_PRIVILEGES
    Dim mNewPriv As TOKEN_PRIVILEGES
    hProc = GetCurrentProcess()
    OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
    LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
    mPriv.PrivilegeCount = 1
    mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
    mPriv.Privileges(0).pLuid = mLUID
    ' enable shutdown privilege for the current application
    AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
End Sub
' Shut Down NT
Public Sub ShutDownNT(Force As Boolean)
    Dim flags As Long
    flags = EWX_SHUTDOWN
    If Force Then flags = flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx flags, 0
End Sub
'Restart NT
Public Sub RebootNT(Force As Boolean)
    Dim flags As Long
    flags = EWX_REBOOT
    If Force Then flags = flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx flags, 0
End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам