Como saio automaticamente de um programa ao bloquear a tela no Windows 7?

Como saio automaticamente de um programa ao bloquear a tela no Windows 7?

Existe uma maneira de sair automaticamente de um programa no Windows 7 sempre que eu bloquear a tela?

Responder1

De acordo com a sugestão de grawity,não use o batchfile que coloqueino final desta resposta. Isto é porquerundll32.exe nãocorresponde à convenção de chamada da LockWorkStationfunção API Win32 (consulteesta entrada do blog MSDNpara detalhes). Dito isto, existe uma alternativa melhor, que não envolve muito trabalho.

Você pode usar oLinguagem de script AutoIte aDllCallfunção para chamar uma função de API Win32 sem corromper a pilha de chamadas. Você também pode usar oProcessCloseem vez de TASKKILL. Para sua referência,aqui está oLockWorkStationreferência do MSDN.

Coloque as duas linhas a seguir em um arquivo e salve-o como exitandlock.au3(ou algo semelhante). Você pode então executá-lo com o AutoIt (ou até mesmo compilá-lo em um .exe, se desejar).

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á-la para bloquear sua estação de trabalho. Alternativamente, você pode compilá-lo em um arquivo .exe e configurá-lo para ser executado como uma tarefa agendada depois que o computador estiver inativo.

Finalmente, você também pode querer usar oWinClosefuncionar como uma alternativa a ProcessClose.


Como eu disse, por favornão use esse método. Mantenho-o aqui apenas para completar, pois esta é uma das formas mais utilizadas na internet. Você pode usar um arquivo em lote simples para fazer isso usando o TASKKILLcomando:

@ECHO OFF
TASKKILL /IM yourapp.exe
Rundll32.exe User32.dll,LockWorkStation

Em seguida, basta executar o batchfile quando quiser bloquear sua estação de trabalho. Alternativamente, você também pode atribuir uma tecla de atalho para executar o arquivo em lote e, em seguida, pressionar essa combinação de teclas quando quiser bloqueá-lo. Para obter mais detalhes sobre o TASKKILLcomando, consulteeste artigo da Microsoft.

Responder2

Etapa 1: Escreva um script que encerrará o programa

Crie um arquivo nomeado terminate.vbscom este conteúdo:

set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
strprocessname = wscript.arguments.item(0)
strquery = "select * from win32_process where name='" & strprocessname & "'"
set colitems = objwmiservice.execquery(strquery,,48)
for each objitem in colitems
    objitem.terminate
next

Teste este script abrindo um prompt de comando e executando cscript.exe "C:\path\to\terminate.vbs" notepad.exe. Substitua notepad.exepelo nome do processo que você deseja encerrar.

Etapa 2: programe a execução do script quando você bloquear a tela

AbrirAgendador de tarefas(você pode pesquisar no menu Iniciar), clique com o botão direitoBiblioteca do Agendador de Tarefase selecioneCriar tarefa.... NoEm geralguia, dê um nome e uma descrição à sua tarefa. Você pode mudarConfigurar para:paraWindows 7, Windows Server 2008 R2se quiser, mas isso não é necessário.

Criar tarefa - guia Geral

NoGatilhosguia, crie um novo gatilho e definaComece a tarefa:paraNo bloqueio da estação de trabalho. O resto das configurações padrão estão bem.

Criar Tarefa – Novo Gatilho

NoAçõesguia, crie uma nova ação que iráIniciar um programa.Programa/roteiro:deveria estarcscript.exe. Insira o caminho terminate.vbse o nome do processo que deseja encerrar no campoAdicione argumentos (opcional):caixa. Meus argumentos são"C:\Users\Public\Documents\terminate.vbs" notepad.exe

Criar Tarefa - Nova Ação

Você pode verificar oCondiçõeseConfiguraçõesguias para mais opções, mas nenhuma delas é necessária aqui. Salve a tarefa e pronto. Ao bloquear a tela, o processo deve ser encerrado.

Observe que se você bloquear a tela e desbloquear rapidamente, poderá ver uma janela de prompt de comando ou o processo que deseja encerrar ainda em processo de encerramento. Isso depende de quanto tempo leva para o processo terminar normalmente.

Responder3

Você pode escrever um programa usando WTSRegisterSessionNotification()esperarWTS_SESSION_LOCKeventos e fazer as coisas necessárias.

Um exemplo pode ser encontrado em:https://superuser.com/a/264973/1686

informação relacionada