Pergunta

Estou escrevendo um aplicativo que precisa trazer a janela de um aplicativo externo para o primeiro plano e não necessariamente roubar o foco (há uma configuração que o usuário pode alternar para roubar/não roubar o foco).

Qual é a melhor maneira de fazer isso usando a API win32?Eu tentei SetForeground() mas ele sempre rouba o foco e não funciona de forma consistente.

Qual é a melhor maneira de fazer isso?Alguma ideia?

Foi útil?

Solução

Supõe-se que SetForegroundWindow roube o foco e há certos casos em que ele falhará.

A função SetForegroundWindow coloca o thread que criou a janela especificada em primeiro plano e ativa a janela.A entrada do teclado é direcionada para a janela

Tente capturar o foco com Definir Captura antes de fazer a chamada.Veja também diferentes maneiras de trazer a janela para a frente:SetForeGroundWindow, SetActiveWindow, até mesmo simular um clique do mouse pode fazer isso.

Outras dicas

Qual é a diferença entre SetForeGroundWindow, SetActiveWindow e BringWindowToTop?Parece que todos fazem a mesma coisa.

De acordo com o MSDN, SetForeGroundWindow ativará a janela e direcionará o foco do teclado para ela.Isso tenta funcionar mesmo quando o processo está em segundo plano.SetActiveWindow faz a mesma coisa que SetForeGroundWindow, mas não faz nada se seu aplicativo não for o aplicativo mais frontal.Por fim, BringWindowToTop apenas traz a janela para o topo e não altera o foco do teclado.

Você pode tentar a função BringWindowToTop para não roubar o foco.Não usei, mas parece ser o que você procura.

Você já tentou usar SetWindowPos.Esta é a função canônica para mover, redimensionar e definir a ordem z no Windows.Existe um sinalizador SWP_NOACTIVATE que você pode usar.Olhe para http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx.Não tentei isso em uma janela pertencente a outro processo, mas provavelmente vale a pena tentar.

SetWindowPos + SWP_NOACTIVATE faz o trabalho.

Você poderia usar FindWindow para obter o HWND da janela e, em seguida, usar a função BringWindowToTop encontrada na API Win32.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top