Вопрос AHK: Эмуляция мыши на уровне драйвера

Начинающий
Статус
Оффлайн
Регистрация
19 Фев 2019
Сообщения
31
Реакции[?]
1
Поинты[?]
0
Здравствуйте, хотел бы спросить совета. Я пытаюсь сделать один скрипт, в котором нажатия клавиш мыши и передвижения курсора будут эмулироваться на уровне драйвера. Нужно это для того, что бы некоторые программы которые блокируют эмуляцию мыши и клавиатуры программным образом, то есть которые происходят с помощью API библиотек винды функциями по типу "SendInput" или "mouse_event". Я вычитал, что блокируются события мыши, потому что вместе с этими функциями винда выставляет еще и флаг, обозначающий то, что они были эмулированы, грубо говоря. Так вот сам вопрос, кто-то сталкивался с подобной проблемой и может ли поделиться какой-нибудь библиотекой, которая посылает команду сразу на usb порт, создавая при этом виртуальную мышь, ну или что-то в это духе. Насколько я понял, пытаться найти способ запретить винде выставлять этот флаг при выполнении функции, как минимум очень геморная задача, поэтому решил пойти таким путем.
Вот кусок кода с моей программы, тут я с помощью "SendInput" пытался, в итоге, в окне удаленного доступа ничего происходит.

КОД:
#NoEnv
#SingleInstance, Force
#Persistent
#InstallKeybdHook
#UseHook
#KeyHistory, 0
;#HotKeyInterval 1
;#MaxHotkeysPerInterval 127

SetKeyDelay,-1, 1
SetControlDelay, -1
SetMouseDelay, -1
SetWinDelay,-1
SetBatchLines,-1
ListLines, Off
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, High

mouse_sendinput_xy(x2, y2, Absolute := False)
{
global Mon_Width, Mon_Hight, gmok
static SysX, SysY
SysX := 65535 // Mon_Width, SysY := 65535 // Mon_Hight
static INPUT_MOUSE := 0, MOUSEEVENTF_MOVE := 0x0001, MOUSEEVENTF_ABSOLUTEMOVE := 0x8001
StructSize := A_PtrSize + 4*4 + A_PtrSize*2
VarSetCapacity(MouseInput_Move, StructSize)
NumPut(INPUT_MOUSE, MouseInput_Move, "UInt")

If Absolute
x2 *= SysX, y2 *= SysY
Else
{
DPI_Ratio := Round(A_ScreenDPI / 96, 3)
x2 := (x2 != 0) ? (x2 / Abs(x2) * Ceil(Abs(x2) / DPI_Ratio)) : 0
y2 := (y2 != 0) ? (y2 / Abs(y2) * Ceil(Abs(y2) / DPI_Ratio)) : 0

Random, RandXY, -1, 1
If (x2 = 0) && (y2 > 2)
x2 := RandXY
Else If (y2 = 0) && (x2 > 2)
y2 := RandXY
}

NumPut(x2, MouseInput_Move, A_PtrSize, "UInt")
NumPut(y2, MouseInput_Move, A_PtrSize + 4, "UInt")
If Absolute
NumPut(MOUSEEVENTF_ABSOLUTEMOVE, MouseInput_Move, A_PtrSize + 4*3, "UInt")
Else
NumPut(MOUSEEVENTF_MOVE, MouseInput_Move, A_PtrSize + 4*3, "UInt")

If gmok
DllCall("ghub_mouse.dll\Mach_Move", "Char", x2, "Char", y2, "Int", 0)
Else
DllCall("SendInput", "UInt", 1, "Ptr", &MouseInput_Move, "Int", StructSize)
VarSetCapacity(MouseInput_Move, 0) ;
}

F3::
mouse_sendinput_xy(10, 10, False)
return




Нарыл еще на гитхабе пару тем о эмуляции на уровне драйвера:
Вот эта мне показалась очень подходящей, но я не понял как можно из нее команды подсунуть в ahk. Как из обычной dll я так понимаю не получиться, раньше мало был знаком с гитхабом, поэтому с большим трудом разбираюсь, как пользоваться кодом от туда. Если кто-то понял, подскажите пожалуйста, как можно с помощью этого виртуального драйвера в ахк засунуть команду мышке.
Пожалуйста, авторизуйтесь для просмотра ссылки.


Еще один драйвер с гитхаба, как я понял более менее популярный interception, я пошарился в нем по библиотекам и вообще ничего не нашел для моей задачи. Либо я такой затупок, либо драйвер этот был для других целей написан.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Я так же посмотрел пару примеров по работе с interception в ahk, но об эмуляции нажатия клавиш там речи не шло. Так что уважаемые знатоки, подскажите, пожалуйста, можно ли как-то реализовать такую штуку.






Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
19 Фев 2019
Сообщения
31
Реакции[?]
1
Поинты[?]
0
На ahk есть
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Спасибо большое за подсказку, Class DD уже не поддерживаеться, из-за загрузки DLL c китайских серверов, которые вырубили. Но пока я искал решение проблемы, нашел AutoHotInterception. По сути библиотека делает тоже самое, но до сих пор дорабатывается и не зависит от китайских серверов)
 
Сверху Снизу