Eu tenho um aplicativo C Win16 antigo que está se comportando mal quando executado no Windows 10 de 32 bits. Infelizmente, não tenho o código-fonte do aplicativo, portanto não posso depurar problemas a partir dele. O aplicativo estava funcionando normalmente no Windows 7, mas no Windows 10, ele inicia usando o NTVDM, mas por algum motivo a GUI apresenta os seguintes problemas:
Problema 1. O aplicativo abre uma caixa de diálogo pop-up quando é iniciado. A interação do mouse funciona para que eu possa arrastar a caixa de diálogo pop-up pela janela do aplicativo, mas o pop-up em si não tem foco e não consigo clicar em nenhum dos botões ou inserir texto na caixa de diálogo. Ainda posso usar Alt+F para acessar o menu Arquivo na barra superior do aplicativo enquanto o pop-up está aberto.
Problema 2. O aplicativo também pode ser configurado para abrir sem a janela pop-up. Nesse caso, a barra de menu superior e as barras de status são exibidas fora do lugar e não respondem a nenhuma entrada do teclado.
Em ambos os casos, clicar nos botões da janela principal do aplicativo não faz nada e preciso usar o gerenciador de tarefas para matar o ntvdm.exe para fechar o aplicativo.
Até agora, tentei diferentes configurações de modo de compatibilidade, bem como tentei executar o aplicativo com um VDM alternativo (WineVDM). O modo de compatibilidade não faz nada e o aplicativo é iniciado usando o WineVDM, mas apresenta os mesmos problemas de layout que o uso do NTVDM. Isso parece indicar que o problema não está no VDM, mas tem mais a ver com as diferenças de renderização de gráficos herdados entre o Win7 e o Win10.
O que devo tentar a seguir? Existe uma maneira de identificar qual estrutura de GUI foi usada?
Edit: Atualmente, estou executando isso em uma máquina virtual "Win10 32bit" dentro de uma máquina Windows 10 de 64 bits e o adaptador de vídeo é atualmente "Microsoft Hyper-V Video". Tentei mudar isso para "Microsoft Basic Display Adapter", mas isso não ajudou.
Edit2: Leia em algum lugar que a atualização dos criadores do Win10 quebrou os aplicativos GDI testados com uma versão anterior do Windows (1607). Portanto, a pergunta realmente muda para "como posso fazer com que os aplicativos GDI sejam executados corretamente após a atualização dos criadores".
Não encontrei uma maneira de corrigir os problemas de layout, mas furtunately consegui contorná-los.
Em algum momento durante o estudo, descobri que as pessoas tiveram problemas com aplicativos renderizados GDI após a atualização do Windows 10 Creators de 2017 (versão 1703). O desempenho da renderização da fonte foi afetado de alguma forma e as pessoas também tiveram outros problemas. Um estudo mais aprofundado revelou que na versão 1703, a Microsoft fez algumas grandes alterações no Desktop Window Manager (DWM) que controla como os aplicativos são desenhados na tela. Com o DWM, os aplicativos desenha seu conteúdo em um buffer de memória separado para cada aplicativo e que é usado, por exemplo, para exibir as miniaturas da barra de ferramentas em tempo real em aplicativos modernos do Windows. A maneira antiga é que o aplicativo desenhe diretamente no buffer da tela. A atualização 1703 impossibilitou a desativação do DWM para qualquer aplicativo e rejeitou partes da API usadas para controlá-lo separadamente para cada aplicativo.
Testei o aplicativo problemático com a Atualização de Aniversário do Windows 10 (versão 1607) e funcionou! Os problemas de layout indutores de puxão de cabelo desapareceram e o aplicativo funcionou como um encanto. O problema, claro, é que a versão 1607 do Windows 10 tem uma janela de suporte ainda mais curta do que a versão mais recente do Windows 7. Felizmente, a Microsoft oferece a opção de usar ramificações de suporte de longo prazo para suas edições do Windows Enterprise e essas refletem o status do “ normal” lançamento do mesmo ano. Testei com o Windows 10 Enterprise 2016 LTSB edição que estendeu o suporte até 2026 – e o aplicativo funcionou!
Caso encerrado por enquanto.