Отправка ключей для стороннего приложения
Всем Привет,
Я пытаюсь отправить текст из своего приложения в какое-то стороннее приложение, но этого не происходит.
С помощью моего приложения я могу отправлять сообщения в блокнот и другие текстовые редакторы, но не во все приложения.
Кто-нибудь может помочь мне решить эту проблему.
Любое предложение приветствуется.
С уважением,
Дом
Что я уже пробовал:
Вот мой фрагмент кода:
Process[] notepads = Process.GetProcessesByName("notepad"); if (notepads.Length == 0) return; if (notepads[0] != null) { IntPtr child = FindWindowEx(notepads[0].MainWindowHandle, new IntPtr(0), "Edit", null); System.Threading.Thread.Sleep(2500); SendKeys.Send("Hi"); }
Richard MacCutchan
Ваш вопрос неясен. Что должен делать этот код и какова фактическая ошибка? Что такое стороннее приложение, в которое вы отправляете сообщения?
Richard MacCutchan
Ну, вы изменили код в своем вопросе, но все еще не объяснили, в чем проблема.
Dave Kreskowiak
Вы же понимаете, что класс Process, который вы получаете обратно, имеет свойство MainWindowHandle для приложения, не так ли? Это делает вызов Win32 для FindWindowEx спорным вопросом.
Кроме того, код, который вы разместили, получает дескриптор окна, но вы никогда ничего с ним не делаете. Вызов FindWindowEx не активирует окно, поэтому SendKeys будет просто вводить текст в любое окно, имеющее фокус.
Действительно, использование SendKeys вообще-ужасная идея.
domneck
Да, я согласен, SendKeys будет просто печатать в любом окне, которое имеет фокус. Это все еще хорошо для меня.
Но это не работает для стороннего приложения, есть ли какая-то альтернатива для этого.
Dave Kreskowiak
Вы должны активировать целевое окно, чтобы получить его фокус, прежде чем SendKeys собирается что-то сделать.
Имейте в виду, что SendKeys настолько плох, потому что пользователь может переключить активное окно в любое время, когда захочет, и ваш код ничего не может сделать, чтобы предотвратить это.
domneck
Да, я активирую целевое окно, и оно работает, как и ожидалось, для блокнота, но не для 3-й партии.
Dave Kreskowiak
Не с тем кодом, который вы разместили.
Кроме того, если стороннее окно не следует стандартным оконным сообщениям, как игра, SendKeys вообще не будет работать.
domneck
Ладно, теперь ясно, что 3-я партия не поддерживает..
Есть ли какие-либо альтернативы для достижения этой цели?
Dave Kreskowiak
Не зная ничего о стороннем приложении, нет ничего, кроме догадок.
domneck
Да. Согласиться с вами.
О 3-й части программного обеспечения нет никакой информации.
Но одна вещь, используя на экране клавиатуру, которую я могу печатать.
Есть ли какая-либо возможность взять под контроль экранную панель ketboard для ввода текста.
Я могу запустить экранную клавиатуру из своего приложения
Dave Kreskowiak
Нет, нет никакого способа "захватить" экранную клавиатуру.
https://docs.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input