Подсчитать количество кликов в "чужой" форме - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Задача: Нужно подсчитать количество кликов в "чужой" форме. Мы знаем, как называется окно (форма (но для FindWindow не знаем названия класса)) и знаем, как подписана кнопка в окне. (нужна отчетность по количеству тыков на кнопку). Получить Handle кнопки вроде бы возможно, но пока не могу разобраться... Вот парень смотрит открыт ли калькулятор, но при попытке компиляции его когда получаю исключение: "Could not load type 'Counter.fCounter' from assembly 'Counter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'FindWindow' has no implementation (no RVA)." З.Ы. название класса можно оставить null для FindWindow
Получил я хэндл от калькулятора
namespace Counter
{
    public static class WindowsFinder
    {
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
    }
 
    public partial class fCounter : Form
    {
        public fCounter()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            IntPtr hWindow = WindowsFinder.FindWindow(null, "Калькулятор");
            hWindow = WindowsFinder.FindWindowEx(hWindow, IntPtr.Zero, "Калькулятор", null);
            if (hWindow == IntPtr.Zero) MessageBox.Show("Calculator is not running");
        }               
    }
}
Теперь, как правильно зациклить получение события нажатия кнопки (например "1") на калькуляторе?
Пошел от обратного, надеюсь пока временно... Запустим маленькое окно с кнопочкой, по нажатию которой будет инкрементироваться счетчик и нажиматься кнопочка в нужном нам окошке
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace Counter
{
    public static class WindowsFinder
    {
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
        [DllImport("user32.dll")]
        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
    }
 
    public partial class fCounter : Form
    {
        public fCounter()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //получаем ссылку на окно
            IntPtr hWindow = WindowsFinder.FindWindow(null, "Form1");
            //получаем ссылку на кнопку, которую нужно нажать в найденом окне
            hWindow = WindowsFinder.FindWindowEx(hWindow, IntPtr.Zero, null, "button1");
            if (hWindow != IntPtr.Zero)
            {
                //имитируем нажатие кнопки мышки
                const int BM_CLICK = 0x00F5;
                WindowsFinder.SendMessage(hWindow, (int)BM_CLICK, IntPtr.Zero, IntPtr.Zero);                
            }
        }               
    }
}
Есть идеи, как вернуться к первопоставленной задаче?

Решение задачи: «Подсчитать количество кликов в "чужой" форме»

textual
Листинг программы
const uint EVENT_OBJECT_NAMECHANGE = 0x800C;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы