J'écris un programme qui affiche/masque la fenêtre d'une application cible. Je l'ai testé plus tôt et j'ai remarqué quelque chose d'étrange. Si je lance l'application cible en tant qu'administrateur (clic droit->Propriétés, onglet "Compatibilité", "Exécuter ce programme en tant qu'administrateur"), cela ne fonctionne pas.
Pour démontrer, j'ai écrit une simple application GUI appelée "TargetApplication" et ensuite j'ai écrit le code suivant pour tester l'affichage/masquage de cette application :
class Program
{
static void Main(string[] args)
{
IntPtr windowPtr = FindWindow(null, "TargetApplication");
ShowWindow(windowPtr, 0); // 0 = Hide
Console.WriteLine("The window is now hidden. Press Enter to restore");
Console.ReadLine();
ShowWindow(windowPtr, 9); // 9 = Restore
Console.WriteLine("The window is now restored. Press Enter to exit.");
Console.ReadLine();
}
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}
Si je lance l'application fenêtrée sans droits d'administrateur, cela ne fonctionne pas.
Quelqu'un pourrait-il tester cela pour moi ? J'ai téléchargé les fichiers .exe des deux applications ici :
Tout ce que vous avez à faire est de les télécharger et d'exécuter TestApplication.exe puis TestShowWindow.exe. Vous constaterez qu'en modifiant TestApplication.exe pour qu'il soit exécuté en tant qu'administrateur, ShowWindow ne fonctionne plus.
Bien sûr, si vous n'avez pas confiance dans le téléchargement de mon matériel, vous pouvez toujours compiler mon code et le tester sur n'importe quelle application cible de Windows dont vous pouvez changer le mode de compatibilité.
P.S. Je ne suis pas sûr que cela fasse une différence mais j'utilise Windows 8 Pro. 64 bits.