Problema de foco de roubo

1

um tempo atrás, algo estranho começou a acontecer, ao pressionar Ctrl ou Alt Gr o foco é alterado. Eu encontrei vários recursos que não abordam como encontrar o processo real, mas sim como impedir que os aplicativos façam isso, o que não parece ser uma boa solução.

Mais uma vez, eu pesquisei e não encontrei nada além de hacks para o problema real, isso é não uma duplicada.

Eu preparei um pequeno aplicativo que detecta quando o foco muda. Tanto quanto eu posso dizer, isso acontece em todos os aplicativos que eu instalei. Abaixo está uma cópia da janela de saída do Visual Studio (com o aplicativo que eu configurei em execução):

Como eu reproduzi o problema:

  • Focalizou manualmente a janela do Bloco de Notas (o log # 1 apareceu).
  • Pressionado ctrl, tanto o log relacionado ao thread quanto o log # 2 apareceram.

Conteúdo da janela de saída:

1 - Pega de janela: 723652 | Processo: notepad | Janela: Sem título - Bloco de Notas | Exe arquivo: C: \ Windows \ system32 \ notepad.exe   O thread 0xafc foi encerrado com o código 259 (0x103).   2 - Maçaneta de janela: 526994 | Processo: notepad | Janela: Sem título - Bloco de Notas | Exe arquivo: C: \ Windows \ system32 \ notepad.exe

O que eu tentei:

  • Após o foco ser perdido pressionando ALT + F4 , tentando fechar o processo. [antes de chegar com o aplicativo].
  • Utilizou o Process Explorer para tentar identificar o processo (mas, como não consigo fechá-lo, não há ajuda)

O que eu acho que está acontecendo:

  • Desde quando o problema ocorre, nenhum outro processo está recebendo o foco, ele deve estar atribuindo a ele um valor nulo e reatribuindo à janela antiga, mesmo que ele não reconquiste o foco, mas de acordo com o aplicativo; isto é: a borda está esmaecida e não consigo interagir com a janela a menos que eu a clique novamente, embora ela deva ser focalizada novamente.

O que posso fazer para identificar o processo e não apenas impedir que os aplicativos mudem o foco?

Rodrigo Silva
fonte

Respostas:

0

Eu sei que esta é uma pergunta antiga e você pode não ser capaz de reproduzir o comportamento mencionado, mas eu ainda vou tentar responder, pois pode vir a calhar para alguém com comportamento semelhante.

Verificar causas mais comuns

Primeiro eu tentaria identificar se tenho algum aplicativo óbvio em execução no meu computador que possa estar causando isso. Tais aplicativos seriam:

  • Provedores de atalhos personalizados
  • Drivers de teclado ou mouse que podem, no caso, ter teclado ou mouse com botões adicionais. O motivo disso é que muitos deles simulam o uso de determinadas teclas pressionadas quando você clica ou pressiona esses botões adicionais.
  • Algum outro software que possa ser usado para simular a entrada do usuário

Agora, se isso não revelar quaisquer causas mais óbvias, eu continuaria com abordagens mais avançadas.

Injeção de código possível

A primeira coisa que faço é tentar verificar se algum código adicional pode ter sido injetado em um aplicativo específico (Notepad.exe no seu caso) verificando quais identificadores de DLL estão abertos e comparando-os com a lista de DLLs que você pode obter da maioria dos scanners de dependência.

Qualquer identificador de DLL aberto para um arquivo DLL que não é relatado pelo scanner de dependência pode ser a DLL de injeção em seu processo.

Então, no caso de encontrar um, eu tentaria descobrir a qual aplicativo ele pertence e, em seguida, com base no que essa aplicação pretende fazer, decida se essa DLL deveria ter sido injetada em meu aplicativo, em primeiro lugar ou não.

No caso, se eu descobrisse que nenhuma DLL deveria ter sido injetada em meu aplicativo a partir desse aplicativo ou se não consegui descobrir a qual aplicativo essa DLL específica pertence, eu a renomeia e, em seguida, reinicia o sistema operacional. se eu não fosse ser capaz de renomeá-lo de dentro do sistema operacional por causa de ele estar bloqueado, eu usaria um CD que pudesse ser botado e então renomeie esse arquivo para lá.

Após a reinicialização, eu primeiro verificaria se o comportamento ainda era persistente e depois também verificaria todos os aplicativos que poderiam estar usando essa DLL por conta própria para ver se eles ainda estão funcionando.

Injetar meu próprio código / gancho

Se a primeira abordagem não retornasse nenhum resultado, eu iria injetar meu próprio código no aplicativo afetado para registrar mensagens específicas do Windows que são enviadas ou geradas por esse aplicativo específico.

Essa abordagem requer um bom conhecimento de programação, já que você precisa escrever seu próprio programa para isso.
Também é bom se você tiver conhecimento básico avançado dos aspectos internos do aplicativo afetados, para que você saiba quais mensagens precisa ouvir.

Criar um aplicativo de trap

Eu também tentaria criar meu próprio aplicativo que poderia ser afetado por esse comportamento e, em seguida, tentar rastreá-lo dele. Para fazer isso, eu precisaria ter um conhecimento básico dos internos de aplicativos afetados para reproduzir com êxito o cenário.

Quando estou pensando nisso, provavelmente faria isso antes de tentar Code injection approach

Por enquanto, esses são os passos que vêm à mente. Mas eu poderia chegar a algumas idéias adicionais durante o processo também.

SilverWarior
fonte