Разработайте приложение, которое не потеряет фокус?

Я хочу разработать приложение, которое не позволит пользователю открывать или переходить к другому приложению, пока оно открыто. Он должен быть в Visual Basic. Например, если мое приложение открыто (работает), и пользователь пытается открыть любое другое приложение Windows, например "медиаплеер", он не должен открываться. Приложение не должно даже допускать запуск "диспетчера задач". Приложение должно полностью блокировать среду Windows во время ее работы.

Ответ 1

Очень хороший вопрос.:)

Можно ли достичь этого в VB?

Ответ Да!

Легко ли это?

Определенно не!

Однако несколько советов о том, как подойти к проблеме.

1) Отключите диспетчер задач

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) Убедитесь, что ваша программа всегда на высоте

a) Скрыть панель задач

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) Показывать ваше приложение Всегда сверху

'~~> 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) Показать приложение в режиме максимальной

Разверните форму, чтобы на рабочем столе отображалась только ваша форма, как показано в приложении "Киоск". В зависимости от необходимости вы также можете отключить кнопку "Минимум" или строку заголовка. В таком случае не забудьте добавить кнопку, чтобы пользователь мог щелкнуть ее, чтобы выйти из формы.

3) Отключите меню "Пуск"

Этот код зависит от используемой вами версии Windows. Сделайте поиск в Google, вы найдете множество примеров.

Аналогичным образом, вам нужно позаботиться о маленьких мелочах, но этот пост даст вам хорошее начало. Если вы ищете полное решение в одном месте, то я сомневаюсь, что вы когда-нибудь его получите;)

НТН

Ответ 2

Взгляните на Desktop APIi, чтобы создать свою собственную "песочницу", но очень осторожно, так как очень легко заблокировать себя из основной рабочий стол.

Также см. этот вопрос для получения дополнительной информации.