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 LockWorkStation
funçã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 aDllCall
função para chamar uma função de API Win32 sem corromper a pilha de chamadas. Você também pode usar oProcessClose
em vez de TASKKILL
. Para sua referência,aqui está oLockWorkStation
referê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 oWinClose
funcionar 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 TASKKILL
comando:
@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 TASKKILL
comando, consulteeste artigo da Microsoft.
Responder2
Etapa 1: Escreva um script que encerrará o programa
Crie um arquivo nomeado terminate.vbs
com 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.exe
pelo 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.
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.
NoAçõesguia, crie uma nova ação que iráIniciar um programa.Programa/roteiro:deveria estarcscript.exe. Insira o caminho terminate.vbs
e o nome do processo que deseja encerrar no campoAdicione argumentos (opcional):caixa. Meus argumentos são"C:\Users\Public\Documents\terminate.vbs" notepad.exe
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_LOCK
eventos e fazer as coisas necessárias.
Um exemplo pode ser encontrado em:https://superuser.com/a/264973/1686