1 (изменено: Ядрён, 2017-04-09 06:24:06)

Тема: AHK: Автосмена регистра перед вводом заглавных букв

Доброго времени суток. Вдохновился тут идеей писать правильно. Смысл идеи в том что бы первая буква писалась заглавной до символов (. : ; ? !) , а после этих символов опять первая буква писалась заглавной.

Пример:

Скрипт преобразует первую букву в заглавную. После точки или указанных выше знаков , первая буква так же заглавная.

+ открыть спойлер

Мне кажется легче будет писать с таким скриптом и изредка ставить его на паузу нежели всё время использовать "Caps Lock" или "Shift" .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2 (изменено: svoboden, 2017-04-09 05:57:28)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Блокнот.

3

Re: AHK: Автосмена регистра перед вводом заглавных букв

svoboden ,А как мне поможет блокнот в браузере. Нужен скрипт что бы работал везде
в особенности в браузере.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

4

Re: AHK: Автосмена регистра перед вводом заглавных букв

Ядрён, Capitalize.ahk.

5

Re: AHK: Автосмена регистра перед вводом заглавных букв

Уважаемый becauseim и что же делать с этим скриптом. Этот "Capitalize.ahk" у меня не запускается.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

6

Re: AHK: Автосмена регистра перед вводом заглавных букв

Облегчить может только форумный Spell Cheсker, запрещающий публикацию с ошибками.

7

Re: AHK: Автосмена регистра перед вводом заглавных букв

Ядрён, у меня запускается. Каждое новое предложение начинается с заглавной буквы. Насколько все правильно работает - не знаю, т.к. фактически не использую.

/* Capitalize v1.2
Last time modified: 2016.06.15 14:55

Summary: automatically capitalizes letters after hitting Enter or typing dot, exclamation mark or question mark or triple dots.

Note: this script is built so that it supports russian keyboard layout.

Script author: Drugoy a.k.a. Drugmix
Contacts: idrugoy@gmail.com, drug0y@ya.ru
https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/Capitalize/Capitalize.ahk
*/
#NoEnv
#SingleInstance, Force
;~ #NoTrayIcon
#InputLevel, 2
StringCaseSense, Locale	; Without this the 'If var Is Lower/Upper' checks will fail for Cyrillic.

; Menu Tray, Icon, imageRes.dll, 118
SetKeyDelay, -1
endChars := "?!.…{Enter}"	; List of keys to trigger capitalizing after them.
GroupAdd, ExcludedWindows, ahk_exe explorer.exe

SetFormat, Integer, Hex

Global capNextChar
Global scanCodesCharMap := {0x10: "й", 0x11: "ц", 0x12: "у", 0x13: "к", 0x14: "е", 0x15: "н", 0x16: "г", 0x17: "ш", 0x18: "щ", 0x19: "з", 0x1E: "ф", 0x1F: "ы", 0x20: "в", 0x21: "а", 0x22: "п", 0x23: "р", 0x24: "о", 0x25: "л", 0x26: "д", 0x2C: "я", 0x2D: "ч", 0x2E: "с", 0x2F: "м", 0x30: "и", 0x31: "т", 0x32: "ь", 0x1A: "х", 0x1B: "ъ", 0x27: "ж", 0x28: "э", 0x33: "б", 0x34: "ю", 0x29: "ё"}

Hotkey, IfWinNotActive, ahk_group ExcludedWindows

; Hook to 'Space' key.
funcObjSpace := Func("capitalize")	;.Bind(" ")
Hotkey, Space, % funcObjSpace

For k In scanCodesCharMap	; Register hotkeys for each mentioned scan code.
{
	Hotkey, If
	If k In 0x1A,0x1B,0x27,0x28,0x33,0x34,0x29	; Hotkeys with these scan codes should be registered only for Russial keyboard layout.
		Hotkey, If, isCurrLayoutRu()
	funcObj%k% := Func("capitalize").Bind(k)
	Hotkey, % "sc" k, % funcObj%k%
}

Loop	; Listen to input keys, look for 'endChars' to be sent, to set a token 'capNextChar' to capitalize next char.
{
	Input, key, C E L1 V, % endChars
	capNextChar := (key == " " ? capNextChar : (InStr(ErrorLevel, "EndKey:Enter") ? 2 : InStr(ErrorLevel, "EndKey:")))
}

capitalize(input = "")	; The function that decides whether to and how to transform the input keys.
; input - scan code of an input key.
{
	If !(input)
	{
		capNextChar *= 2	; Mark spaces being sent after the end chars by doubling the variable's value.
		Send, {Space}
		Return
	}
	sendMe := (isCurrLayoutRu() ? scanCodesCharMap[input] : GetKeyName("sc" input))	; Transform the key's scan code into a char to send (either english or russian, depending on the check on the previous line).
	If (capNextChar > 1)	; Means that an end char has fired and there was at least one space after it.
		StringUpper, sendMe, sendMe	; Capitalize the key.
	Send, % sendMe
}

isCurrLayoutRu()
{
	Return (DllCall("GetKeyboardLayout", Ptr, DllCall("GetWindowThreadProcessId", Ptr, WinExist("A"), UInt, 0, Ptr), Ptr) & 0xFFFF == 0x409 ? 0 : 1)	; Get current keyboard layout. https://msdn.microsoft.com/en-us/goglobal/bb896001 0x0409 - en-US English (United States), so we just assume that if current layout is not this one - then it's probably ru.
}

#If isCurrLayoutRu()
#If

8

Re: AHK: Автосмена регистра перед вводом заглавных букв

stealzy пишет:

Flasher, yuppu, я думаю можно существенно облегчить вам жизнь, если придумать скрипт, ставящий точки в конце предложений .

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

9

Re: AHK: Автосмена регистра перед вводом заглавных букв

becauseim у меня заглавные буквы только после нажатия "Enter". А так что бы просто писать и первые буквы были заглавными такого нет.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

10 (изменено: becauseim, 2017-04-09 21:55:32)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Ядрён, начальное предложение и у меня не всегда с большой, а после окончания предложения и следом идущим пробелом - вроде стабильно.

11 (изменено: Ядрён, 2017-04-10 02:43:29)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Я вам так скажу на "андроид" как то условие сделали (первая буква всегда заглавная ) там тоже клавиатура , хоть и виртуальная.

+ открыть спойлер

Не ужели никто не сможет помочь ,хотя бы расширением для "Google Chrome" .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

12

Re: AHK: Автосмена регистра перед вводом заглавных букв

stealzy, да. Но мое предложение связано в большей степени со странным, на мой взгляд, особым отношением комьюнити именно к точкам в конце сообщений. Хотя природу этого явления мне помогли определить ранее. Или просто узнал, не помню. А сейчас лишь отметил.

13 (изменено: serzh82saratov, 2017-04-10 02:21:18)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Не понятно, зачем столько танцев с кирилицей. Вроде с любым языком должно работать.


#NoEnv
#SingleInstance, Force
#KeyHistory 0
ListLines Off
SetBatchLines -1

endSentence := "?!.…"
endChars := " "
endKeys := "{Enter}"

Loop
{
	Input, key, E L1 V, % endSentence endKeys 
	If InStr(ErrorLevel, "EndKey:")
		wait := InStr(endSentence, SubStr(ErrorLevel, 8)) ? 1 : 2
	Else If (wait && InStr(endChars, key))
		wait := 2
	Else If (wait = 2 && !(wait := 0) && key ~= "(*UCP)\w")
		SendInput, % "{Backspace}" Format("{:U}", key)
	Else If (wait = 1)
		wait := 0
}

~Backspace:: wait := 0
stealzy пишет:

Ядрён, вам надо как-то узнавать, что вот эта вот буква - первая.

Ядрён пишет:

Я вам так скажу на "андроид" как то условие сделали (первая буква всегда заглавная )

Кто его знает как там, но скорее всего там универсально по счёт поля ввода текста, и к нему всегда есть доступ. Также и на винде можно сделать, но только с теми контролами с которыми "возможно работать".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14 (изменено: Ядрён, 2017-04-10 03:32:57)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Уважаемый serzh82saratov , ваш код работает на ура . Только самая первая буква печатается в нижнем регистре. Может как нибудь по изменению курсора("If A_Cursor = Unknown") + клик сделать активацию верхнего регистра самой первой буквы. Или сделать так что бы скрипт реагировал на первое нажатие пробела и менял первую букву слова в верхний регистр , а остальные нажатия пробела не влияли бы на смену регистра , потому что пробел был нажат после точки ("?!.…") и.т.д. .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

15

Re: AHK: Автосмена регистра перед вводом заглавных букв

Если быстро печатать, то несовсем на ура. Где то вроде видел аналогичное решение парой строк автозамены. Я это запостил собственно для автора выше выложенного кода, чтобы обсудить необходимость танцев вокруг кириллицы. На счёт первой буквы, и в целом идеи, считаю что всё окажется костылём, так что увольте.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Автосмена регистра перед вводом заглавных букв

Костыль для первой буквы:

Hotkey ~*LButton, L
Hotkey ~*Tab, L

L:
Input, key, L1, {LCtrl}{RCtrl}{LAlt}{RAlt}
If InStr(ErrorLevel, "EndKey:")
	Return
clipTmp := Clipboard
Clipboard =
Send {ShiftDown}{Left}{ShiftUp}
Sleep 20
SendPlay ^{Ins}
ClipWait .3
Send {Right}
letter:=Clipboard
if (((letter = "") || (letter = "`n") || (letter = "`r`n")) && (key ~= "(*UCP)\w"))
	Send % Format("{:U}", key)
else
	Send % key
Return

17

Re: AHK: Автосмена регистра перед вводом заглавных букв

Доброго времени суток. Уважаемый serzh82saratov , а почему не работает активация скрипта по клавише "vk1", если вместо неё вписать любую другую клавишу клавиатуры, то активация работает по этой клавише.

#NoEnv
#SingleInstance, Force
#KeyHistory 0
ListLines Off
SetBatchLines -1
SetKeyDelay -1


endSentence := "?!.…"
endChars := " "
endKeys := "{vk1}"


Loop
{
	Input, key, E L1 V, % endSentence endKeys  
	If InStr(ErrorLevel, "EndKey:")
		wait := InStr(endSentence, SubStr(ErrorLevel, 8)) ? 1 : 2
	Else If (wait && InStr(endChars, key))
		wait := 2
	Else If (wait = 2 && !(wait := 0) && key ~= "(*UCP)\w")
		SendInput, % "{Backspace}" Format("{:U}", key)
	Else If (wait = 1)
		wait := 0
}

~Backspace:: wait := 0
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

18 (изменено: serzh82saratov, 2017-04-13 00:50:21)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Input не дружит с мышью, можно так:

#NoEnv
#SingleInstance, Force
#KeyHistory 0
ListLines Off
SetBatchLines -1
SetKeyDelay -1

endSentence := "?!.…"
endChars := " "


Loop
{
	Input, key, E L1 V, % endSentence endKeys
	If InStr(ErrorLevel, "EndKey:")
		wait := InStr(endSentence, SubStr(ErrorLevel, 8)) ? 1 : 2
	Else If (wait && InStr(endChars, key))
		wait := 2
	Else If (wait = 2 && !(wait := 0) && key ~= "(*UCP)\w")
		SendInput, % "{Backspace}" Format("{:U}", key)
	Else If (wait = 1)
		wait := 0
}

~Backspace:: wait := 0
~LButton:: wait := 2
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Автосмена регистра перед вводом заглавных букв

Уважаемый serzh82saratov всё работает как надо. А можно сделать что бы сразу после точки была заглавная буква, без пробела. Просто я частенько не ставлю пробел после точки, легче будет расставить пробелы чем возвращаться и перепечатывать текст. Потому что если писать сразу после точки буква печатается в нижнем регистре.

Пример:

Привет.Как дела.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

20 (изменено: becauseim, 2017-04-15 14:56:14)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Ядрён, а как же "т.к.", "т.е.", "в т.ч.", "www.script-coding.com"?

Протестировал последний код. Неудобно использовать, когда необходимо ввести слово вместо выделенных слов, т.к. Выделенные слова могут быть и в середине предложения, а текст печатается с заглавной.

21

Re: AHK: Автосмена регистра перед вводом заглавных букв

becauseim, по такому случаю ("т.к.", "т.е.", "в т.ч."), а такой случай случается нечасто, можно скрипт и на паузу поставить. Зато основной текст набирать без напряга и в удовольствие, да и это всё ("т.к.", "т.е.", "в т.ч.") сокращение, а я лично люблю давать развёрнутые ответы без сокращений.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

22

Re: AHK: Автосмена регистра перед вводом заглавных букв

Ядрён, приведенные сокращения никак не противопостовляются развернутости выражения мысли.
Кроме всего прочего, стоит присесть за чужой компьютер - привычка писать без пробелов обернется боком.

23 (изменено: serzh82saratov, 2017-04-16 10:54:17)

Re: AHK: Автосмена регистра перед вводом заглавных букв

Ядрён пишет:

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

#NoEnv
#SingleInstance, Force
#KeyHistory 0
ListLines Off
SetBatchLines -1
SetKeyDelay -1


endSentence := "?!…"
endChars := " "
endKeys := "{vk1}"
end := "."

Loop
{
	Input, key, E L1 V, % endSentence endKeys end
	If InStr(ErrorLevel, "EndKey:")
		wait := InStr(endSentence, SubStr(ErrorLevel, 8)) ? 1 : 2
	Else If (wait && InStr(endChars, key))
		wait := 2
	Else If (wait = 2 && !(wait := 0) && key ~= "(*UCP)\w")
		SendInput, % "{Backspace}" Format("{:U}", key)
	Else If (wait = 1)
		wait := 0
}

~Backspace:: wait := 0
~LButton:: wait := 2
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK: Автосмена регистра перед вводом заглавных букв

Спасибо вам serzh82saratov огромное то что нужно.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).