2016-07-14 2 views
1

Un processus est identifié en filtrant les numéros d'ID de processus parent, lorsque le processus correct qui doit recevoir une frappe est détecté. Cette application est un classeur Excel. Une macro est exécutée dans cette application qui nécessite la frappe. Le fournisseur de la macro ne peut pas modifier ce comportement.Comment trouver et utiliser l'ID de processus pour envoyer une séquence de touches à l'application Excel en C#

Cette forme d'utilisateur apparaissant lorsque la macro finit empêche l'automatisation en raison de son exigence d'entrée manuelle.

J'ai essayé plusieurs approches différentes pour envoyer la clé de retour, mais elles ont échoué. Le plus prometteur est ci-dessous:

[DllImport("User32.dll")] 
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 
[DllImport("User32.dll")] 
static extern int SetForegroundWindow(IntPtr hWnd); 

//...then at the bottom of my script 

//p is the Excel process selected from a bunch of Excel workbooks 
IntPtr ptrFF = p.Handle; 
SetForegroundWindow(ptrFF); 
SendKeys.Send("{w 3}");   //<- it falls over at this stage    

Le message d'erreur est:

« SendKeys ne peut pas exécuter dans cette application, car l'application ne le traitement des messages de Windows Modifiez l'application pour gérer les messages, ou. utilisez la méthode SendKeys.SendWait. "

Si je le

SendKeys.SendWait("{w 3}"); 

commande alors il semble bien, mais la combinaison de touches n'arrive pas à sa destination souhaitée en quelque sorte.

Avez-vous une idée de la façon de trouver une solution de contournement de ce problème avec la macro Excel soit par sendkeys ou d'autres façons?

Répondre

0

La seule faille de cette solution qui n'envoie pas de frappes au formulaire utilisateur Excel. Et c'est le but ultime de l'aventure.

Il s'est avéré que la solution est assez simple. Cette

IntPtr ptrFF = p.Handle; 

a dû être changé pour

IntPtr ptrFF = p.MainWindowHandle 

Bien que je ne suis pas tout à fait sûr pourquoi cela a résolu mon problème, mais il travaille apparemment avec le bloc-notes et Excel, il semble donc être une solution.