Correr programa VB sin accesar Windows

Hola:
Alguien sabe como puedo ejecutar un programa de la siguiente manera:
-Que al iniciar Windows se ejecute automáticamente(No creo tener problemas con esto).
-Que una vez ejecutado el programa se sobreponga a Windows y no permita al usuario hacer algo que no sea la funcionalidad del mismo (que windows esté bloqueado completamente al usuario).
-Que haya un escape a windows con password (para el programador).
-El código que se tenga que escribir que sea en Visual Básic.

1 Respuesta

Respuesta
1
Ok, en VB tendrías una opción para ello realmente simple, un formulario topMost que se sobreponga a todos y cubra la pantalla completa... ese formulario al ser topMost no puede ser cubierto por nadie más...
No sin antes, te advierto que para Windows 9x, deberás remover la aplicación del Ctrl+Alt+Sup (sino, no hay chiste!...
Para ello usas este código:
'--------------
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
Public Const RSP_SIMPLE_SERVICE = 1
Public Const RSP_UNREGISTER_SERVICE = 0
'para remover una aplicacion del Ctrl+Alt+Sup, debes llamar a MakeMeService:
Public Sub RemoveProgramFromList()
Dim lngProcessID As Long
Dim lngReturn As Long
lngProcessID = GetCurrentProcessId()
lngReturn = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
End Sub
'para restaurar esa aplicación en el Ctrl+Alt+Delete
Public Sub AddProgramToList()
Dim lngProcessID As Long
Dim lngReturn As Long
lngProcessID = GetCurrentProcessId()
lngReturn = RegisterServiceProcess(pid, RSP_UNREGISTER_SERVICE)
End Sub
'------
Posteriormente, debes leer la configuración de pantalla, para hacer a tu form más grande que tu área de pantalla...
'----
Public Type Window_Area
Left As Long
Top As Long
Right As Long
Bottom As Long
Left_Twip As Long
Top_Twip As Long
Right_Twip As Long
Bottom_Twip As Long
Area_Width As Long
Area_Height As Long
Area_Width_Twip As Long
Area_Height_Twip As Long
End Type
Public Function GetSystemArea() As Window_Area
Dim rc As RECT
Dim twipsx As Long
Dim twipsy As Long
twipsx = Screen.TwipsPerPixelX
twipsy = Screen.TwipsPerPixelY
Call SystemParametersInfo(SPI_GETWORKAREA, 0&, rc, 0&)
With GetSystemArea
.Bottom = rc.Bottom
.Bottom_Twip = rc.Bottom * twipsy
.Right = rc.Right
.Right_Twip = rc.Right * twipsx
.Left = rc.Left
.Left_Twip = rc.Left * twipsx
.Top = rc.Top
.Top_Twip = rc.Top * twipsy
.Area_Height = .Bottom - .Top
.Area_Width = .Right - .Left
.Area_Height_Twip = .Area_Height * twipsy
.Area_Width_Twip = .Area_Width * twipsx
End With
End Function
'-----
Con esos valores... puedes llamar a la API para que muestre y redimensione el formulario que necesitas para "tapar" el Windows...
'-----
'la API, llamada SetWindowPos es asi
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'*--
Call SetWindowPos(frm.hwnd, i, t, l, w, h, Modo)
Ojo: El valor para i en tu caso es:
Public Const HWND_TOPMOST = -1
T y l son los respectivos tope y left.
W y h son tu ancho y largo del form
Y modo para tu caso sería una combinación así:
Public Const Modo = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW
¿Cualquier cosa, no he revisado muy bien el código, así que me avisas ante cualquier error y corrijo... ok?
Suerte con tu aplicación...
'----
'Puedes encontrar bastaste ayuda sobre la API en la MSDN
Excelente no pensé que me contestaran tan pronto, que bueno que hay gente como tú que saben y comparten sus conocimientos, yo también me dí de alta como experto y en la medida de mis posibilidades contesto preguntas, espero llegar a ser un gran experto y también ayudar a los demás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas