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?