Эмуляция нажатия клавиш мыши без использования основного курсора может быть сложной задачей, особенно в контексте виртуальных эмуляторов, таких как LD Player. Эти эмуляторы могут использовать собственные методы обработки ввода, которые не реагируют на стандартные оснастки Windows для эмуляции кликов. Вот несколько подходов, которые вы можете попробовать:
### 1. Использование `SendInput`
Попробуйте использовать функцию `SendInput`, которая позволяет отправлять события ввода непосредственно в систему, минуя стандартные механизмы обработки сообщений. Вот пример использования `SendInput` для выполнения кликов:
```python
import ctypes
import time
# Определите структуры для событий ввода
class INPUT(ctypes.Structure):
_fields_ = [("type", ctypes.c_ulong),
("mi", ctypes.wintypes.MOUSEINPUT)]
class MOUSEINPUT(ctypes.Structure):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", ctypes.c_ulong)]
# Константы для ключевых событий
INPUT_MOUSE = 0
MOUSEEVENTF_LEFTDOWN = 0x0002
MOUSEEVENTF_LEFTUP = 0x0004
def click_at(x, y):
# Создайте событие для нажатия левой кнопки мыши
input_down = INPUT()
input_down.type = INPUT_MOUSE
input_down.mi.dx = x
input_down.mi.dy = y
input_down.mi.dwFlags = MOUSEEVENTF_LEFTDOWN
input_up = INPUT()
input_up.type = INPUT_MOUSE
input_up.mi.dx = x
input_up.mi.dy = y
input_up.mi.dwFlags = MOUSEEVENTF_LEFTUP
# Отправьте события ввода
ctypes.windll.user32.SendInput(1, ctypes.byref(input_down), ctypes.sizeof(input_down))
ctypes.windll.user32.SendInput(1, ctypes.byref(input_up), ctypes.sizeof(input_up))
# Пример вызова по координатам
click_at(100, 100) # Замените на нужные координаты
```
### 2. Проверка HWND и правильности координат
Убедитесь, что `hwnd` указывает на правильное окно, и что вы передаете координаты относительно этого окна. Возможно, стоит также проверить, правильно ли вы рассчитываете локальные координаты.
### 3. Использование сторонних библиотек
Если вы не против использования сторонних библиотек, `pynput`, `pyautogui` и другие могут быть хорошими вариантами, хотя они могут перемещать курсор. Возможно, придется написать собственную библиотеку на C++ для более глубокого доступа к системе (если это необходимо).
### 4. Проверьте настройки эмулятора
Проверьте, нет ли специальных настроек в вашем эмуляторе LD Player, которые могут блокировать события ввода, такие как режимы безопасности или фильтры.
### 5. Низкоуровневый доступ (C/C++)
Если ничего из вышеперечисленного не сработало, возможно, действительно стоит рассмотреть написание низкоуровневого кода на C/C++, особенно если вы хотите обойти ограничения, накладываемые эмулятором. Это может потребовать дополнительных усилий, но предоставит вам больше контроля за вводом.
Каждый из этих подходов потребует дальнейших тестирований и возможной адаптации в зависимости от вашего конкретного случая и особенностей эмулятора.