VB .NET - Bloqueando a estação de trabalho


O sistema operacional Windows fornece a possibilidade de bloquear a estação de trabalho impedindo o acesso de usuários não autorizados. Para desbloquear a estação o usuário tem que fornecer seu login e senha.

Os usuários do Microsoft Windows podem bloquear seu computador para evitar acesso não autorizado usando o menu que aparece ao pressionar as teclas Ctrl-Alt-Del, ou pressionando as tecla Windows+L. Isso oculta os aplicativos atualmente em execução e ainda impede a interação com eles até a estação de trabalho ser desbloqueada usando uma senha.

Você pode recriar essa função por meio de programação em uma aplicação VB.NET usando o recurso Platform Invocation Services (P/Invoke) e a função LockWorkStation da API do Windows.

A função LockWorkStation é uma função simples que não aceita parâmetros e retorna um valor booleano. O valor de retorno é true se o bloqueio for bem sucedido e false se o computador não pode ser bloqueado.

Há várias razões para que o bloqueio pode estar indisponíveis, dentre elas temos:

Portanto a função LockWorkStation é acessível apenas por processos em execução na área de trabalho interativa e o usuário deve estar conectado, e a estação de trabalho não pode estar bloqueada.

Usando LockWorkStation

Abra o Visual Basic 2010 Express Editon e crie um novo projeto do tipo Windows Forms Application com o nome BloquearEstacao;

No formulário form1.vb inclua um controle Button (btnBloquear);

A seguir para usar a função LockWorkStation primeiro você deve declará-la. Antes de adicionar o código para a função, adicione o seguinte usando diretiva para simplificar o acesso aos atributos P/Invoke no início do formulário:

Imports System.Runtime.InteropServices

Após isso podemos adicionar a declaração da função API para uma classe ou no próprio formulário conforme o código abaixo:

<DllImport("user32.dll", SetLastError:=True)> _
       Private Shared Function LockWorkStation() As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

Para bloquear a estação de trabalho, podemos chamar a função. No código abaixo o método LockWorkStation é chamado no evento CLick do botão de comando e seu valor de retorno está marcada por uma instrução if.

Se o resultado for verdadeiro, nenhuma ação adicional é necessária. Se ela é falsa, uma caixa de mensagem é exibida, indicando que a tentativa de bloqueio falhou.

Private Sub btnBloquear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBloquear.Click
        If Not LockWorkStation() Then
            MessageBox.Show("Não foi possível bloquear a estação de trabalho")
        Else
            MessageBox.Show("Estação de trabalho bloqueada")
        End If
End Sub

A versão para a linguagem C# (Visual C# 2010) é dada a seguir:

1- Declaração da API

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool LockWorkStation();

2- Definição da função

if (!LockWorkStation())
{
    MessageBox.Show("Não foi possível bloquear a estação de trabalho");
}

Pegue o projeto completo aqui: BloquearEstacaoVBNET.zip

1Ts 3:5 Por isso também, não podendo eu esperar mais, mandei saber da vossa fé, receando que o tentador vos tivesse tentado, e o nosso trabalho se houvesse tornado inútil.

1Ts 3:6 Mas agora que Timóteo acaba de regressar do vosso meio, trazendo-nos boas notícias da vossa fé e do vosso amor, dizendo que sempre nos tendes em afetuosa lembrança, anelando ver-nos assim como nós também a vós;

1Ts 3:7 por isso, irmãos, em toda a nossa necessidade e tribulação, ficamos consolados acerca de vós, pela vossa fé,

1Ts 3:8 porque agora vivemos, se estais firmes no Senhor.

Referências:


José Carlos Macoratti