Ein Prozess wird durch Filtern der übergeordneten Prozess-ID-Nummern identifiziert, wenn der richtige Prozess gefunden wurde, der einen Tastendruck erhalten soll. Diese Anwendung ist eine Excel-Arbeitsmappe. Ein Makro wird innerhalb dieser Anwendung ausgeführt, die den Tastendruck erfordert. Der Anbieter des Makros kann dieses Verhalten nicht ändern.So finden und verwenden Sie Prozess-ID zum Senden eines Tastenanschlags an die Excel-Anwendung in C#
Dieses Benutzerformular, das angezeigt wird, wenn das Makro fertig ist, verhindert die Automatisierung aufgrund seiner manuellen Eingabeanforderung.
Ich habe ein paar verschiedene Ansätze versucht, den Return-Key zu senden, aber sie scheiterten. Die vielversprechendste unter:
[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
Die Fehlermeldung lautet:
„Tastaturbefehle können nicht in dieser Anwendung ausgeführt werden, da die Anwendung nicht Umgang mit Windows-Nachrichten ist entweder die Anwendung Nachrichten verarbeiten ändern, oder. Verwenden Sie die SendKeys.SendWait-Methode. "
Wenn ich die Verwendung
SendKeys.SendWait("{w 3}");
Befehl dann scheint es, alles in Ordnung, aber der Tastenanschlag nicht zu seinem gewünschten Ziel irgendwie bekommt.
Haben Sie eine Idee, wie Sie eine Lösung dieses Problems mit dem Excel-Makro entweder durch sendkeys oder andere Möglichkeiten finden?