De acordo com a sugestão do grawity, não use o arquivo batch que eu coloquei ao final desta resposta. Isso ocorre porque rundll32.exe
não corresponde à convenção de chamada da função da API LockWorkStation
Win32 (consulte esta entrada de blog do MSDN para detalhes). Dito isto, há uma alternativa melhor, que não envolve muito trabalho.
Você pode usar a linguagem de script AutoIt e o DllCall
função para chamar uma função de API do Win32 sem corromper a pilha de chamadas. Você também pode usar o ProcessClose
em vez de TASKKILL
. Para sua referência, aqui está a referência LockWorkStation
de o MSDN.
Coloque as duas linhas seguintes em um arquivo e salve-o como exitandlock.au3
(ou algo similar). Você pode então executá-lo com o AutoIt (ou até mesmo compilá-lo em um .exe, se quiser).
ProcessClose("yourapp.exe")
DllCall("user32.dll", "BOOL", "LockWorkStation")
Isso deve fornecer o que você deseja, sem corromper a pilha de chamadas. Você pode, então, vincular esse arquivo a uma tecla de atalho e usá-lo para bloquear sua estação de trabalho. Como alternativa, você pode compilá-lo em um arquivo .exe e configurá-lo para ser executado como uma tarefa agendada depois que o computador estiver inativo.
Por fim, convém usar a função WinClose
como uma alternativa para ProcessClose
.
Como eu disse, por favor não use este método . Eu o mantenho aqui apenas por completo, pois esta é uma das formas mais utilizadas na internet. Você pode usar um arquivo batch simples para fazer isso usando o comando TASKKILL
:
@ECHO OFF
TASKKILL /IM yourapp.exe
Rundll32.exe User32.dll,LockWorkStation
Em seguida, basta executar o arquivo batch quando quiser bloquear sua estação de trabalho. Como alternativa, você também pode atribuir uma tecla de atalho para executar o arquivo batch e, em seguida, apenas pressionar essa combinação de teclas quando quiser bloqueá-la. Para obter mais detalhes sobre o comando TASKKILL
, consulte este artigo da Microsoft .