@andrejfomenko

Как сделать клик по кнопке в программе c++?

Здравствуйте, имеется программа с исходным кодом на c++. В программе есть 3 кнопки, как мне сделать клик по ним на С# или autoit. Проблема в том, что для идентификации элемента(кнопок) я использовал Microsoft Spy++, Windows hack 3.0, autoit Info. Но ни одна из программ не видит кнопок, есть только хэндл окна программы. Например для клика по кнопке "Открыть" в другой программе я использовал такой С# код:
[DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);
        //подключаем поиск окна
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string windowName);
        //подключаем SendMessage
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
        const int WM_LBUTTONDOWN = 0x0201;
        const int WM_LBUTTONUP = 0x0202;
        const int Enter = 13;
        const int Tab = 9;
        const int WM_CLOSE = 0x10;
        const int WM_ACTIVATE = 0x1C;
        const int WM_DESTROY = 0x2;
        [DllImport("User32.dll")]
        private static extern int SendMessage(IntPtr HWND, int Msg, int wParam, StringBuilder lParam);
        const int WM_GETTEXT = 0xD;
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, string lParam);
        const int WM_SETTEXT = 0x000C;
IntPtr button1 = FindWindowEx(calcWnd, IntPtr.Zero, "Button", "Открыть");
SendMessage(button1, WM_LBUTTONDOWN, 1, 0x150018);
SendMessage(button1, WM_LBUTTONUP, 0, 0x150018);

так вот как мне найти элемент? или мб есть другие варианты реализации?
P.S. программа не моя, хотел пересобрать ее, изменив надписи кнопок, но вылетают ошибки(возможно не все до конца установил в VS 2017)
  • Вопрос задан
  • 734 просмотра
Пригласить эксперта
Ответы на вопрос 1
beevasya
@beevasya
программист C++/C#
Я так понял, ты ищешь окно кнопки и потом посылаешь нажатие и отпускание кнопки.
А попробуй сразу в родительское окно отправить BN_CLICKED
Потому что кнопки обычно обрабатываются в родительском окне (диалоге)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы