Процесс идентифицируется путем фильтрации родительских идентификационных номеров процесса, , когда найден правильный процесс, который должен получить нажатие клавиши. Это приложение представляет собой книгу 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, либо другими способами?