ShakalX Ответов: 0

C# для автоклика не двигать мышь и мыши на свернутое окно.


Привет, ребята. Мне нужна помощь. Я делаю автоматический щелчок левой кнопкой мыши, но мне нужно, чтобы он нажимал только на определенное окно, и его можно свернуть и продолжать нажимать, пока я могу делать другие вещи на ПК. Как ориентироваться в интернете и т. д. Этот код работает неправильно. Он щелкает, и я тем временем могу двигать мышкой. Но я не могу использовать левую кнопку мыши и перемещать окна или даже минимизировать окно, в котором мышь была запрограммирована на щелчок, потому что она перестает щелкать. Вы не могли бы мне помочь? Спасибо.

Что я уже пробовал:

<pre>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;

namespace AUTOCLIQUEMOUSEHK
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public enum WMessages : int
        {

            WM_LBUTTONDOWN = 0x201,
            WM_LBUTTONUP = 0x202,
            WM_LBUTTONDBLCLK= 0x203,
            WM_RBUTTONDOWN= 0x204,
            WM_RBUTTONUP = 0x205,
            WM_RBUTTONDBLCLK = 0x206,


        }

        [DllImport("user32.dll")]
        static extern IntPtr WindowFromPoint(int xPoint, int yPoint);

        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string ClassName, IntPtr WindowTitle);

        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(String sClassName, String sAppName);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

        [DllImport("user32.dll", SetLastError = true)]
        static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

        [DllImport("user32.dll")]
        public static extern int SetActiveWindow(IntPtr hWnd);

        [DllImport("user32.dll")]
        public static extern int SetForegroundWindow(IntPtr hWnd);

        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int GetWindowtext(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

        public IntPtr findme()

        {
            return this.Handle;  
            //FindWindow("Google Chrome", "Chrome");
        }

        private int MAKELPARAM(int p, int p_2)
        {
            return ((p_2 << 16) | (p & 0xFFFF));
        }


        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
          /**  IntPtr myHandle = findme();
            Point pt = new Point(79, 312); // coordes
            IntPtr handle = WindowFromPoint(pt.X, pt.Y);
            SetForegroundWindow(handle);
            SendMessage(handle, (int)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(pt.X, pt.Y));
            SendMessage(handle, (int)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(pt.X, pt.Y));
    **/

            // PostMessage(handle, (uint)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(pt.X, pt.Y));
            // PostMessage(handle, (uint)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(pt.X, pt.Y));

           // SetForegroundWindow(myHandle);
        }

        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            this.Text = "X:" + Cursor.Position.X + "Y:" + Cursor.Position.Y;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            IntPtr myHandle = findme();
            Point pt = new Point(312, 324); // coordes
            IntPtr handle = WindowFromPoint(pt.X, pt.Y);
            //SetForegroundWindow(myHandle);
           // SendMessage(handle, (int)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(pt.X, pt.Y));
           // SendMessage(handle, (int)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(pt.X, pt.Y));


             PostMessage(handle, (uint)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(pt.X, pt.Y));
             PostMessage(handle, (uint)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(pt.X, pt.Y));

            SetForegroundWindow(myHandle);
        }
    }
}

Dave Kreskowiak

Ummm...by определение, свернутое окно больше не имеет фокуса ввода. Вы не можете "нажать" на свернутое окно, поэтому этот код не будет работать.

Или я что-то неправильно понял? Ваше описание несколько расплывчато.

ShakalX

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

Dave Kreskowiak

Все еще проблема, так как это окно все еще не имеет фокуса ввода. Это делает ваше приложение переднего плана.

Таким образом, вы действительно не можете "щелкнуть" по одному окну, продолжая использовать настоящую мышь на другом.

ShakalX

Странный. Потому что в delphi он имеет и работает идеально щелчок мыши на свернутом окне и я могу продолжать использовать другие приложения на ПК = /

Dave Kreskowiak

Интересно, но я понятия не имею, как это делается.

Graeme_Grant

Ваш код C# не соответствует вашему коду Delphi... например, в Delphi вы извлекаете дескриптор окна (hwnd) из положения курсора мыши, но ваш код C# жестко закодирован. Вы установили точку останова в коде C#, чтобы увидеть, действительно ли у вас есть дескриптор окна?

ShakalX

Привет. Я ученик. Я просто хотел иметь возможность делать то же самое, что и Delphi-скрипт в C #. Он щелкает левой кнопкой мыши, даже если окно находится в фоновом режиме. И я могу делать другие вещи на ПК над окном, которое нажимается, которое продолжает нажимать на него нормально.

0 Ответов