2010-05-12 8 views
18

Une recherche rapide sur Google pour des solutions à Focus Stealing dans Windows révèle deux grandes catégories de résultats:Comment puis-je empêcher la mise au point dans Windows?

  • personnes proposant des solutions incomplètes impliquant l'entrée de Registre ForegroundLockTimeout (ou TweakUI, que je crois change simplement l'entrée mentionnée ci-dessus de registre), ce qui n'est pas très efficace.
  • Incessanthordes des utilisateurs Windows complaining environ it.

Il est particulièrement gênant dans deux scénarios communs:

  • Quelque chose déclenche un programme pour faire apparaître une fenêtre de dialogue dans l'arrière-plan pendant une application plein écran est concentré, ce qui provoque l'application plein écran pour minimiser.

  • Une fenêtre vole la mise au point pendant que vous tapez, en volant toutes vos frappes. S'il vous arrive d'appuyer sur Espace, Entrée ou de déclencher un raccourci clavier (comme Y pour Oui), cela peut entraîner des résultats complètement indésirables.

Quelles solutions créatives peuvent être appliquées pour résoudre ce problème pour l'un de ces scénarios ou les deux?

+0

wiki communautaire? –

+4

La solution de programmation serait d'écrire des applications qui ne dérobent pas le focus, ce qui ne semble pas être ce qui est demandé ici. Je pense que c'est un travail pour super utilisateur. –

+1

Super utilisateur n'a pas réussi à résoudre ce problème. http://superuser.com/questions/18383/preventing-applications-stealing-focus - leur seule solution était la réponse ForegroundLockTimeout/TweakUI cassée ci-dessus – lunixbochs

Répondre

2

J'ai une suggestion pour la façon dont il peut être résolu, mais je ne peux pas l'implémenter complètement puisque je n'ai pas la connaissance.

Le changement de focus entre les fenêtres doit être provoqué par le programme fautif appelant une fonction Windows API située très probablement dans shell32 ou user32. Certains programmes, comme Adobe Photoshop, font l'appel plusieurs fois (au moins deux fois) pour se forcer sur l'utilisateur au démarrage. L'idée est de se connecter à cette fonction API (si possible) et de vérifier d'où vient l'appel. Si ce n'est pas de explorer.exe (c'est-à-dire Alt + Tabulation ou en cliquant sur une icône dans la barre des tâches), alors appel devrait être bloqué par ledit crochet.

+0

J'ai trouvé une fenêtre API utilisée pour notifier les programmes lorsque d'autres programmes obtiennent le focus (comme pour les shells d'afficher la fenêtre active). Je crois qu'il peut être utilisé pour empêcher complètement l'événement de concentration de se produire. – lunixbochs