isimonersileri

Projenize Yardım


İletişim Formu


C# Ekrandaki Belirli bir Renge Mouse İle Tıklamak

Cshap dili kullanarak masaüstünde veya herhangi bir renk belirlenerek belirli bir zamanda ve bielirli bir (x,y) koordinatındaki o renge mouse ile nasıl tıklama yapılır?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Renk_Tıklama
{
    public partial class Form1 : Form
    {
        Timer t = new Timer();
        int interval;
        Color targetColor;

        public Form1()
        {
            InitializeComponent();
            t.Tick += new EventHandler(t_Tick);
        }

        public class Win32
        {
            [DllImport("User32.Dll")]
            public static extern long SetCursorPos(int x, int y);

            [DllImport("User32.Dll")]
            public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);

            [StructLayout(LayoutKind.Sequential)]
            public struct POINT
            {
                public int x;
                public int y;
            }
        }

        Bitmap EkranResmi;
        private void Form1_Load(object sender, EventArgs e)
        {
            // kullanıcıdan aralık süresi ve hedef rengi alın
            interval = Convert.ToInt32(numericUpDown1.Value.ToString());
            t.Interval = 1000;
            EkranResmi = Screenshot();
        }

        string konum;
        int sayac = 0;
        private void t_Tick(object sender, EventArgs e)
        {
            if (sayac == interval)
            {
                string[] knm = konum.Split(',');
                Win32.POINT p = new Win32.POINT();
                p.x = Convert.ToInt32(knm[0].ToString());
                p.y = Convert.ToInt32(knm[1].ToString());

                Win32.ClientToScreen(IntPtr.Zero, ref p);
                Win32.SetCursorPos(p.x, p.y);

                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
                sayac = 0;
            }
            sayac++;

        }


        bool cik = false;
        private void AlanBul()
        {
            cik = false;
            int ekran_x = Screen.GetBounds(new Point(0, 0)).Width;
            int ekran_y = Screen.GetBounds(new Point(0, 0)).Height;

            label2.Text = "Çözünürlük: "+ekran_x +","+ekran_y;

            for (int i = 0; i < ekran_x; i++)
            {
                int j=0;
                for ( j = 0; j < ekran_y; j++)
                {
                    //MessageBox.Show(i + "," + j);
                    label3.Text = "Alan: "+i+","+j;
                    if (PixelRengi(new Point(i, j)).ToArgb() == targetColor.ToArgb())
                    {
                        konum = i + "," + j;
                        MessageBox.Show(i + "," + j,"Bulunan Konum");
                        cik = true;
                        break;
                    }
                }

                if (cik)
                {
                    konum = i + "," + j;
                    break;
                }
            }
        }

        [DllImport("user32.dll")]
        static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

        private const int MOUSEEVENTF_LEFTDOWN = 0x02;
        private const int MOUSEEVENTF_LEFTUP = 0x04;

        private Bitmap Screenshot()
        {
            // Ekran resmi alınmadan önce formun kaybolmasını sağlıyoruz.
            this.Opacity = 0;

            // SS alan kodlar
            Bitmap Screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics GFX = Graphics.FromImage(Screenshot);
            GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size);
            // SS alan kodlar

            this.Opacity = 1;
            // Ekran resmi alınmadan önce formun görünmesini sağlıyoruz.
            return Screenshot;
            // Ekran resmini geri dönüş yapıyoruz.
        }

        private Color PixelRengi(Point location)
        {
           return EkranResmi.GetPixel(location.X,location.Y);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult ds = colorDialog1.ShowDialog();
            EkranResmi = Screenshot();
            if(ds==DialogResult.OK)
            {
                targetColor = colorDialog1.Color;
                MessageBox.Show(targetColor.ToArgb().ToString(),"renk kodu");
                AlanBul();
            }
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            interval = Convert.ToInt32(numericUpDown1.Value.ToString());
            t.Interval = 1000*interval;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if(button2.Text=="Tıklamayı Başlat")
            {
                t.Start();
                button2.Text = "Tıklamayı Durdur";
            }
            else if (button2.Text == "Tıklamayı Durdur")
            {
                t.Stop();
                button2.Text = "Tıklamayı Başlat";
                sayac = 0;
            }
        }

    }
}



Yazar: TRCodeRooTeR    Tarih: 2023-11-20 06:20:43   Görüntüleme: 456   Yorum: 0

Benzer Popüler Yayınlarımızı da İnceleyin;


C# Gelişmiş Çok Fonksiyonlu Hesap Makinesi Kodları

C# ile çok fonksiyonlu hesap makinesi yapımı kodları....

TRCodeRooTeR 8441 1
2019-12-22 05:12:22


C# Bankamatik Otomasyonu Yapımı ve Kodları

C# ile yazılmış Bankamatik Otomasyonu program kodları...

TRCodeRooTeR 6990 1
2020-11-16 10:17:29




Yorumunuzu Bırakın

Adınız:
E-Mail:
Yorumunuz:



Günlük Görüntüleme

Toplam Görüntüleme

Kayıt Ol

Giriş Yap
Üye Ol

Paylaş

Copyright © 2017 - 2024 Designed By WebMaster All Rights Reserved.