1

Я хотел бы иметь скрипт в AutoHotkey, который позволяет мне делать следующее:

  • Когда я нажимаю Control + Пробел: он запускает "режим выделения текста" (то есть, если я перемещаю курсор с помощью клавиш со стрелками или перемещаю мышь, он выделяет текст)

  • Когда я снова нажму Control + Пробел: это приведет к прекращению "режима выделения текста" (например, если я переместу курсор с помощью клавиш со стрелками или переместлю мышь, он не выделит текст)

Однако я хотел бы избежать использования следующих стратегий по причинам, объясненным ниже:

Стратегия 1:

Следующий скрипт не позволяет мне перемещать курсор с помощью клавиатуры после начала выделения текста. Видимо компьютер считает, что я постоянно нажимаю на местоположение мыши, поэтому не позволяет перемещать курсор с помощью клавиатуры.

*^Space::
text_selection_is_on := !text_selection_is_on
if text_selection_is_on
   Send, {Click down}
else
   Send, {Click up}
return

Стратегия 2:

Следующий скрипт основан на имитации действия нажатия клавиши Shift вниз, чтобы начать выделение текста. Тем не менее, я хотел бы, чтобы не полагаться на клавиши переключения , так как некоторые из программ , которые я планирую использовать этот сценарий с требуют смены ключа , чтобы быть вверх (т.е. не нажата) при перемещении курсора , чтобы выбрать текст.

*^Space::
text_selection_is_on := !text_selection_is_on
if text_selection_is_on
   Send, {Shift down}
else
   Send, {Shift up}
return

Возможно ли это сделать с помощью AutoHotkey? Если так, то как?

Спасибо!

2 ответа2

1

Очень некрасиво, но, возможно, это решение, которое вы искали. Очень печально, что решение для сдвига не работает для вас, потому что это то, что я всегда использовал.

*^Space::
dx = 1
dy = 1
text_selection_is_on := !text_selection_is_on
if text_selection_is_on
{
   MouseMove, %A_CaretX%, %A_CaretY%, 0
   dx := A_CaretX
   Send, {right}
   dx := A_CaretX - dx
   Send, {left}
   dy := A_CaretY
   Send, {down}
   dy := A_CaretY - dy
   Send, {up}
   Send, {Click down}
}
else
   Send, {Click up}
return

left::
if text_selection_is_on
    MouseMove, % -dx, 0, 0, R
else
   Send, {left}
return

right::
if text_selection_is_on
    MouseMove, % dx, 0, 0, R
else
   Send, {right}
return

down::
if text_selection_is_on
    MouseMove, 0, % dy, 0, R
else
   Send, {down}
return

up::
if text_selection_is_on
    MouseMove, 0, % -dy, 0, R
else
   Send, {up}
return
0

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

Однако, возможно, вы могли бы уточнить эти ограничения при использовании клавиши Shift. Может ли клавиша Shift вообще не использоваться? Или его можно использовать до тех пор, пока он удерживается в течение очень короткого времени, и пока мышь и каретка не двигаются в течение этого времени?

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

  • Сделайте простой щелчок левой кнопкой мыши на одном конце выделения.
  • Переместите мышь на другой конец выделения.
  • Сделайте там Shift + щелчок левой кнопкой мыши (SendInput + {LButton}).

Опять же, я понятия не имею о практических обстоятельствах ваших программ или о том, как работает их выбор текста.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .