7
votes

Pourquoi Word "vient-il à l'avant" lorsque nous l'activons?

Notre application WinForms interagit avec MS Word et nous exécutons ce code lorsqu'un document est généré et que nous souhaitons le montrer en mot devant notre application:

[setup w as a Word interop object]

w.Visible = True
w.Activate()


1 commentaires

J'ai eu le même problème et après avoir fait des recherches via Google, il est venu du fait qu'il s'agit d'un comportement en retrait de Windows depuis la version 7. Il s'agit d'une sorte de mécanisme de sécurité pour empêcher d'autres applications de perturber votre travail. Une application (votre programme qui souhaite interoper avec Word) ne peut pas modifier l'ordre Z d'autres applications qui ne sont pas exécutées dans le même processus. Je ne peux pas coller une URL avec des informations officielles à ce sujet - je me rappelle juste que j'ai trouvé cela sur le net certains quand ...


5 Réponses :


7
votes

Je suis tombé sur un problème similaire récemment. Mon programme .NET a appelé une application COM, mais sur Win7, il ne se présenterait parfois pas dans la barre des tâches ni sur le bureau du tout. Je n'étais pas vraiment capable de suivre la cause de cela, mais j'ai écrit la fonction suivante pour contourner le problème:

[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hwnd);

private static void BringAppToFront() {
    foreach (var p in System.Diagnostics.Process.GetProcesses().Where(p => p.ProcessName == "COMInstanceName")) {
        if (p.MainWindowHandle.ToInt32() != 0)
            SetForegroundWindow(p.MainWindowHandle);
    }
}


0 commentaires

2
votes

avait le même problème lors de la conversion d'une application de XP avec Word 2002 & 3 pour gagner 7 avec Word 2010. Trouvé les œuvres suivantes pour le premier document que vous ouvrez, après que tous les nouveaux documents apparaissent dans la barre des tâches clignotant.

Après avoir ouvert le document Word: xxx

La stratégie consiste à aller après la fenêtre dans laquelle le document est affiché. Minimiser et maximiser fera la fenêtre du document à l'avant.

Vous pouvez faire la même chose avec l'objet d'application (comme suggéré ici http://www.access-programers.co.uk/forums/showthread.php?t=173871 Remarque: maximiser sans minimiser ne vous aide pas si la fenêtre est maximisée pour commencer par) , mais si vous avez de nombreux documents de mots ouverts, vous penserez que vous avez gagné un jeu de Solitare dans Windows ...


0 commentaires

1
votes

Je ne suis pas expert mais je frappe ce même problème et j'ai trouvé mon chemin ici. Je ne pouvais pas obtenir d'autres solutions pour travailler, mais je viens de trouver une réponse à mon problème ici ...

http: //david.gardiner.net.au/2010/05/bad-old -days-of-vba-and-opening-word.html

Je viens d'ajouter une ligne comme suit (la ligne dans Italiques en gras ) à mon code et à Mots Documents ouverts devant Excel sur Win 7 machines en cours d'exécution 2010 :

DIMW WordApplication

Définir WordApplication = CreateObject ("mot.application")

Application.Activatemicrosoftapp xlmicrosoftword

Plus d'informations sur la raison pour laquelle cela fonctionne au lien ci-dessus.


0 commentaires

0
votes

w.visible = vrai W.Activer ()

Fonctionne pour moi Fine !!! P>

Voir les autres raisons. P>

Par exemple P>

 Dim oWord As Microsoft.Office.Interop.Word.Application = New      Microsoft.Office.Interop.Word.Application
 Dim oDoc As Microsoft.Office.Interop.Word.Document =    oWord.Documents.Open(Path)
 Dim range As Microsoft.Office.Interop.Word.Range = oDoc.Range
 range.Find.Execute("[NUM]", False, False, , , , , , , _NUM_, 2, False, )  
 oWord.Visible = True
 oWord.Activate()


0 commentaires

0
votes

La méthode la plus simple que j'ai trouvée est xxx


0 commentaires