Вызов SendInput неправильный.
Первый параметр указывает количество структур, переданных во втором параметре.
Там, где у тебя в коде используется "array [0..1] of TInput", там их две, что и выражается в первом параметре - 2.
Но заполняешь ты в KeyBoardDown только первую из них (inp[0]), и в KeyBoardUp вторую (inp[1]).
Следовательно, одна из структур остается неочищенной. В результате там находится рандомный мусор, который отличается в Delphi и FPC, что приводит к непредсказуемому поведению.
Потому что по факту эмулируется два нажатия и два отжатия клавиш. А скорее, даже не нажатия, а перемещения мыши.
И даже задействованные структуры надо предварительно очищать по ZeroMemory().
Дополнительно - нажатие и отжатие клавиши не нужно делать отдельными вызовами нажатие-Sleep-отжатие. Достаточно правильно заполнить 2 структуры в массиве - одну на нажатие, вторую на отжатие.
В MouseDown()/MouseUp() первым параметром SendInput() вообще подается "b", который обозначает код кнопки мыши, а не то что должен. Что не даст им работать.
И если заметил, в коде объявлено INPUT_KEYBOARD = 1 - без этого оно бы не работало в Delphi.
Потому что в модуле Windows от Delphi 4 неправильные значения INPUT_MOUSE, INPUT_KEYBOARD.
А в FPC - нормально. Поэтому там же до пары надо переобъявить INPUT_MOUSE = 0.
Ответов: 4658
Рейтинг: 762
|
|||
карма: 26 |
| ||
Голосовали: | tom-it |
Редактировалось 4 раз(а), последний 2025-04-01 13:08:21