(C #) Показывает, где щелкнуть вместо автоматического нажатия

#c# #mouse

#c# #мышь

Вопрос:

Я построил движение мыши, которое я нашел, но я не хочу, чтобы программа автоматически нажимала на объекты, а вместо этого показывала мне, где нажимать. Как мне это сделать?

(Новичок, начал C # и C около четырех месяцев назад!)

Редактировать: Чтобы пояснить, программа предназначена для нажатия на другое окно, а не на саму себя (своего рода макрос, вот почему я хочу, чтобы опция просто отображалась, чтобы пользователь мог видеть, для чего была создана программа!)

Комментарии:

1. Вам нужно разработать способ указать, что на элемент управления следует щелкнуть. Это может означать обертывание каждого из ваших элементов управления в декораторе, который каким-то образом выделяет его. Насколько я знаю, в ней нет ничего встроенного, поэтому ответ таков: «напишите код, который заставит приложение показать вам, куда нажимать»…

2. Понятно, спасибо. Я еще не научился делать те вещи, о которых вы упомянули, но я изучу это!

Ответ №1:

Предполагая, что вы используете WinForms, вот краткий пример. «Цель» в этом случае оказывается в той же форме, но вы можете передать hWnd во внешнее окно, и оно должно работать так же. Вам нужно сохранить ссылку на наложение, чтобы вы могли закрыть его позже; это то, что делает вторая кнопка. Очевидно, что в вашем приложении вам придется делать это по-другому, но это только начало:

 public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    OverlayForm overlay = null;

    private void button1_Click(object sender, EventArgs e)
    {
        if (overlay == null)
        {
            overlay = new OverlayForm(button2.Handle); // <-- pass in an hWnd to some external window
            overlay.Show();
        }  
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (overlay != null)
        {
            overlay.Close();
            overlay = null;
        }
    }

}

public class OverlayForm : Form
{

    private IntPtr ExternalhWnd;

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
        public int Left;        // x position of upper-left corner
        public int Top;         // y position of upper-left corner
        public int Right;       // x position of lower-right corner
        public int Bottom;      // y position of lower-right corner
    }

    public OverlayForm(IntPtr ExternalhWnd)
    {
        this.ExternalhWnd = ExternalhWnd;

        this.TopMost = true;
        this.ShowInTaskbar = false;
        this.FormBorderStyle = FormBorderStyle.None;        
        this.StartPosition = FormStartPosition.Manual;

        this.Opacity = 0.7; // 70% opacity
        this.BackColor = Color.Yellow;
    }

    protected override CreateParams CreateParams 
    {
        get
        {
            CreateParams createParams = base.CreateParams;
            createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT - Ignore Mouse Clicks
            createParams.ExStyle |= 0x80; // WS_EX_TOOLWINDOW - Remove from Alt-Tab List
            return createParams;
        }
    }

    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
        if (!this.ExternalhWnd.Equals(IntPtr.Zero))
        {
            // position our overlay on top of the external window
            RECT rct;
            GetWindowRect(this.ExternalhWnd, out rct);
            this.Location = new Point(rct.Left, rct.Top);
            this.Size = new Size(rct.Right - rct.Left, rct.Bottom - rct.Top);
        }
    }

}
  

Вот изображение формы до и после нажатия кнопки 1:

введите описание изображения здесь

введите описание изображения здесь

Кнопка 2 по-прежнему реагирует на ввод пользователя и щелкает при наличии желтого наложения.

Задавайте столько вопросов, сколько хотите, чтобы понять код и реализовать его в своем проекте. Я сделаю все возможное, чтобы помочь вам…

Комментарии:

1. Спасибо, что нашли время ответить на этот вопрос. Я собираюсь отметить это как правильный ответ, поскольку я новичок, и я изучу ваш код и применю его! Спасибо!