2016-07-14 9 views
1

Процесс идентифицируется путем фильтрации родительских идентификационных номеров процесса, , когда найден правильный процесс, который должен получить нажатие клавиши. Это приложение представляет собой книгу Excel. Макрос запускается внутри этого приложения , которое требует нажатия клавиши. Поставщик макроса не может изменить это поведение.Как найти и использовать идентификатор процесса для отправки нажатия клавиши в приложении Excel в C#

Эта форма пользователя появляется, когда макрос заканчивается, блокирует автоматизацию из-за требования к ручному вводу.

Я попробовал несколько различных подходов к отправке ключа возврата, но они потерпели неудачу. Наиболее перспективным ниже:

[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    

Сообщение об ошибке:

«SendKeys не может работать внутри этого приложения, потому что приложение не обработки сообщений Windows, либо изменить приложение для обработки сообщений, или. используйте метод SendKeys.SendWait. "

Если я использую команду

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

то кажется, все в порядке, но нажатие клавиши не получает его желаемый пункт назначения каким-то образом.

Вы знаете, как найти обходной путь этой проблемы с макросом Excel либо с помощью sendkeys, либо другими способами?

ответ

0

Единственный недостаток этого решения, при котором он не посылает нажатия клавиш в пользовательскую форму Excel. И это конечная цель предприятия.

Оказалось, что решение довольно простое. Это

IntPtr ptrFF = p.Handle; 

должен быть изменен на

IntPtr ptrFF = p.MainWindowHandle 

Хотя я не совсем уверен, почему это решить мою проблему, но она работает, по-видимому с помощью блокнота и Excel, так что, как представляется, решение.