77 votes

Qu'est-ce qui détermine le moniteur sur lequel mon application est exécutée?

Je suis sur Windows et j'ai deux moniteurs.

Certaines applications de toujours démarrer sur mon moniteur principal, peu importe où ils ont été quand j'ai fermé.

D'autres seront toujours démarrer sur le secondaire du moniteur, n'importe où ils ont été quand j'ai fermé.

Est-il un paramètre de registre enterré quelque part, je peux manipuler de contrôle qui surveillent le lancement des applications par défaut?

@rp: j'ai Ultramon, et je suis d'accord qu'il est indispensable, au point que Microsoft recommande de les acheter et de les incorporer dans leur système d'exploitation. Mais comme vous l'avez dit, il ne permet pas de contrôler le moniteur par défaut d'un programme se lance dans.

44voto

David Citron Points 9231

Correctement écrit applications Windows qui veulent sauver leur emplacement d'une exécution permettra d'enregistrer les résultats de GetWindowPlacement() avant de s'arrêter, puis utilisez SetWindowPlacement() au démarrage pour rétablir leur position.

Souvent, dans le cas des applications de stocker les résultats de GetWindowPlacement() dans le registre comme un REG_BINARY pour une utilisation facile.

Le WINDOWPLACEMENT route a de nombreux avantages par rapport à d'autres méthodes:

  • Traite le cas où la résolution de l'écran a changé depuis la dernière exécution: SetWindowPlacement() va automatiquement s'assurer que la fenêtre n'est pas entièrement hors de l'écran
  • Enregistre l'état (la réduire ou l'agrandir) mais aussi d'économiser les restaurée (normal) la taille et la position de
  • Poignées de bureau métriques correctement, pour compenser la position de la barre des tâches, etc. (c'est à dire utilise des coordonnées de l'espace de travail" au lieu de "à l'écran des coordonnées"--des techniques qui s'appuient sur l'enregistrement des coordonnées de l'écran peut souffrir de la "marche de windows" problème où une fenêtre apparaîtra toujours un peu plus bas à chaque fois si l'utilisateur dispose d'une barre d'outils en haut de l'écran).

Enfin, les Programmes qui traitent de la fenêtre de restauration bien prendre en compte le "nCmdShow" paramètre passé à partir du shell. Ce paramètre est défini dans le raccourci qui lance l'application (Normal, Minimiser, Maximiser):

if(nCmdShow != SW_SHOWNORMAL)
    placement.showCmd = nCmdShow; //allow shortcut to override

Pour les non-applications Win32, il est important d'être sûr que la méthode que vous utilisez pour sauvegarder/restaurer la position de la fenêtre finalement utilise le même appel sous-jacent, dans le cas contraire (comme Java Swing du setBounds()/getBounds() problème), vous finirez écrire beaucoup de code supplémentaire pour re-mettre en œuvre la fonctionnalité qui est déjà là dans le WINDOWPLACEMENT fonctions.

10voto

rp. Points 9997

Obtenir UltraMon. Rapidement.

http://realtimesoft.com/ultramon/

Il ne vous permet pas de spécifier ce que surveiller une application démarre, mais il vous permet de passer d'une appli à l'autre moniteur, et de maintenir son ratio d'aspect intact, avec un clic de souris. C'est un utilitaire très pratique.

La plupart des programmes va commencer là où vous aviez laissé. Donc, si vous avez deux écrans au travail, mais seulement un à la maison, il est possible de démarrer un ordinateur à la maison et de ne pas voir les applications en cours d'exécution sur l'autre moniteur (qui aujourd'hui n'est pas là). UltrMon vous permet également de déplacer ces orphelins apps retour à l'écran principal rapidement et facilement.

4voto

Kevin Fairchild Points 5991

Je suis assez sûr que le moniteur principal est la valeur par défaut. Si l'application a été codé décemment, quand il est fermé, il va se rappeler où il était et rouvrira là, mais-comme vous l'avez remarqué, il n'est pas un comportement par défaut.

EDIT: La façon dont j'ai l'habitude de le faire est d'avoir l'emplacement stocké dans les paramètres de l'application. Sur la charge, si il n'y a pas de valeur, la valeur par défaut est le centre de l'écran. À la clôture de la forme, il enregistre sa position. De cette façon, chaque fois qu'il l'ouvre, c'est là où il était la dernière. Je ne connais pas de moyen simple de le dire à la mise sur le second moniteur de la première heure automatiquement, cependant.

-- Kevin Fairchild

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X