2009-08-31 3 views
0

Actuellement, notre logiciel fonctionne sur des machines Unix Unix, mais nous utilisons des boîtes Windows exécutant Exceed pour afficher l'interface utilisateur dans X-Windows. J'écris une application Windows (en modernisant l'interface utilisateur en C#), mais certaines des anciennes fenêtres doivent encore être affichées dans Exceed. Lorsqu'un utilisateur clique sur un bouton de mon application Windows, il envoie un message au serveur Unix qui affiche la fenêtre X. Mon problème est que ces X-windows ne sont pas mis au point, donc ils surgissent DERRIÈRE toutes mes fenêtres/formulaires .NET.Comment donner un focus X-window Exceed dans une application C#?

Un utilisateur de ce logiciel peut facilement avoir 5+ fenêtres ouvertes à tout moment, donc c'est un gros inconvénient si chaque fois qu'il veut afficher une ancienne fenêtre X, il doit minimiser tout le .NET les fenêtres. Quelle est la meilleure façon de résoudre ce problème? Y a-t-il un moyen pour moi de donner à Exceed la focalisation de façon à ce qu'elle amène la fenêtre X au sommet? J'ai essayé d'utiliser Application.OpenForms, mais en appelant le .SendToBack() sur chaque formulaire ne m'a pas aidé.

Répondre

1

Si les fenêtres contextuelles proviennent d'un processus autre que l'application Windows que vous créez, vous devrez probablement recourir à un hack. Microsoft a mis du code dans WinXP pour empêcher les applications d'être en mesure de lancer leurs fenêtres devant tout, sauf si cela fait partie de l'application sur laquelle l'utilisateur travaille. Pour ce faire, vous devez utiliser la valeur de registre ForegroundLockTimeout et les API Windows pour afficher une fenêtre au premier plan.

Plus d'info:.

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/54826e98-9faa-4457-ba1d-b645af88170b/ (La dernière entrée contient la conclusion, mais vous aurez besoin de lire quelques-unes des entrées précédentes, je vous suggère également de définir le ForegroundLockTimeout à zéro, faire l'interrupteur, puis réglez ForegroundLockTimeout retour à sa valeur précédente.)

+0

Qu'en est-il de l'ensemble de l'application? Les fenêtres proviennent en effet d'un processus différent, mais étant donné qu'elles sont affichées dans Exceed, y a-t-il un moyen d'obtenir une liste des applications en cours d'exécution (Exceed) et de les mettre au point? – alexD

+0

Découvrez les nouvelles informations que j'ai ajoutées. –

+0

Je suis passé de KDE à CDE et cela a résolu le problème .. Je ne sais toujours pas exactement ce que c'était. J'ai essayé la plupart des conseils dans ce lien que vous avez fourni, mais rien n'a fonctionné dans KDE. Merci pour l'info cependant, ce sera utile à l'avenir. – alexD

Questions connexes