C# Как двигать мышкой в окне в многопоточном режиме? C#, Visual Studio.
Есть функция SetCursorPos() из библиотеки user32.dll, но она нормально работает лишь когда окно активно и в один поток. Если окно не активно, то мышка не двигается в этом окне. Есть задача двигать мышкой в многопотоке указывая в каком окне её двигать. Для идентификации окна ясное дело используется заголовок окна. Подскажите пожалуйста каким образом решается задача перемещения мыши в многопоточном режиме, когда в каждом потоке своё окно, и не используя функцию SetCursorPos()?
Если можно, то с примером кода.

21 Авг 2019 в 06:32
275 +1
0
Ответы
1

Для перемещения мыши в многопоточном режиме в каждом потоке своё окно можно воспользоваться библиотекой InputSimulator, которая позволяет эмулировать ввод с клавиатуры и мыши.

Пример кода:

using InputSimulator;
using System;
using System.Threading;
class Program
{
static void Main()
{
// Создаем потоки для каждого окна
Thread thread1 = new Thread(() => MoveMouse("Window 1"));
Thread thread2 = new Thread(() => MoveMouse("Window 2"));
// Запускаем потоки
thread1.Start();
thread2.Start();
}
static void MoveMouse(string windowTitle)
{
// Получаем handle окна по заголовку
IntPtr windowHandle = WinApi.FindWindow(null, windowTitle);
if (windowHandle != IntPtr.Zero)
{
// Создаем экземпляр InputSimulator
InputSimulator inputSimulator = new InputSimulator();
// Перемещаем мышь в центр окна
inputSimulator.Mouse.MoveTo(windowHandle);
// Делаем клик в центр окна
inputSimulator.Mouse.LeftButtonClick();
}
else
{
Console.WriteLine("Окно с заголовком '{0}' не найдено", windowTitle);
}
}
}

Для работы с библиотекой InputSimulator нужно установить пакет WindowsInput через NuGet Package Manager:

Install-Package WindowsInput

Также используется функция FindWindow из класса WinApi для поиска окна по заголовку. Вот реализация этой функции:

using System;
using System.Runtime.InteropServices;
using System.Text;
public static class WinApi
{
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}

Теперь потоки будут двигать мышку в указанных окнах независимо друг от друга.

20 Апр в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир