У меня есть небольшое приложение с разметкой потока (содержит вторую разметку потока с несколькими компонентами и рядом со второй разметкой потока одну кнопку закрытия).
Вот скриншот из Spy ++: http://i.stack.imgur.com/0UKy0.png
Еще я хочу добавить EventHandler, чтобы проверить Invoke от кнопки закрытия (последняя на скриншоте).Но я не получаю никаких событий от кнопки, и я понятия не имею, почему ...
Код для запуска и поиска приложения:
Process p = Process.Start("..\\..\\..\\CSharpCaA\\bin\\Release\\dotnetCaA.exe");
AutomationElement form = AutomationElement.FromHandle(p.MainWindowHandle);
После того, как я получил правильную форму, яЯ собираюсь искать кнопку закрытия:
AutomationElement close = form.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.AutomationIdProperty, "close"));
к этому моменту все в порядке, у меня правильная форма и правильная кнопка (я тестирую оба), поэтому я собираюсь добавить EventHandlerдля InvokeEvent:
Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent, close,
TreeScope.Element, new AutomationEventHandler(close_event));
Мой метод close_event:
private void close_event(object sender, AutomationEventArgs e)
{
AutomationElement senderElement = sender as AutomationElement;
// a console writeline and other stuff
}
Итак, я собираюсь нажать кнопку и ... ничего не происходит!Событие не было вызвано кнопкой закрытия, и мой метод close_event не был вызван.
У кого-нибудь есть идея, почему?И сначала я подумал, что что-то не так с моим close_event, но если я напишу что-то вроде этого:
Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent,
AutomationElement.RootElement, TreeScope.Descendants, close_event);
я получаю события, но из форм, а не из компонентов.Я попробовал все, чтобы запустить форму в новом потоке, чтобы создать Eventhandler в новом поте бот ничего не помогло.и я не вижу причины, почему это не работает.
Есть идеи?
спасибо