Como faço para sair automaticamente de um programa quando bloqueio a tela no Windows 7?

6

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

    
por h_a_z_ 27.07.2011 / 16:02

3 respostas

4

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 .

    
por 27.07.2011 / 16:06
3

Passo 1: Escreva um script que finalize o programa

Crie um arquivo chamado 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 esse 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: agende o script para ser executado quando você bloquear a tela

Abra o Agendador de Tarefas (você pode pesquisar no menu Iniciar), clique com o botão direito do mouse em Biblioteca do Agendador de Tarefas e selecione Criar Tarefa ... . Na guia Geral , atribua um nome e uma descrição à sua tarefa. Você pode alterar Configurar para: para Windows 7, Windows Server 2008 R2 , se desejar, mas isso não é necessário.

NaguiaAcionadores,crieumnovoacionadoredefinaIniciaratarefa:comoNobloqueiodaestaçãodetrabalho.Orestodasconfiguraçõespadrãoestãobem.

Na guia Ações , crie uma nova ação que irá Iniciar um programa . Programa / script: deve ser cscript.exe . Digite o caminho para terminate.vbs e o nome do processo que você deseja encerrar na caixa Adicionar argumentos (opcional): . Meus argumentos são "C:\Users\Public\Documents\terminate.vbs" notepad.exe

Você pode verificar as guias Condições e Configurações para mais opções, mas nenhuma delas é necessária aqui. Salve a tarefa e pronto. Quando você bloqueia a tela, o processo deve terminar.

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

    
por 27.07.2011 / 16:59
1

Você pode escrever um programa usando WTSRegisterSessionNotification() para esperar por WTS_SESSION_LOCK eventos e fazer as coisas necessárias.

    
por 27.07.2011 / 16:29

Tags