0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 52
1

Вставка текста и нажатие на кнопку в чужом приложении

25.06.2017, 17:44. Показов 1559. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Подскажите, как вставить текст в чужом приложении и нажать на нужную кнопку. Я пробовал таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
 
namespace WindowsFormsOPEN
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("User32.dll")]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("User32.dll")]
        static extern int SetForegroundWindow(IntPtr hWnd);
        private void button1_Click(object sender, EventArgs e)
        {
            Process process = System.Diagnostics.Process.Start(@"C:\Program Files (x86)\Etxt Antiplagiat\EtxtAntiplagiat.exe");
            process.WaitForInputIdle();
            IntPtr hWndNotepad = FindWindow(null, "AntiPlagiarium.NET");
            SetForegroundWindow(hWndNotepad);
                SendKeys.SendWait("Hello!!!");
        }
    }
}
Для обычного блокнота и ворда работает, но для другого приложения нет, в чем может быть ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2017, 17:44
Ответы с готовыми решениями:

Нажатие кнопки в чужом приложении
Здравствуйте. Задался целью программно нажать на кнопку в чужой программе. using System; using...

Рисование в чужом полноэкранном приложении
Есть игра, запущенная на весь экран. Надо нарисовать некий текст в углу экрана, возможно ли это...

Изменить раскладку клавиатуры в чужом приложении
Мне нужно изменить в чужом приложение раскладку клавиатуры на английскую. В гугле ничего полезного...

Программный клик мыши в чужом, свернутом приложении
Искал в интернете, но ничего подходящего не нашел. Нужно программно кликнуть ЛКМ в сторонней...

5
Футболист
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
26.06.2017, 11:02 2
1. Нужно глобальный хук нажатия на кнопку
2. По нажатию на кнопку отследить активное окно, туда либо послать текст, либо с эмулировать нажатие кнопок клавиатуры
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 52
26.06.2017, 11:43  [ТС] 3
Можете подсказать, как это сделать?
0
Футболист
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
26.06.2017, 11:49 4
оффтоп, да простят модераторы
Да, могу, вечером, сейчас не за компом)
0
burning1ife
1463 / 1285 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
26.06.2017, 12:32 5
Можно попробовать в таких случаях использовать Auto-Clicker.
https://www.codeproject.com/Ar... -Clicker-C
0
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
26.06.2017, 23:24 6
просто послать текст в окно не достаточно. ты должен найти нужное текстовое поле среди дочерних елементов окна и уже после, слать туда текст, или событие (нажатие, смену значения свойства или чтото еще).

Добавлено через 17 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
 const string user32 = "user32.dll";
 
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
 
[DllImport(user32)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
 
[DllImport(user32, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool EnumChildWindows(IntPtr hWndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);
 
    [DllImport(user32, SetLastError = true)]
    static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
 
    [DllImport(user32, SetLastError = true)]
    static extern int GetClassName(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
 
    [DllImport(user32, SetLastError = true)]
    static extern int GetWindowTextLength(IntPtr hWnd);
 
  [DllImport(user32, SetLastError = true)]
    static extern IntPtr GetParent(IntPtr hWnd);
 
public struct window
{
    public string windowname;
    public string classname;
}
 
 string GetWindowText(IntPtr hWnd)
    {
        int len = GetWindowTextLength(hWnd) + 1;
        StringBuilder sb = new StringBuilder(len);
        len = GetWindowText(hWnd, sb, len);
 
        return sb.ToString(0, len);
    }
    string GetWindowClass(IntPtr hWnd)
    {
        int len = 260; 
        StringBuilder sb = new StringBuilder(len);
        len = GetClassName(hWnd, sb, len);
        return sb.ToString(0, len);
    }
юзинг:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public List<window> GetChildControls(IntPtr parent)
    {
         List<window> wnds = new List<window>();
        EnumChildWindows(parent, new EnumWindowsProc((hWnd1, lParam2) =>
            {
                if (GetParent(hWnd1) != parent)
                    return false;
                
                window win = new window();
                win.windowname = GetWindowText(hWnd1);
                win.classname = GetWindowClass(hWnd1);
                wnds.Add(win);
                return true;
            }), IntPtr.Zero);     
          return wnds;
    }
 
IntPtr hWndNotepad = FindWindow(null, "AntiPlagiarium.NET");
List<window> aa= GetChildControls(hWndNotepad);
примерно так получить список дочерних элементов созданного окна, имя и класс (каждый текст бокс, каждый элемент и тп)
далее ты сможешь вывести и разобраться какой элемент тебе нужен и искать его через FindWindowEx на прямую (если не ошибаюсь с названием функции, пишу в текстовике)

найдя нужный элемент через FindWindowEx у тебя будут его хендлы, и ты сможешь посылать туда чо хочешь, тем же SendMessage
0
26.06.2017, 23:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2017, 23:24
Помогаю со студенческими работами здесь

Нажатие на кнопку в чужом приложении
Всем доброго времени суток. Мне нужно нажать на кнопку в чужом приложении и вставить текст в поле....

Эмуляция нажатия клавиши в чужом приложении
Знаю что это можно сделать используя SendKeys.SendWait или PostMessage сделал и так и так...

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

Вставка текста через кнопку
Доброе время суток! нуждаюсь в помощи.. каким способом можно сделать ставку текста из буфера...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru