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