Заморожування введення користувача за допомогою AutoHotKey


5

У моєму сценарії AutoHotKey, я хочу, щоб заморозити введення користувача, тобто будь-який вхід від користувача не буде поширюватися на активну програму, а потім розморозити і мати всі вхідні дані, які введений користувачем перейти до програми.

Іншими словами: я замерзаю, тоді користувач набирає "xyz", але це є ні передається в активну програму, а потім розморожується, натискання клавіші "xyz" передаються в програму, а потім все повертається до нормального стану і користувач може ввести знову і він перейде в активну програму.

Це так, поки я вводжу кучу тексту в програмі, використовуючи ControlSendкористувач не втручається.

Можливо? Як?


Я думаю, я повинен запитати, ви відправляєте весь текст одним SendInput, або ви хочете заморозити (включити буфер введення даних користувача), зробити декілька обчислень або петлі з SendInputs в них, потім розморозити (скинути буфер введення даних користувача) )?
Bavi_H

Якщо це можна заморозити, зробіть купа речей, а потім розморозиться, що було б ідеально.
Ram Rachum

Відповіді:


1

Якщо ви в змозі відправити весь текст за допомогою одного SendInput, то AutoHotkey піклується про проблему для вас. Від автоматичної клавіші Надіслати документація,

SendInput і SendPlay [...] буферизують будь-яку фізичну активність клавіатури або миші під час надсилання, що запобігає натисканню клавіш користувача на переміщення з відправленими.

Якщо прийнято втрачати вхід користувача, коли він заморожений (замість буфера і відправити його після цього), ви можете використовувати BlockInput . Щось на зразок

BlockInput On
; Send desired text here
BlockInput Off

Тим не менш, документація BlockInput говорить, що якщо вона починається, коли клавіші вже вниз, вона може блокувати "ключ вгору" події і викликати ключі з'являються застрягли. Отже, залежно від того, коли ви його використовуєте, вам доведеться спочатку почекати, поки ключі будуть випущені за допомогою KeyWait .


Але я використовую ControlSend, тому що я надсилаю певний елемент керування ...
Ram Rachum

В ПОРЯДКУ. Подумайте про оновлення питання, щоб інші користувачі розуміли повну картину.
Bavi_H

Редагувати відповідь: BlockInput може бути корисним.
Bavi_H

Не, BlockInput не допомагає мені.
Ram Rachum

-2

Використовуйте команду Input.

http://autohotkey.free.fr/docs/commands/Input.htm

редагувати

Ти сказав:

У моєму сценарії AutoHotKey, я хочу, щоб заморозити введення користувача, тобто будь-який вхід   від користувача не буде поширюватися на активну програму, а потім   розблокувати і мати всі вхідні дані, введені користувачем, перейти до програми.

Іншими словами: я замерзаю, тоді користувач вводить "xyz", але це не так   перейшли до активної програми, а потім розморожу, натискання клавіш "xyz"   передаються в програму, а потім все повертається до нормального і   користувач може ввести ще раз, і він перейде до активної програми.

Команда Input:

; Зачекайте, доки користувач натисне будь-яку клавішу. Клавіші, які виробляють не видно   символів, таких як клавіші-модифікатори, функціональні клавіші та клавіші зі стрілками,   перелічені як кінцеві   щоб вони також були виявлені.

Input, SingleKey, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}

Це можна зробити для кількох клавіш, або він приймає рядок ключів як аргумент.


Я взагалі не розумів, як це було б корисно.
Ram Rachum

Дозвольте мені процитувати документи.
surfasb

Схоже, що це призначене для того, щоб взяти на себе вхід від користувача. Я не хочу брати участь від користувача. Насправді це нормально, якщо користувач не надає ніякого внеску. Але якщо він це зробить, я хочу буферизувати його і вивести його пізніше, після того, як я закінчу надсилати власний вхід за допомогою SendInput. Я поняття не маю, як я можу досягти цього Input.
Ram Rachum
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.