2010-01-06 4 views
0

Est-il possible de restaurer une application tierce qui a été réduite au minimum à la SysTray? Appeler ShowWindow fonctionne correctement sur les applications réduites à la barre des tâches, mais lorsque l'application a été réduite au niveau de SysTray, il semble que son handle soit mis à zéro, et bien sûr ShowWindow ne le trouve pas.Comment restaurer une application à partir de SysTray? ShowWindow n'aide pas depuis le Handle = 0

+0

Lorsque vous dites que la poignée "est mise à zéro", comment obtenez-vous la poignée de la fenêtre? –

+0

à partir du processus, via Process.GetProcessesByName, puis en utilisant myProcess.MainWindowHandle. Il est possible que j'embrouille la poignée de processus et la poignée de Windows. Aucun conseil? – hawbsl

Répondre

0

Un conseil utile de Adam Robinson et nobugz. M'a aidé à voir que ce que nous essayons pourrait même ne pas être possible. Trop dépend de la façon dont l'application se comporte en interne quand elle se cache et nous ne contrôlons pas cela ou même savons beaucoup à ce sujet. Nous devions aborder cela d'une autre direction.

L'application se trouve dans le SysTray en attente d'être activé via la souris de l'utilisateur en cliquant dessus, mais nous ne pouvons pas automatiser cela. Mais il y a une autre façon d '"activer" l'application et c'est en exécutant le fichier exe à nouveau. Dans ce cas, cela ne démarre pas une seconde instance, elle réactive simplement l'instance existante. Alors pourquoi ne pas Shell vers le fichier exe et réactiver l'application de cette façon? C'est ce que nous avons fait et c'est une solution de travail.

2

Non; Il existe différentes approches pour y parvenir (l'application peut fermer la fenêtre et en ouvrir une nouvelle lors de la restauration, ou simplement masquer la fenêtre d'origine et la montrer lors de la restauration). Il n'y a aucun processus particulier qu'une application doit suivre pour réaliser cette fonctionnalité, donc il n'y a aucun processus particulier qui peut être suivi afin de l'inverser.

Si vous avez des informations sur le comportement d'une application particulière et que vous souhaitez la traiter comme un cas spécifique, cela peut être possible. Mais une solution unique n'existe malheureusement pas.

Modifier

Vous pouvez essayer d'utiliser Process Explorer pour déterminer ce que (le cas échéant) poignées de fenêtre sont ouverts par le processus. Cela vous dira au moins s'il détruit ou cache la fenêtre.

+0

C'est une application spécifique que je cible – hawbsl

+0

@hawbsl: C'est mieux, mais vous devez savoir exactement comment cette application fonctionne pour que cela soit utile. Voir l'édition. –

+0

conseils utiles, merci. Téléchargé Process Explorer et a jeté un coup d'oeil – hawbsl

1

Cela dépend entièrement de l'implémentation de l'application. L'approche la plus commune serait de créer une nouvelle fenêtre à partir de zéro au lieu d'en montrer une nouvelle.

Il obtient ses notifications d'icône de la barre via une fonction de rappel privé, vous ne pouvez pas vous tromper vous-même. Faking un clic de souris est très difficile à obtenir parce que vous ne pouvez pas savoir où se trouve l'icône. Je pense que vous êtes coincé.

+0

des conseils utiles, merci. – hawbsl

Questions connexes