La Web del Programador: Comunidad de Programadores
 
    Pregunta:  12983 - COMO ACTIVAR LAS API DE WINDOWS 2000
Autor:  mario tapia
hola amigos:

tengo un problema y necesito ayuda.

tengo un programa que quiero instalar en un laboratorio de computadores y me permite controlar el acceso de los usuarios a este laboratorio. funciona de la siguiente manera, los usuarios deben registrarse en un programa que esta en la recepcion del laboratorio y los datos se almacenan en una base de dato en access en la red. mi programa debe verificar en que el usuario que va a utilizar un computador del laboratorio este debidamente registrado y no permita el uso del computador a la persona. mi programa controla o restrinje al usuario para que no haga cosas indevidas, entonces mi programa deja el puntero del mouse que se mueva en una parte especifica, no permite que muevan la ventana del programa, que no ejecuten ctrl+alt+supr u otra combinacion de teclas, mantiene siempre visible la ventana de mi programa y apaga de forma automatica el computador.
para esto utilizo api's de windows y lo he probado en windows'98 y funciona, pero en windows 2000 no funciona porque no toma los api's.

mi pregunta es como puedo activar o utilizar las api's del windows 2000 para que funcione mi programa?.

agradeceria su ayuda lo mas pronto posible.

  Respuesta:  Gaba
Descaragate de esta direcion el visor deapi.
http://www.allapi.net/agnet/apiguide.php. Trae ejemplos ,explicaciones,relaciones entre las apis,ES MUY BUEO
Aqui te dejo un poco de codigo de como apagar el ordenador

TRABAJO CON WINDOWS 2000
'''PARA REINICIAR WINDOWS''''''''''

' Tipos definidos
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type

Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type

' Las constantes
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_FORCE As Long = 4
Private Const EWX_REBOOT = 2

' Las funciones del API
Private Declare Function ExitWindowsEx Lib "user32" ( _
ByVal dwOptions As Long, ByVal dwReserved As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" _
(ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" _
(ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" _
(ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _
PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long

Public Sub ReinicializaEquipo()
Dim Msg As String

' Beep
Msg = "Este programa reiniciará Windows."
If MsgBox(Msg & vbCrLf & vbCrLf & "¿Seguro que quieres reiniciar Windows?", 4 + 16 + 256, "¡ ATENCIÓN !") = 6 Then
AdjustToken
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF
End If

End Sub
Private Sub AdjustToken()
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
TOKEN_QUERY), hdlTokenHandle
' Get the LUID for shutdown privilege.
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1 ' One privilege to set
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
' Enable the shutdown privilege in the access token of this
' process.
AdjustTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded

End Sub