2009-11-27 2 views
1

Я делаю определяемые пользователем ключевые макросы для программы. (Эти макросы ограничены этой программой.)Обход клавиатуры, ввод мыши и пропуск SendInput

Я использую TApplicationEvents для записи ключевых сообщений. И затем используйте SendInput, чтобы воспроизвести их. Но мне нужно отключить мышь и клавиатуру, чтобы она не прерывала воспроизведение.

Я не могу использовать JournalPlaybackProc и JournalRecordProc, потому что они подчиняются UAC, UIPI в Vista и Win7.

Есть ли простой способ блокировать ввод мыши и клавиатуры при использовании SendInput. (Способ, который не требует повышенных привилегий.)

Также мне нужна одна клавиша выхода, которая останавливает воспроизведение.

EDIT: TControl.Perform не работает, поскольку он игнорирует горячие клавиши.

Я думал об использовании зарезервированного nibble (бит 25-28) в сообщениях WM_KEY, но в документации к окнам говорится, что он зарезервирован и не используется. Каковы могут быть последствия.

ответ

3

Если вы хотите, чтобы «искусственный вход» ограничивался вашим собственным приложением, я бы не использовал SendInput. Если вы используете TApplicationEvents.OnMessage для записи сообщений, я бы добавил «if not (PlayingBack)», чтобы «проверить OnMessage при воспроизведении макроса и использовать Form1.Perform

+0

Это хорошая идея. Но это одна проблема - она ​​не охватывает несколько форм. Ex. Если кнопка открывает новую форму, а затем она делает что-то в этой новой форме. Я думаю, возможно, как-то можно получить активную форму, а затем перенаправить туда вход. – Egon

+0

Я думаю, что я нашел дополнительную вещь, в которой мне нужно «Screen.ActiveForm» ... (я буду тестировать завтра ...) – Egon

+0

ОК почти, но это не очень хорошо сочетается с горячими клавишами ... – Egon

1

Я всегда использовал DLL AutoIT для отправки KeyStrokes как а также блокировку клавиатуры и мыши.

Есть одна вещь, и AutoIT не может блокировать клавиши Ctrl + Alt + Del.

Do check it out.

HTH

+0

Это очень интересная ссылка. Благодаря! – robsoft