1

Тема: AHK: Точка вместо запятой, запятая вместо точки

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

Помогите переобозначить))

.::,
,::.

Такой код меняет местами точку и запятую на английской клавиатуре, а на русской вместо "б" и "ю" ставит точку и запятую, при этом совсем никак не влияет на клавишу точка/запятая русской клавиатуры.

Как поменять значение клавишы точка/запятая русской расскладки?

2

Re: AHK: Точка вместо запятой, запятая вместо точки

OFF: Я для подобных целей пользую «Microsoft Keyboard Layout Creator 1.4». Само собой, такое решение годится только для своей машины.

3

Re: AHK: Точка вместо запятой, запятая вместо точки

Rover
Вообще мысль интересная. Но ведь потом на чужих клавиатурах будете путаться.
Вот это вроде работает:

$vkBF::
    If RU()
        Send, +{vkBF}
    Else
        Send, {vkBF}
Return

$+vkBF::
    If RU()
        Send, {vkBF}
    Else
        Send, +{vkBF}
Return


RU()    ; Проверка языка ввода.
{
    WinID := WinExist("A")
    ThreadID := DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
    InputLocaleID := DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
    If InputLocaleID = 0x4190419
        Return True
    Else
        Return False
}

4 (изменено: tubudum, 2010-02-27 11:13:44)

Re: AHK: Точка вместо запятой, запятая вместо точки

Закрепляем точку и запятую на клавишах независимо от текущей расскладки.
Возможно, в описании (приведеном в начале скрипта) разбираться муторно, но кто захочет вникнет без проблем...

/*
Закрепляем точку и запятую на кнопках независимо от текущей расскладки

на NumPad NumLock = запятая
на NumPad клавиша точки/Del = точка
клавиша русской точки = точка (как штатно в русской раскладке)
клавиша русской точки с нажатым Shift`ом = запятая (как штатно в русской раскладке)
клавиша русской точки с нажатым Ctrl`ом = "/" (как штатно в ангийской раскладке)
клавиша русской точки с нажатым Alt`ом = "?" (как штатно в ангийской раскладке)
клавиша русской точки с нажатым Ctrl+Shift`ом = "?" (как штатно в ангийской раскладке) ЗАКОММЕНТИРОВАНО
RWin = запятая
AppsKey = запятая
Ctrl+AppsKey = контекстное меню (штатное действие кнопки AppsKey)

Чтобы не терять функционал кнопки русской точки в ангийском языке символы "/" и "?" вводятся с нажатым Ctrl`ом или  Ctrl+Shift`ом соответственно, однако если в системе комбинация клавиш Ctrl+Shift отвечает за смену языка, то потенциально возможны проблемы, хотя у меня работает корректно (если будут проблемы можно использовать Alt+русская точка для высыла вопросительного знака в скрипте закомментировано). Штатное действие NumLock выполняется от комбинаций Alt+NumLock или Shift+NumLock или Control+Shift+NumLock само, без указания комбинации в скрипте. До кучи оставил запятую на правом Win, однако ввиду отсутствия этой клавиши на многих ноутах удобнее использовать AppsKey - клавишу контекстного меню, что рядом с правым контролом (вызыв штатного действия кнопки контекстного меню при помощи Ctrl+AppsKey). Ввел максимум - лишнее прибиваем по усмотрению!
*/

SendMode, InputThenPlay
$vk6E:: ; клавиша точки/Del на NumPad = точка
    EngAction = {vkBE} ; при ENG расскладке
  RusAction = {vkBF} ; при RUS расскладке
    GoTo, LookLanguage

$vkBF:: ; клавиша русской точки = точка
    EngAction = {vkBE}
  RusAction = {vkBF}
    GoTo, LookLanguage

$vk5C:: ; RWin - правая кнопка Windows = Запытая
$vk90:: ; NumLock = Запытая
$vk5D:: ; AppsKey - клавиша контекстного меню = запятая
$+vkBF:: ; Shift+клавиша русской точки (русская запятая) = запятая
  EngAction = {vkBC}
  RusAction = {vk6E}
    GoTo, LookLanguage

$^vk5D:: Send {vk5D} ; Ctrl+AppsKey = контекстное меню
$^vkBF:: Send {vk6F} ; Ctrl+русская точка = /
;$!vkBF:: Send {ASC 63} ; Alt+русская точка = ? (вопросительный знак)
$^+vkBF:: Send, {ASC 63} ; Ctrl+Shift+русская точка = ? (вопросительный знак)

LookLanguage:
    Locale1=0x4090409  ; ENG
    Locale2=0x4190419  ; RUS
    WinGet, WinID,, A
    ThreadID:=DllCall("GetWindowThreadProcessId", "Int", WinID, "Int", "0")
    InputLocaleID:=DllCall("GetKeyboardLayout", "Int", ThreadID)
  if(InputLocaleID=Locale1) ;если ENG
        Send %EngAction%
    else if(InputLocaleID=Locale2) ;если RUS
        Send %RusAction%
Return

По поводу высыла значений кодов ASCII: берем значения символов из таблицы символов в WinXP она в Пуск->Программы->Стандартные->Служебные->Таблица символов, затем переводим hex=0x31->dec=49 сделать это можно даже стандартным калькулятором в инженерном виде. Если используете программу PSPad то выбрать в меню "Инструменты" -> "Таблица ASCII" (или Alt+A) - и сразу использовать содержимое столбца "DEC" (там же кстати есть еще и "hex" и "html").
Ту же точку клавишей NumDel можно выслать и вот так:

$vk6E:: Send, {ASC 46} ; NumPad, клавиша точки/Del (NumPadDel=точка)

5

Re: AHK: Точка вместо запятой, запятая вместо точки

Ох неизящно наваял толком не оттестив... Косяки повалились в других местах. Исправляюсь.
Изменил код в предидущем сообщении, тем самым вроде избавил от глюков, добавил описание.

6

Re: AHK: Точка вместо запятой, запятая вместо точки

Спасибо за свой вариант решения проблемы!
У меня ранее было так

SC035:: Send, {ASC 46} ;кнопка русской точки=точка 
+SC035:: Send, {ASC 44} ;кнопка русской точки с Shift=запятая
^SC035:: Send, {ASC 63} ;кнопка русской точки с Ctrl=вопросительный знак
SC053:: Send, {ASC 44} ;клавиша NumDel высылает нажатие запятой
^sc053:: Send, {ASC 46} ;кнопка Num Del+Ctrl=точка

Однако осталась проблема, которая есть в обоих вариантах.
Если клавише отправлять {ASC 63}, то не всегда в том же окне AkelPad срабатывает знак вопроса. Насколько я понял это зависит от языка раскладки клавиатуры. При первом нажатии появляется знак вопроса, а последующие нажатия приводят к появлению квадратиков.
То же было в отношении точки. Однако в твоём коде используется не номер символа по кодовой странице, а другой приём. Благодаря этому, скрипт срабатывает так, как и планировалось, т.е. если планировалась точка, то точка и появляется.
Можно ли изменить код, чтобы знак вопроса появлялся также стабильно во всех текстовых приложениях независимо от раскладки клавиатуры?

7

Re: AHK: Точка вместо запятой, запятая вместо точки

Попробовал Ваш код — у меня {ASC 63} нормально отображается в AkelPad'e при любом языке. Альтернативный вариант — при русской раскладке посылать русское сочетание клавиш для вопроса, при английской — английское.

8

Re: AHK: Точка вместо запятой, запятая вместо точки

Тогда возможно у меня какой-нибудь конфликт в скрипте ahk. Надеюсь дело не в системе: WinXP SP3 rus.
Буду разбираться.

9

Re: AHK: Точка вместо запятой, запятая вместо точки

Karam пишет:

Тогда возможно у меня какой-нибудь конфликт в скрипте ahk. Надеюсь дело не в системе: WinXP SP3 rus.
Буду разбираться.

Это дело в программах. В Word, например, часто такое...
Вот здесь можете глянуть (решения там нет).

10

Re: AHK: Точка вместо запятой, запятая вместо точки

Steve Key, используйте тэг «url» для оформления ссылок на форуме. Я исправил.

11

Re: AHK: Точка вместо запятой, запятая вместо точки

Спасибо, учту!

А по сабжу ничего не подскажете?

12

Re: AHK: Точка вместо запятой, запятая вместо точки

Нет, не подскажу, не моя стезя.

13

Re: AHK: Точка вместо запятой, запятая вместо точки

В теме, которую я указывал выше - решение теперь есть!

14

Re: AHK: Точка вместо запятой, запятая вместо точки

Спасибо, попробую.

15

Re: AHK: Точка вместо запятой, запятая вместо точки

На всякий случай для тех, кто ищет, как сделать всегда точку на Numpad, незавсисимо от раскладки:

Numpaddot::
SendInput, .

16

Re: AHK: Точка вместо запятой, запятая вместо точки

tubudum
Ваш код приводит к тому, что нельзя, например, использовать вопросительный знак, который рядом с правым Shift находится.

17

Re: AHK: Точка вместо запятой, запятая вместо точки

tubudum, спустя 13 лет: "А, да, точно, щас исправлю".