2008-10-08 6 views
0

J'ai une application qui gère les informations démographiques des patients. Avec ces données, un utilisateur peut scanner une image d'un patient et attribuer cette image à un patient. Lorsque l'utilisateur clique sur le bouton de numérisation, une application distincte est ouverte en tant que boîte de dialogue afin de numériser l'image. Lors de l'exécution de ce sur XP tout a bien fonctionné. L'application d'imagerie s'est bien chargée et a gagné en focus. Sur Vista cependant occasionnellement l'application d'imagerie ne gagnera pas le focus et apparaîtra derrière l'application principale. Lors de l'exécution en plein écran ou via 2008 Application Server, vous ne pouvez pas voir l'application, vous obtenez seulement un écran verrouillé et il semble que rien ne s'est passé. Y at-il un moyen de changer la gestion de la fenêtre de focus sur Vista pour fonctionner comme XP l'a fait? Je cherche un moyen de résoudre ce problème sans apporter de modifications à l'application réelle si possible.Mise au point de Windows Vista Problème

Répondre

0

Vous pouvez parcourir tous les HWND de niveau supérieur et identifier l'application de numérisation via sa classe de fenêtre, puis envoyer un message approprié pour augmenter la fenêtre.

1

Je pense que vous devrez apporter des modifications à votre application pour permettre à l'application d'imagerie de prendre le focus. Je vais supposer que votre application lance l'application d'imagerie par ShellExecute ou CreateProcess. Si c'est le cas, vous pouvez obtenir le handle de processus du processus lancé via SHELLEXECUTEINFO.hProcess (pour ShellExecute) ou PROCESS_INFORMATION.hProcess (pour CreateProcess). Immédiatement après le lancement de l'application d'imagerie appeler l'API AllowSetForegroundWindow:

AllowSetForegroundWindow(GetProcessId(hProcess)); 

Cela permettra à l'application d'imagerie pour placer sa fenêtre principale/dialogue au premier plan quand il démarrage.

1

Vous pouvez essayer les étapes suivantes: 1.
Cliquez droit sur l'exe
2. Sélectionnez Propriétés
3. Sélectionnez l'onglet Compatibilité
4. Cochez l'option Exécuter ce programme en mode campatibility pour:
5. Sélectionnez Windows XP (Service Pack 2)

+0

Je ne suis pas en mesure de faire cela car cette application doit pouvoir s'exécuter à partir d'un lecteur réseau et vous ne pouvez pas activer le mode de compatibilité sur les applications stockées sur un lecteur réseau. –

0

Je ne crois pas que ce soit Vista vs XP liées. Je pense que simplement cette application d'imagerie prend plus de temps pour démarrer sur Vista. Depuis Windows 2000, le gestionnaire de fenêtres empêche les applications en arrière-plan de voler le premier plan. Lorsqu'une application est lancée, elle dispose d'une fenêtre d'opportunité pour créer et afficher une fenêtre qui prendra le premier plan. Si cela prend trop de temps, le gestionnaire de fenêtres pense que la fenêtre en cours doit conserver le premier plan et empêche l'autre application de prendre le premier plan quand elle est finalement lancée.

Je ne vois pas de moyen spécifique pour éviter cela ... autre que d'utiliser FindWindow pour rechercher la fenêtre d'autres applications après le lancement de l'application. Lorsque vous le trouvez finalement, appelez SetForegroundWindow pour l'amener au premier plan.

+0

Étant donné que le thread de la fenêtre principale est verrouillé lorsque l'application Imaging est ouverte, elle ne doit pas empêcher le vol de la mise au point. C'était vrai dans XP donc ça ne se passe pas du tout sur XP. Le DWM de Vista est généralement meilleur que XP parce qu'il traite les fenêtres comme des conteneurs, cela cause juste des problèmes dans ce scénario. –

+0

Je n'ai aucune idée de ce que vous entendez par "verrouillé" dans ce contexte. Le gestionnaire de fenêtres ne se soucie pas si le thread qui possède le premier plan pompage des messages. L'avant-plan de non-vol ne dépend pas de la fenêtre de premier plan courante qui possède des messages de pompage de fil pour empêcher le vol de premier plan. –

+0

Désolé, je voulais utiliser le mot "bloqué". Comme dans la fenêtre n'accepte aucune entrée tant que la boîte de dialogue n'est pas fermée. –

Questions connexes