Вопрос:
Можно ли отправить виртуальную мышь щелкнуть в определенном месте экрана , не влияя на «реальную» позицию курсора? , да, как это можно реализовать? временно перемещение мыши, а затем перемещение ее обратно не является вариантом, либо , потому что это мешает «реальной» мышью. Например, если я запускаю щелчок из кнопки в пользовательском интерфейсе, мышь уже за этой кнопкой, так что в итоге она снова называет функцию в цикле, потому что она не выполняет щелчок, где я установил ее на (x25, y20) относительно монитора. Но это побеждает цель, поскольку я хочу избежать перемещения «реального» курсора. Я открыт для решений в C# (с p/invoke) или c.StartCommand = new RelayCommand(o =>
{
VirtualMouse.SendVirtualClick(25, 20);
},
o => true);
virtualmouse.cs
public static class VirtualMouse
{
[StructLayout(LayoutKind.Sequential)]
private struct INPUT
{
public uint type;
public MOUSEINPUT mi;
}
[StructLayout(LayoutKind.Sequential)]
private struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
[DllImport("user32.dll")]
private static extern int GetSystemMetrics(int nIndex);
private const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
private const uint MOUSEEVENTF_LEFTUP = 0x0004;
private const uint MOUSEEVENTF_ABSOLUTE = 0x8000;
private const uint MOUSEEVENTF_MOVE = 0x0001;
private const uint INPUT_MOUSE = 0;
public static void SendVirtualClick(int x, int y)
{
// Get screen dimensions
int screenWidth = GetSystemMetrics(0);
int screenHeight = GetSystemMetrics(1);
// Convert to absolute coordinates (0-65535)
int absoluteX = (x * 65535) / screenWidth;
int absoluteY = (y * 65535) / screenHeight;
// Create input sequence
INPUT[] inputs = new INPUT[3];
// 1. First send a zero-movement to sync cursor state (invisible to user)
inputs[0] = new INPUT
{
type = INPUT_MOUSE,
mi = new MOUSEINPUT
{
dx = 0,
dy = 0,
dwFlags = MOUSEEVENTF_MOVE,
time = 0
}
};
// 2. Mouse down at target position
inputs[1] = new INPUT
{
type = INPUT_MOUSE,
mi = new MOUSEINPUT
{
dx = absoluteX,
dy = absoluteY,
dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN,
time = 0
}
};
// 3. Mouse up at same position
inputs[2] = new INPUT
{
type = INPUT_MOUSE,
mi = new MOUSEINPUT
{
dx = absoluteX,
dy = absoluteY,
dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP,
time = 0
}
};
// Send all inputs at once
SendInput(3, inputs, Marshal.SizeOf(typeof(INPUT)));
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... the-cursor
Как правильно отправить мышь на экране, не перемещая курсор ⇐ C#
Место общения программистов C#
-
Anonymous
1751842979
Anonymous
[b] Вопрос: [/b]
Можно ли отправить виртуальную мышь щелкнуть в определенном месте экрана [b], не влияя на «реальную» позицию курсора? [/b], да, как это можно реализовать? [b] временно перемещение мыши, а затем перемещение ее обратно не является вариантом, либо [/b], потому что это мешает «реальной» мышью. Например, если я запускаю щелчок из кнопки в пользовательском интерфейсе, мышь уже за этой кнопкой, так что в итоге она снова называет функцию в цикле, потому что она не выполняет щелчок, где я установил ее на (x25, y20) относительно монитора. Но это побеждает цель, поскольку я хочу избежать перемещения «реального» курсора. Я открыт для решений в C# (с p/invoke) или c.StartCommand = new RelayCommand(o =>
{
VirtualMouse.SendVirtualClick(25, 20);
},
o => true);
[b] virtualmouse.cs[/b]
public static class VirtualMouse
{
[StructLayout(LayoutKind.Sequential)]
private struct INPUT
{
public uint type;
public MOUSEINPUT mi;
}
[StructLayout(LayoutKind.Sequential)]
private struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
[DllImport("user32.dll")]
private static extern int GetSystemMetrics(int nIndex);
private const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
private const uint MOUSEEVENTF_LEFTUP = 0x0004;
private const uint MOUSEEVENTF_ABSOLUTE = 0x8000;
private const uint MOUSEEVENTF_MOVE = 0x0001;
private const uint INPUT_MOUSE = 0;
public static void SendVirtualClick(int x, int y)
{
// Get screen dimensions
int screenWidth = GetSystemMetrics(0);
int screenHeight = GetSystemMetrics(1);
// Convert to absolute coordinates (0-65535)
int absoluteX = (x * 65535) / screenWidth;
int absoluteY = (y * 65535) / screenHeight;
// Create input sequence
INPUT[] inputs = new INPUT[3];
// 1. First send a zero-movement to sync cursor state (invisible to user)
inputs[0] = new INPUT
{
type = INPUT_MOUSE,
mi = new MOUSEINPUT
{
dx = 0,
dy = 0,
dwFlags = MOUSEEVENTF_MOVE,
time = 0
}
};
// 2. Mouse down at target position
inputs[1] = new INPUT
{
type = INPUT_MOUSE,
mi = new MOUSEINPUT
{
dx = absoluteX,
dy = absoluteY,
dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN,
time = 0
}
};
// 3. Mouse up at same position
inputs[2] = new INPUT
{
type = INPUT_MOUSE,
mi = new MOUSEINPUT
{
dx = absoluteX,
dy = absoluteY,
dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP,
time = 0
}
};
// Send all inputs at once
SendInput(3, inputs, Marshal.SizeOf(typeof(INPUT)));
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79692137/how-do-i-properly-send-a-mouse-click-on-screen-without-moving-the-cursor[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия