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

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

12.06.2016, 15:01. Показов 1404. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю приложение-кликер, которое будет закрывать окна с ошибкой в приложении, установленном на ПК. Приложение работает, окно с ошибкой находит, находит кнопку "ОК", которую требуется нажать, но не получается, собственно, нажать эту кнопку. Смотрел код на pinvoke.net, брал оттуда примеры, но так ничего и не выходит.
Нажатие пытаюсь сделать через SendMessage.
Посоветуйте варианты решения проблемы? Как правильно отправлять нажатие левой кнопкой мыши на кнопку в окне приложения?

Кликните здесь для просмотра всего текста
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern IntPtr FindWindow(IntPtr ZeroOnly, string lpWindowName);
        [DllImport("user32.dll", EntryPoint = "FindWindowEx",  CharSet = CharSet.Auto)]
        static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, string lParam);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, IntPtr buttonHWND);
        [DllImport("user32.dll")]
        private static extern bool PostMessage(IntPtr hWnd, int msg, IntPtr wParam, string lParam);
        
        static uint WM_COMMAND = 0x0111;
        static uint BN_CLICKED = 0x0;
        static uint WM_LBUTTONDOWN = 0x0201;
        static int BM_CLICK = 0x00F5;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        static List<string> GetAllChildrenWindowHandles(IntPtr hParent,  int maxCount)
        {
            List<string> result = new List<string>();
            int ct = 0;
            IntPtr prevChild = IntPtr.Zero;
            IntPtr currChild = IntPtr.Zero;
            while (true && ct < maxCount)
            {
                currChild = FindWindowEx(hParent, prevChild, "Button", null);
                if (currChild == IntPtr.Zero) break;
                result.Add(currChild.ToString());
                prevChild = currChild;
                ++ct;
            }
            return result;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            IntPtr appHandle = FindWindow(IntPtr.Zero, "Login Error");
            List<string> children = GetAllChildrenWindowHandles(appHandle, 100);
            
            for (int i = 0; i < children.Count; ++i)
                listBox1.Items.Add(children[i].ToString());
 
            SendMessage(appHandle, BM_CLICK,WM_LBUTTONDOWN, children[0].ToString());
        }
 
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2016, 15:01
Ответы с готовыми решениями:

Как нажать на кнопку в другом приложении?
Как нажать на кнопку в другом приложении? Захватываю я его так: static...

Нажать кнопку в другом приложении с использованием Win32 API
public partial class Form1 : Form { public static extern IntPtr...

WinAPI: Как нажать кнопку в другом приложении, если в нем открыто модальное окно
В общем есть пару вопросов; 1) Как по заголоку окна узнать имя класса 2) int hwnd...

Нажать на кнопку в другом приложении
Доброго дня! Из программы запускается процесс стороннего приложения, открывается вордовский...

2
290 / 271 / 107
Регистрация: 10.06.2011
Сообщений: 696
12.06.2016, 15:54 2
А имитировать нажатие ентера или пробела пробовали?
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 139
12.06.2016, 16:54  [ТС] 3
Нажатие Enter пытался, но та же самая ситуация
0
12.06.2016, 16:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2016, 16:54
Помогаю со студенческими работами здесь

Как нажать кнопку в другом приложении
ситуация следующая... при запуске моей программы нужно что бы в другом приложении например...

Как нажать программно кнопку в другом приложении
День добрый! Возник вопрос программно нажать в другом приложении кнопку; примеры видел, не все...

Нажать кнопку в чужом приложении
Помогите нажать кнопку на &quot;левом&quot; приложение !!!!!

Нажать на кнопку в стороннем приложении, используя WinAPI
Здравствуйте в кратце Нужно на c# и winapi реализовать данное сообщение &quot;WM_PARENTNOTIFY...


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

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

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