Не нажимаются кнопки в C# форме, как исправить?

DDDmoney

Client
Регистрация
12.02.2022
Сообщения
42
Благодарностей
5
Баллы
8
Всем привет, подскажите плз, в шаблоне есть C# форма с кнопками,
на них периодически кликает сторонний автокликер (по заданным Х, Y координатам экрана)
Но проблема - кнопки не нажимаются, или не отрабатывают событие по нажатию:(

Хотя когда по ним вручную мышкой кликаешь - всё ок срабатывает.
По любым другим объектам винды (открытый Paint с маркером, калькулятор ) в заданном месте экрана кликер норм кликает.

Как можно исправить код кнопок чтоб они норм срабатывали? Вот код:

96437

C#:
System.Windows.Forms.Form F = new System.Windows.Forms.Form();

//выбираем локацию формы
F.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
F.Location = new Point(10, 30);
// размеры формы
F.Size=new System.Drawing.Size(300, 150);
//создаем кнопку
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button.Text = "КНОПКА 1";

//положение в окне
button.Location = new System.Drawing.Point(5,5);
//размер кнопки
button.Size=new System.Drawing.Size(80, 80);
//кидаем на форму
F.Controls.Add(button);

//создаем вторую кнопку
System.Windows.Forms.Button button2 = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button2.Text = "КНОПКА 2";

//положение в окне
button2.Location = new System.Drawing.Point(120,5);
//размер кнопки
button2.Size=new System.Drawing.Size(80, 80);
//кидаем на форму
F.Controls.Add(button2);

//событие при нажатии КНОПКИ 1 (эмуляция нажатия ctrl+w)
button.Click+= delegate(object sender, System.EventArgs e)
{

instance.SendText("{SHIFTDOWN}w{SHIFTUP}", 15);
        
//записываем точное время нажатия в txt файл
File.WriteAllText(@"C:\Users\DDD\Desktop\DDD\button_was_clicked_1.txt",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

};

//событие при нажатии КНОПКИ 2 (эмуляция нажатия ctrl+s)
button2.Click+= delegate(object sender, System.EventArgs e)
{
instance.SendText("{SHIFTDOWN}s{SHIFTUP}", 15);   

//записываем точное время нажатия в txt файл
File.WriteAllText(@"C:\Users\DDD\Desktop\DDD\button_was_clicked_1.txt",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

  
};

//запускаем форму       
F.ShowDialog();
return 0;
 

DDDmoney

Client
Регистрация
12.02.2022
Сообщения
42
Благодарностей
5
Баллы
8
UP.
Удалось добиться срабатывания кнопок, изменив строку
C#:
button.Click+= delegate(object sender, System.EventArgs e)
на
C#:
button.MouseHover+=delegate(object sender, System.EventArgs e)
НО теперь это работает по наведению мыши.. А не по нажатию
А как сделать срабатывание кнопок именно по клику?

пробовал заменить:
C#:
button.Click+= delegate(object sender, System.EventArgs e)
на
C#:
button.MouseClick+= delegate(object sender, System.Windows.Forms.MouseEventArgs e)
так не сработало..
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Хм... Это не надежно...
Гораздо лучше будет зайти в цикл, и крутить с интервалом в 1 секунду проверку на существование какого-то файла.
Ну, и этим сторонним автокликером просто создавать пустой текстовый файл, что и будет служить сигналом выполнения нужного действия.
 

DDDmoney

Client
Регистрация
12.02.2022
Сообщения
42
Благодарностей
5
Баллы
8
Хм... Это не надежно...
Гораздо лучше будет зайти в цикл, и крутить с интервалом в 1 секунду проверку на существование какого-то файла.
Ну, и этим сторонним автокликером просто создавать пустой текстовый файл, что и будет служить сигналом выполнения нужного действия.
Спасибо за совет. К сожалению, в том стороннем автокликере нет функционала создавать текстовые файлы.
Погуглил свою проблему, что событие не срабатывает,
на форумах по C# пишут, что надо привязать обработчик к событию в коде "вручную".
Но из-за плохих знаний C# не могу совместить их код со своим сниппетом, не знаете как это сделать?
их код:
public Form1()
{
    InitializeComponent();
    button1.Click += button1_click; 
}
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Спасибо за совет. К сожалению, в том стороннем автокликере нет функционала создавать текстовые файлы.
Погуглил свою проблему, что событие не срабатывает,
на форумах по C# пишут, что надо привязать обработчик к событию в коде "вручную".
Но из-за плохих знаний C# не могу совместить их код со своим сниппетом, не знаете как это сделать?
их код:
public Form1()
{
    InitializeComponent();
    button1.Click += button1_click;
}
Попробуйте, может сработает просто при нажатии на кнопку мышки (клик это нажатие и отжатие, вдруг автокликер отжатие не эмулирует).
Ниже пример:
C#:
string[] paths = new[]{
    Path.Combine(project.Directory, "button_was_clicked_1.txt"),
    Path.Combine(project.Directory, "button_was_clicked_2.txt")
};
var F = new System.Windows.Forms.Form();
    F.StartPosition = System.Windows.Forms.FormStartPosition.Manual;//выбираем локацию формы
    F.Location = new Point(10, 30);
    F.Size=new System.Drawing.Size(300, 150);

var button = new System.Windows.Forms.Button();//создаем кнопку
    button.Text = "КНОПКА 1";//задаем имя чекбоксам
    button.Location = new System.Drawing.Point(5,5);//положение в окне
    button.Size=new System.Drawing.Size(80, 80);//размер кнопки
    
    button.MouseDown+= delegate(object sender, System.Windows.Forms.MouseEventArgs e) {       
        //instance.SendText("{SHIFTDOWN}w{SHIFTUP}", 15);//событие при нажатии КНОПКИ 1
        string text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); 
        File.WriteAllText(paths[0],text);//записываем точное время нажатия в txt файл
    };

var button2 = new System.Windows.Forms.Button();//создаем вторую кнопку
    button2.Text = "КНОПКА 2";//задаем имя чекбоксам
    button2.Location = new System.Drawing.Point(120,5);//положение в окне
    button2.Size=new System.Drawing.Size(80, 80);//размер кнопки
    button2.MouseDown+= delegate(object sender, System.Windows.Forms.MouseEventArgs e) {       
        //instance.SendText("{SHIFTDOWN}s{SHIFTUP}", 15); //событие при нажатии КНОПКИ 2
        string text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); 
        File.WriteAllText(paths[1],text);//записываем точное время нажатия в txt файл
    };   
    
    F.Controls.Add(button);//кидаем на форму
    F.Controls.Add(button2);//кидаем на формy
    F.ShowDialog();//запускаем форму 

return 0;
 

DDDmoney

Client
Регистрация
12.02.2022
Сообщения
42
Благодарностей
5
Баллы
8
Попробуйте, может сработает просто при нажатии на кнопку мышки (клик это нажатие и отжатие, вдруг автокликер отжатие не эмулирует).
Ниже пример:
C#:
string[] paths = new[]{
    Path.Combine(project.Directory, "button_was_clicked_1.txt"),
    Path.Combine(project.Directory, "button_was_clicked_2.txt")
};
var F = new System.Windows.Forms.Form();
    F.StartPosition = System.Windows.Forms.FormStartPosition.Manual;//выбираем локацию формы
    F.Location = new Point(10, 30);
    F.Size=new System.Drawing.Size(300, 150);

var button = new System.Windows.Forms.Button();//создаем кнопку
    button.Text = "КНОПКА 1";//задаем имя чекбоксам
    button.Location = new System.Drawing.Point(5,5);//положение в окне
    button.Size=new System.Drawing.Size(80, 80);//размер кнопки
   
    button.MouseDown+= delegate(object sender, System.Windows.Forms.MouseEventArgs e) {      
        //instance.SendText("{SHIFTDOWN}w{SHIFTUP}", 15);//событие при нажатии КНОПКИ 1
        string text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
        File.WriteAllText(paths[0],text);//записываем точное время нажатия в txt файл
    };

var button2 = new System.Windows.Forms.Button();//создаем вторую кнопку
    button2.Text = "КНОПКА 2";//задаем имя чекбоксам
    button2.Location = new System.Drawing.Point(120,5);//положение в окне
    button2.Size=new System.Drawing.Size(80, 80);//размер кнопки
    button2.MouseDown+= delegate(object sender, System.Windows.Forms.MouseEventArgs e) {      
        //instance.SendText("{SHIFTDOWN}s{SHIFTUP}", 15); //событие при нажатии КНОПКИ 2
        string text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
        File.WriteAllText(paths[1],text);//записываем точное время нажатия в txt файл
    };  
   
    F.Controls.Add(button);//кидаем на форму
    F.Controls.Add(button2);//кидаем на формy
    F.ShowDialog();//запускаем форму

return 0;
Пасиб, думал про это, но MouseDown тоже не срабатывает :dy:
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)