2012-04-22 7 views
10

Quiero desarrollar una aplicación que no permita al usuario abrir o saltar a otra aplicación mientras está abierta. Debe estar en Visual Basic. Por ejemplo, si mi aplicación está abierta (ejecutándose) y el usuario intenta abrir cualquier otra aplicación de Windows como "reproductor de medios", entonces no debería abrirse. La aplicación ni siquiera debería permitir la ejecución del "administrador de tareas". La aplicación debería bloquear completamente el entorno de Windows mientras se está ejecutando.¿Desarrollar una aplicación que no pierda su enfoque?

+2

Bueno, buena suerte con eso –

+2

Si está creando una aplicación de Kiosco como las que se encuentran en muchas tiendas electrónicas, tendrá que depender de la Política de grupo en Windows 7 más que de las restricciones en su propia aplicación. Google, "Desactivar el Administrador de tareas en Windows 7" –

+0

Esto solía llamarse una "Ventana modal del sistema". Digo "solía hacerlo" porque, desde Win32, Microsoft no ha proporcionado una forma integrada para hacerlo, y desaconseja en gran medida incluso intentar hacerlo. (Aunque intentan hacerlo por sus propios productos a veces). – RBarryYoung

Respuesta

14

Una muy buena pregunta. :)

¿Es posible lograrlo en VB?

La respuesta es !

¿Es fácil?

Definitivamente no!

Sin embargo, aquí hay algunos consejos sobre cómo abordar el problema.

1) Desactivar el Administrador de tareas

Sub DisableTaskManager() 
    Shell "REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f", vbNormalFocus 
End Sub 

Sub EnableTaskManager() 
    Shell "REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 0 /f", vbNormalFocus 
End Sub 

2) Asegúrese de que el programa está siempre encima

a) Ocultar la barra de tareas

Option Explicit 

'~~> http://allapi.mentalis.org/apilist/FindWindow.shtml 
Private Declare Function FindWindow Lib "user32" Alias _ 
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName _ 
As String) As Long 

'~~> http://allapi.mentalis.org/apilist/SetWindowPos.shtml 
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 

Private Const SWP_HIDEWINDOW = &H80 
Private Const SWP_SHOWWINDOW = &H40 

'~~> Show/Hide Taskbar 
Sub Sample() 
    '~~> To show the taskbar 
    ShowTskBar True 

    '~~> To hide the taskbar 
    ShowTskBar False 
End Sub 

Sub ShowTskBar(ShouldI As Boolean) 
    Dim Sid As Long 

    Sid = FindWindow("Shell_traywnd", "") 

    If ShouldI = True Then 
     If Sid > 0 Then _ 
     Sid = SetWindowPos(Sid, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) 
    Else 
     If Sid > 0 Then _ 
     Sid = SetWindowPos(Sid, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) 
    End If 
End Sub 

b) Muestre su aplicación siempre en la parte superior

'~~> http://www.allapi.net/apilist/SetWindowPos.shtml 
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 

Const HWND_TOPMOST = -1 
Const HWND_NOTOPMOST = -2 
Const SWP_NOSIZE = &H1 
Const SWP_NOMOVE = &H2 
Const SWP_NOACTIVATE = &H10 
Const SWP_SHOWWINDOW = &H40 

Private Sub Form_Activate() 
    SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, _ 
    SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE 
End Sub 

b) Muestre su aplicación en modo maximizado

Maximizar el formulario para que el escritorio muestra sólo su forma como se muestra en una aplicación de kiosco . Dependiendo de la necesidad, también puede desactivar el botón de minimizar o la barra de título. En tal caso, recuerde agregar un botón para que el usuario pueda hacer clic en eso para salir del formulario.

3) Desactivar el menú de inicio

Este código depende de la versión de Windows que está utilizando. Haga una búsqueda en Google, encontrará muchos ejemplos.

Del mismo modo, debe ocuparse de algunas pequeñas cosas pequeñas, pero esta publicación le dará un buen comienzo. Si usted está buscando una solución completa en un solo lugar entonces dudo que tendrá que conseguirlo;)

HTH

+0

+1 para el pensamiento lógico. –

+0

+1 cosas horribles –

+0

Gracias Pradeep/JFC :) –

0

Tome un vistazo a la Desktop APIi para crear su propia "caja de arena", pero mucho cuidado ya que es muy fácil para encerrarse en el escritorio principal.

Ver también this question para obtener un poco más de información.

Cuestiones relacionadas