Вставьте текст в текстовое поле другого приложения - PullRequest
11 голосов
/ 27 декабря 2010

Как мне, используя C # или C ++, вставить текст в текстовое поле другого приложения?Я сделал это давным-давно и, похоже, кое-что вспомнил об использовании приложений HWND.Но так как это изменение для каждого экземпляра приложения, я чувствую, что я не помню всю историю.Должен ли я каким-то образом получить список запущенных приложений, извлечь то, что я хочу, получить HWND от этого и затем ... хм .... тогда что?:)

Ответы [ 4 ]

14 голосов
/ 27 декабря 2010

Используйте FindWindowEx () , чтобы найти дескриптор (HWND), а затем отправьте сообщение WM_SETTEXT , используя SendMessage ()

При использованииFindWindowEx, вам необходимо сначала найти дескриптор главного окна, используя его имя класса.Затем вам нужно будет найти дескриптор любого контейнера, в котором находится текстовое поле, вызывая FindWindowEx, передавая дескриптор родителя (окна) и имя класса контейнера.Вам нужно будет повторять это, пока не дойдете до текстового поля.Вы можете использовать инструмент под названием Spy ++ , который устанавливается по умолчанию вместе с Visual Studio, чтобы проверить целевое приложение и выяснить иерархию контейнеров (все объекты действительно называются окнами в API, но я называю их контейнерамив отличие от окна верхнего уровня) с именами классов.

3 голосов
/ 27 декабря 2010

Тогда SendMessage (), WM_SETTEXT

1 голос
/ 21 июня 2014

Вместо нацеливания на конкретное приложение вы можете просто отправить нажатия клавиш в текстовое поле.

  private void button1_Click(object sender, EventArgs e)
    {
       System.Threading.Thread.Sleep(5000);
       SendKeys.Send(send_text);

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        send_text = textBox1.Text;            
    }
0 голосов
/ 27 декабря 2010

вы можете использовать класс ClipBoard для достижения того же

...