2016-07-14 24 views
1

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?

Antwort

0

Der einzige Fehler dieser Lösung, dass es Tastenanschläge nicht an Excel-Benutzerformular sendet. Und das ist das ultimative Ziel des Unternehmens.

Es stellte sich heraus, dass die Lösung ziemlich einfach ist. Dies

IntPtr ptrFF = p.Handle; 

mußten

IntPtr ptrFF = p.MainWindowHandle 

geändert werden Obwohl ich bin mir nicht ganz sicher, warum dies mein Problem gelöst, aber es funktioniert anscheinend mit Notizblock und Excel, so scheint es, eine Lösung zu sein.