1 (изменено: telealex, 2014-04-14 07:06:44)

Тема: AHK: Переназначение клавиш DOLLAR и EURO

Замена клавиш [Acer E1-772G] EURO=PgUp, DOLLAR=PgDn | Fn+EURO=Home, Fn+DOLLAR


Добрый день всем. Cпасибо что заглянули...

-Есть новый ноутбук Acer E1-772G Win8.1 x64, который специально покупался с учетом того, что на клавиатуре есть две кнопочки и $ возле курсорчиков (arrows) up/down/left/right и что потом (точней уже сейчас) их можно будет заменить на вышеозвученные комбинации (EURO=PgUp DOLLAR=PgDn Fn+EURO=Home Fn+DOLLAR=End).
но оказывается все тут не так уж и просто для простого смертного. Поковырялся я с простыми решениями типа "SharpKeys", "KeyExtender". Но они типа определяют, что при нажатии на эти кнопки (€ и $) нажимаются num8/num6 соответственно. но похоже это не так ))). Вобщем я тут поискал, подумал и понял, что тут какаято софтина мне помогает (сначала была предположительно Acer Launch Manager). типа по этому поводу написано на этой странице http://www.emtek.net.nz/blog/2008/06/29 … -euro-key/ , где говорится что надобно поискать файл "C:\Program Files\Launch Manager\MMKEYBD.CFG" и там закомментировать пару строчек и все будет пучком и больше небудет махинаций со стороны медведя...

Так вот собственно почему я здесь вопрошаю.

-У меня ситуация чуток другая:
1) Нет такого файла, тк нет такой папки на диске и вообще все по другому, потомучто походу уменя более новая версия этого "Launch Manager", но и не в этом дело.
2) Я недолго думая удалил это чудо, но всеравно не решилось дело, тк последовательность Alt+xxxx (чуток ниже есть немного об этом) все еще выполняется.
3) Я даже позакрывал кучу процессов и поостанавливал все сервисы и сирамно не помогло. Думаю эта зараза гдето в драйверах сидит.

-также вспомнилось мне что есть такое дело как Alt+0128 (непомню как оно называется), но таким образом можно вбивать символы зная их unicode коды. Здесь по видимуму и зарыта собака... Т.е. нажимая на кнопку со скан-кодом E033 и E034, какойто шпион запускает вышеозвученную последовательность (для $ я не помню вательности и неохота даже ее искать, главное, что она явно заканчивается на 6).
Кстати, я именно убедился, что нажимается последовательность Alt +xxxx, потомучто провел эксперимент в простом блокноте и там даже видно что когда нажимаю эти кнопки, то на мгновение подчеркиваются буквы вызова в главном меню (это когда мыши нет и надо там в менюшках побыстрей шариться, то можно использовать Alt+подчеркнутая_буква. Надеюсь, то что я только что написал итак все тут знают ) и это подчеркивание подтверждает тот факт, что зажимается Alt.

++++++++++++++++++++++++++++++++
Ну вот теперь моя задача для "AutoHotkey".
Думаю надо просто наблюдать, когда пролетают скан-коды клавиш (E033 и E034) и после них эта последовательность Alt+xxxx, после чего просто удалять незамедлительно выпавший символ (или вообще блокировать его выплевывание, ато поди чего может неладное где-то происходить в каких-то программах. Например, у меня Мозилла начинает искать в странице текст, когда я просто начинаю набирать необходимую фразу) и делать вышеуказаннае подстановки...

ЗЫ. Спасибо за внимание и понимание.
Очень жду, что кто-то поможет с задачкой.


++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
ДОБАВЛЕННО 20140410 20:14

ypppu пишет:

Если Вы верно указали скан-коды, такой скрипт должен заработать:

scE033:: Msgbox, Нажата кнопка €
scE034:: Msgbox, Нажата конопка $

Кстати, эти кнопки работают сами по себе или только при удержании Fn?

-Кнопки работают, как, сами по себе, так и при удержании. Т.е. символы вылетают после нажатия )))

-попробовал скрипт и как и ожидал, он не сработал.
наверное получается так, что может раньше в других версиях UEFI/BIOS (на других более старых компьютерах) виндовс получал скан-коды, то уменя винда даже не догадывается, что была нажата клавиши со скан-кодами E033/E034.
поэтому задача ныньче заключается не в:

telealex пишет:

Ну вот теперь моя задача для "AutoHotkey".
Думаю надо просто наблюдать, когда пролетают скан-коды клавиш (E033 и E034) и после них эта последовательность Alt+xxxx, после чего просто удалять незамедлительно выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки...

Теперь задача немного изменилася:
Надо наблюдать, когда пролетают только скан-коды зажатой клавиши Alt -> 0 1 2 8 (€)/Alt -> 0 0 3 6 ($) (те накопить в стек 4 прошлые кнопки и если были именнно они, то после чего просто незамедлительно улалять выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки EURO=PgUp, DOLLAR=PgDn | Fn+EURO=Home, Fn+DOLLAR...

++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
ДОБАВЛЕННО 20140414 01:07
Замена клавиш [Acer E1-772G] EURO=PgUp, DOLLAR=PgDn | Fn+EURO=Home, Fn+DOLLAR


Добрый день всем. Cпасибо что заглянули...

-Есть новый ноутбук Acer E1-772G Win8.1 x64, который специально покупался с учетом того, что на клавиатуре есть две кнопочки и $ возле курсорчиков (arrows) up/down/left/right и что потом (точней уже сейчас) их можно будет заменить на вышеозвученные комбинации (EURO=PgUp DOLLAR=PgDn Fn+EURO=Home Fn+DOLLAR=End).
но оказывается все тут не так уж и просто для простого смертного. Поковырялся я с простыми решениями типа "SharpKeys", "KeyExtender". Но они типа определяют, что при нажатии на эти кнопки (€ и $) нажимаются num8/num6 соответственно. но похоже это не так ))). Вобщем я тут поискал, подумал и понял, что тут какаято софтина мне помогает (сначала была предположительно Acer Launch Manager). типа по этому поводу написано на этой странице http://www.emtek.net.nz/blog/2008/06/29 … -euro-key/ , где говорится что надобно поискать файл "C:\Program Files\Launch Manager\MMKEYBD.CFG" и там закомментировать пару строчек и все будет пучком и больше небудет махинаций со стороны медведя...

Так вот собственно почему я здесь вопрошаю.

-У меня ситуация чуток другая:
1) Нет такого файла, тк нет такой папки на диске и вообще все по другому, потомучто походу уменя более новая версия этого "Launch Manager", но и не в этом дело.
2) Я недолго думая удалил это чудо, но всеравно не решилось дело, тк последовательность Alt+xxxx (чуток ниже есть немного об этом) все еще выполняется.
3) Я даже позакрывал кучу процессов и поостанавливал все сервисы и сирамно не помогло. Думаю эта зараза гдето в драйверах сидит.

-также вспомнилось мне что есть такое дело как Alt+0128 (непомню как оно называется), но таким образом можно вбивать символы зная их unicode коды. Здесь по видимуму и зарыта собака... Т.е. нажимая на кнопку со скан-кодом E033 и E034, какойто шпион запускает вышеозвученную последовательность (для $ я не помню вательности и неохота даже ее искать, главное, что она явно заканчивается на 6).
Кстати, я именно убедился, что нажимается последовательность Alt +xxxx, потомучто провел эксперимент в простом блокноте и там даже видно что когда нажимаю эти кнопки, то на мгновение подчеркиваются буквы вызова в главном меню (это когда мыши нет и надо там в менюшках побыстрей шариться, то можно использовать Alt+подчеркнутая_буква. Надеюсь, то что я только что написал итак все тут знают ) и это подчеркивание подтверждает тот факт, что зажимается Alt.

++++++++++++++++++++++++++++++++
Ну вот теперь моя задача для "AutoHotkey".
Думаю надо просто наблюдать, когда пролетают скан-коды клавиш (E033 и E034) и после них эта последовательность Alt+xxxx, после чего просто удалять незамедлительно выпавший символ (или вообще блокировать его выплевывание, ато поди чего может неладное где-то происходить в каких-то программах. Например, у меня Мозилла начинает искать в странице текст, когда я просто начинаю набирать необходимую фразу) и делать вышеуказаннае подстановки...

ЗЫ. Спасибо за внимание и понимание.
Очень жду, что кто-то поможет с задачкой.


++++++++++++++++++++++
++++++++++++++++++++++
++++++++++++++++++++++
ДОБАВЛЕННО 20140410 20:14

+ открыть спойлер
ypppu пишет:

Если Вы верно указали скан-коды, такой скрипт должен заработать:

scE033:: Msgbox, Нажата кнопка €
scE034:: Msgbox, Нажата конопка $

Кстати, эти кнопки работают сами по себе или только при удержании Fn?

-Кнопки работают, как, сами по себе, так и при удержании. Т.е. символы вылетают после нажатия )))

-попробовал скрипт и как и ожидал, он не сработал.
наверное получается так, что может раньше в других версиях UEFI/BIOS (на других более старых компьютерах) виндовс получал скан-коды, то уменя винда даже не догадывается, что была нажата клавиши со скан-кодами E033/E034.
поэтому задача ныньче заключается не в:

telealex пишет:

Ну вот теперь моя задача для "AutoHotkey".
Думаю надо просто наблюдать, когда пролетают скан-коды клавиш (E033 и E034) и после них эта последовательность Alt+xxxx, после чего просто удалять незамедлительно выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки...

Теперь задача немного изменилася:
Надо наблюдать, когда пролетают только скан-коды зажатой клавиши Alt -> 0 1 2 8 (€)/Alt -> 0 0 3 6 ($) (те накопить в стек 4 прошлые кнопки и если были именнно они, то после чего просто незамедлительно улалять выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки EURO=PgUp, DOLLAR=PgDn | Fn+EURO=Home, Fn+DOLLAR...

++++++++++++++++++++++
++++++++++++++++++++++
++++++++++++++++++++++
ДОБАВЛЕННО 20140412 01:38

+ открыть спойлер
serzh82saratov пишет:

http://forum.script-coding.com/viewtopi … 650#p81650
У меня корректно работает только так:


Global Combo := {0128:"euro",0036:"dollar"}
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() {
    ToolTip % A_ThisFunc
}

dollar() {
    ToolTip % A_ThisFunc
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

также можно сделать, чтобы символы которых нет в Combo, всё же посылались при отпускании LAlt.

В силу того, что нельзя отловить зажатие Fn+... и пока еще не совсем поздно можно ли доделать задачу по другому, чтоб не терять всетаки такие удобные функции, как PgUp, PgDn, Home, End. Можно поменять логику так:

1) Нажимаем кнопки € или $ и если в течении например половины секунды не происходит повторного нажатия, то делаем Home или End (соответственно).
2) А если происходит ОДНО ДОПОЛНИТЕЛЬНОЕ (или больше) повторное нажатие, то тогда рассцениваем это как нужду перелистнуть страницу(ы) вверх/вниз и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn.
3) И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток (1-3 пункты)


++++++++++++++++++++++
++++++++++++++++++++++
++++++++++++++++++++++
ДОБАВЛЕННО 20140414 05:00

serzh82saratov пишет:

Теперь не вылетают € $ но возле курсора появляются тултипы "euro" "dollar" и остаются там на вечно
Как туда поставить PgUp, PgDn?

Предлагаю решить самостоятельно.
Можно поменять логику так:

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

Global Combo := {0128:"euro",0036:"dollar"}, timeeuro := A_TickCount, timedollar := A_TickCount
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
^1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
^2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() { 
    if (A_TickCount-timeeuro > 500) 
        SetTimer, sendeuro, -500 
    else 
    {
        SetTimer, sendeuro, off
        ToolTip PgUp
    }
    timeeuro := A_TickCount
    Return
    
    sendeuro:
        ToolTip Home
        Return 
}

dollar() {
    if (A_TickCount-timedollar > 500) 
        SetTimer, senddollar, -500 
    else 
    {
        SetTimer, senddollar, off
        ToolTip PgDn
    }
    timedollar := A_TickCount
    Return
    
    senddollar:
        ToolTip End
        Return 
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

Строчки ToolTip PgUp/ToolTip PgDn/... заменил на SendInput {PgUp}/...

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

Global Combo := {0128:"euro",0036:"dollar"}, timeeuro := A_TickCount, timedollar := A_TickCount
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
^1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
^2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() { 
    if (A_TickCount-timeeuro > 500) 
        SetTimer, sendeuro, -500 
    else 
    {
        SetTimer, sendeuro, off
        SendInput {PgUp} ; Заменил тут
    }
    timeeuro := A_TickCount
    Return
    
    sendeuro:
        SendInput {Home} ; Заменил тут
        Return 
}

dollar() {
    if (A_TickCount-timedollar > 500) 
        SetTimer, senddollar, -500 
    else 
    {
        SetTimer, senddollar, off
        SendInput {PgDn} ; Заменил тут
    }
    timedollar := A_TickCount
    Return
    
    senddollar:
        SendInput {End} ; Заменил тут
        Return 
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

Спасибо за помощь, работает практически, так, как мечтал .

1) Нажимаем кнопки € или $ и если в течении например половины секунды не происходит повторного нажатия, то делаем Home или End (соответственно).
2) А если происходит ОДНО ДОПОЛНИТЕЛЬНОЕ (или больше) повторное нажатие, то тогда рассцениваем это как нужду перелистнуть страницу(ы) вверх/вниз и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn.
3) И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток (1-3 пункты)

За исключанием:
-второй части 2 пункта: "...и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn."
-и почти всего 3 пункта: "И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток"

Здесь во втором пункте имеется ввиду, что блокируется логика для удобства листания PgUp, PgDn при беглом поиске в обратном направлении (PgUp) нужного текста в странице (например: когда читаеш текст/таблицу_со_значениями и уже прошел несколько страниц вниз и непомниш точно сколько страниц назад был тот текст который хочется переглядеть). И начинаешь быстренько мотать назад в поиске нужной информации и найдя предыдущую страницу понимаешь что проскочил на страницу выше и сразуже хочется разок перелистнуть вниз по тексту (вот какраз именно для этой фишки, жизненно необходимо иметь возможность спокойно листнуть один раз вниз и непопасть на ситуацию, что страница перемотается ВСЯ ВНИЗ изза единственного тыка вниз). Именно изза этого нужно заблокировать логику сразу двух функций PgUp, PgDn и в течении пары секунд дать возможность принять решение об том: Достигнута ли необходимая позиция в тексте.

Я нарвался на эту проблему сразуже в первую минуту перечитывая эту тему (желая почитать и полистать от сообщения к сообщению - вверх/вниз). И нажимая один раз PgUp или PgDn страница уходила полностью вверх/вниз  и позиция терялась полностью , сводив на нет всю прелесть комбинирования двойной функции PgUp ИЛИ Home на одной кнопке путем установки таймера.

Вобщем, вижу, что надо добавить еще один общий таймер/флаг для выполнения условия 2 и 3 пунктов.
Устанавливать его например на 3 секунды в каждой/любой из функций (где вычитаются таймеры: SetTimer, sendeuro/senddollar, -500) и заключить каждый else в if c этим общим таймером.
По истечении 3 секунд сбросить общий таймер, чтоб в следующий раз в пункте 1) если не нажимается повторно кнопка чтоб всетаки смог сработать else в if и активировалась функция Home или End. но немогу логически додумать какое условие надо поставить.
И еще, конечно, не знаю, как синтаксически это сделать.

2

Re: AHK: Переназначение клавиш DOLLAR и EURO

telealex пишет:

случайно выпало из головы что обязательно надо начинать тему с "AHK: ". прошу извинения и каюсь чисто сердечно...

А как насчёт заглавных букв и знаков препинания?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Переназначение клавиш DOLLAR и EURO

teadrinker пишет:
telealex пишет:

случайно выпало из головы что обязательно надо начинать тему с "AHK: ". прошу извинения и каюсь чисто сердечно...

А как насчёт заглавных букв и знаков препинания?

Ревизия проведена и исправлено в силу знания великого и могучего

4

Re: AHK: Переназначение клавиш DOLLAR и EURO

telealex пишет:

Ревизия проведена и исправлено в силу знания великого и могучего

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Переназначение клавиш DOLLAR и EURO

Видимо я так сильно провинился, за то, что не расставил ТОЛЬКО буквы большие  в некоторых местах в начале предложений, что теперь меня в игноре практически держат. точки стояли на месте! спасибо за внимание. удачи тут

6

Re: AHK: Переназначение клавиш DOLLAR и EURO

Похоже, что последовательность идет из под UEFI (BIOS), тк загрузился с Hiren's MiniXP и тут также действуют кнопки

7 (изменено: bWRmeA, 2014-04-10 16:59:10)

Re: AHK: Переназначение клавиш DOLLAR и EURO

В первом сообщении отличная жизненная история, но что же хотел сказать автор?
В чём вопрос? Как переназначить клавиши? Узнать их уникальные идентификаторы и создать в скрипте соответствующую метку хоткея.

8

Re: AHK: Переназначение клавиш DOLLAR и EURO

Если Вы верно указали скан-коды, такой скрипт должен заработать:

scE033:: Msgbox, Нажата кнопка €
scE034:: Msgbox, Нажата конопка $

Кстати, эти кнопки работают сами по себе или только при удержании Fn?

9

Re: AHK: Переназначение клавиш DOLLAR и EURO

ypppu пишет:

Если Вы верно указали скан-коды, такой скрипт должен заработать:

scE033:: Msgbox, Нажата кнопка €
scE034:: Msgbox, Нажата конопка $

Кстати, эти кнопки работают сами по себе или только при удержании Fn?

-Кнопки работают, как, сами по себе, так и при удержании. Т.е. символы вылетают после нажатия )))

-попробовал скрипт и как и ожидал, он не сработал.
наверное получается так, что может раньше в других версиях UEFI/BIOS (на других более старых компьютерах) виндовс получал скан-коды, то уменя винда даже не догадывается, что была нажата клавиши со скан-кодами E033/E034.
поэтому задача ныньче заключается не в:

telealex пишет:

Ну вот теперь моя задача для "AutoHotkey".
Думаю надо просто наблюдать, когда пролетают скан-коды клавиш (E033 и E034) и после них эта последовательность Alt+xxxx, после чего просто удалять незамедлительно выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки...

Теперь задача немного изменилася:
Надо наблюдать, когда пролетают только скан-коды зажатой клавиши Alt -> 0 1 2 8 (€)/Alt -> 0 0 3 6 ($) (те накопить в стек 4 прошлые кнопки и если были именнно они, то после чего просто незамедлительно улалять выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки EURO=PgUp, DOLLAR=PgDn | Fn+EURO=Home, Fn+DOLLAR...

10

Re: AHK: Переназначение клавиш DOLLAR и EURO

Запустите скрипт из этого сообщения и нажмите клавишу PrintScreen. В появившемся окошке отображаются нажатые клавиши. Нажмите клавишу DOLLAR, затем EURO. Если они отобразились в таблице, тогда AutoHotkey сможет работать с ними нормально, без костылей.

11 (изменено: telealex, 2014-04-11 00:04:04)

Re: AHK: Переназначение клавиш DOLLAR и EURO

ypppu пишет:

Запустите скрипт из этого сообщения и нажмите клавишу PrintScreen. В появившемся окошке отображаются нажатые клавиши. Нажмите клавишу DOLLAR, затем EURO. Если они отобразились в таблице, тогда AutoHotkey сможет работать с ними нормально, без костылей.

Отображается окно и пробегают коды последовательностей:

LAlt
Numpad0
Numpad0
Numpad1
Numpad1
Numpad2
Numpad2
Numpad8
Numpad8
LAlt

12 (изменено: serzh82saratov, 2014-04-11 01:42:26)

Re: AHK: Переназначение клавиш DOLLAR и EURO

SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

Это интересно, действительно пишет EURO. Я и не знал

Вообщем с евро можно что то придумать, а вот Fn+EURO не ясно, ведь нажатие Fn неопределить. Или при этом просто запускается другая комбинация нажатий?

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

13

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:
SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

Это интересно, действительно пишет EURO. Я и не знал

Вообщем с евро можно что то придумать, а вот Fn+EURO не ясно, ведь нажатие Fn неопределить. Или при этом просто запускается другая комбинация нажатий?

А вот Fn+EURO действительно не определяет зажатие кнопки Fn. но ничего, хотябы это работало бы нормально EURO=PgUp, DOLLAR=PgDn

14

Re: AHK: Переназначение клавиш DOLLAR и EURO

telealex пишет:


Теперь задача немного изменилася:
Надо наблюдать, когда пролетают только скан-коды зажатой клавиши Alt -> 0 1 2 8 (€)/Alt -> 0 0 3 6 ($) (те накопить в стек 4 прошлые кнопки и если были именнно они, то после чего просто незамедлительно улалять выпавший символ (или вообще блокировать его выплевывание...) и делать подстановки EURO=PgUp, DOLLAR=PgDn | Fn+EURO=Home, Fn+DOLLAR...

В данном случае можно упростить задачу, у вас ведь всего 2 escape-последовательности, которые можно однозначно определить по крайнему символу, а остальные отбросить. "Семафором" послужит посыл клавиш alt+numpad6 и alt+numpad8, при условии, что физически Alt  будет не зажат.

#if !GetKeyState("LAlt","P")
!NumPad0::
!NumPad1::
!NumPad2::
!NumPad3::
Return
!NumPad6:: SendInput {PgDn}
!NumPad8:: SendInput {PgUp}
#if

15

Re: AHK: Переназначение клавиш DOLLAR и EURO

Запускаю:


SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}  

при:


#if !GetKeyState("LAlt","P")
!NumPad0::
!NumPad1::
!NumPad2::
!NumPad3::
Return
!NumPad6:: MsgBox {PgDn}
!NumPad8:: MsgBox {PgUp}
#if

не работает.
Чуствую продолжение темы.

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

16

Re: AHK: Переназначение клавиш DOLLAR и EURO

Мне тут вспомнилось, что кто то из гуру писал, что можно перехватывать и по надобности блокировать нужные оконные сообщения. Так понимаю что винда в итоге посылает в WM_CHAR код DOLLAR или EURO...

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

17

Re: AHK: Переназначение клавиш DOLLAR и EURO

У меня корректно работает только так:


Global Combo := {0128:"euro",0036:"dollar"}
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() {
    ToolTip % A_ThisFunc
}

dollar() {
    ToolTip % A_ThisFunc
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

также можно сделать, чтобы символы которых нет в Combo, всё же посылались при отпускании LAlt.

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

18 (изменено: telealex, 2014-04-12 03:04:07)

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

У меня корректно работает только так:


Global Combo := {0128:"euro",0036:"dollar"}
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() {
    ToolTip % A_ThisFunc
}

dollar() {
    ToolTip % A_ThisFunc
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

также можно сделать, чтобы символы которых нет в Combo, всё же посылались при отпускании LAlt.

Теперь не вылетают € $ но возле курсора появляются тултипы "euro" "dollar" и остаются там на вечно
Как туда поставить PgUp, PgDn?

И ( в силу того, что нельзя отловить зажатие Fn+... и пока еще не совсем поздно) можно ли доделать задачу по другому, чтоб не терять всетаки такие удобные функции, как PgUp, PgDn, Home, End. Можно поменять логику так:

1 Нажимаем кнопки € или $ и если в течении например половины секунды не происходит повторного нажатия, то делаем Home или End (соответственно).
2 А если происходит ОДНО ДОПОЛНИТЕЛЬНОЕ (или больше) повторное нажатие, то тогда рассцениваем это как нужду перелистнуть страницу(ы) вверх/вниз и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn.
3 И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток (1-3 пункты)

19

Re: AHK: Переназначение клавиш DOLLAR и EURO

Теперь не вылетают € $ но возле курсора появляются тултипы "euro" "dollar" и остаются там на вечно
Как туда поставить PgUp, PgDn?

Предлагаю решить самостоятельно.

Можно поменять логику так:


Global Combo := {0128:"euro",0036:"dollar"}, timeeuro := A_TickCount, timedollar := A_TickCount
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
^1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
^2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() { 
    if (A_TickCount-timeeuro > 500) 
        SetTimer, sendeuro, -500 
    else 
    {
        SetTimer, sendeuro, off
        ToolTip PgUp
    }
    timeeuro := A_TickCount
    Return
    
    sendeuro:
        ToolTip Home
        Return 
}

dollar() {
    if (A_TickCount-timedollar > 500) 
        SetTimer, senddollar, -500 
    else 
    {
        SetTimer, senddollar, off
        ToolTip PgDn
    }
    timedollar := A_TickCount
    Return
    
    senddollar:
        ToolTip End
        Return 
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Переназначение клавиш DOLLAR и EURO

1Не особо тебя понял, но написал вот по этому

1) Нажимаем кнопки € или $ и если в течении например половины секунды не происходит повторного нажатия, то делаем Home или End (соответственно).
2) А если происходит ОДНО ДОПОЛНИТЕЛЬНОЕ (или больше) повторное нажатие, то тогда рассцениваем это как нужду перелистнуть страницу(ы) вверх/вниз и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn.
3) И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток (1-3 пункты)

Сразу хочу сказать, что 3ий пункт невозможен, т.к. если нажать кнопку раз и ничего не делать, то будет end\home
Так как не смог потестить с €\$, то сделал на ALT + 1 и ALT + 2
Извеняюсь если туплю т.к. мог просто напросто неправильно понять условие задачи...

!1:: ; вместо "!1" Вашу кнопку
sleep 200
loop 5
     {
     GetkeyState, code, 1 ; тут вместо "1" Вашу клавишу
     if code = D
          {
          goto, PgUp
          }
     sleep 100
     }
send {Home}
return

PgUp:
send {PgUp}
exit 

!2:: ; вместо "!2" Вашу клавишу
sleep 200
loop 5
     {
     GetkeyState, code, 2 ; Вместо "2" Вашу клавишу
     if code = D
          {
          goto, PgDn
          }
     sleep 100
     }
send {end}
return

PgDn:
send {PgDn}
exit

21

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Теперь не вылетают € $ но возле курсора появляются тултипы "euro" "dollar" и остаются там на вечно
Как туда поставить PgUp, PgDn?

Предлагаю решить самостоятельно.
Можно поменять логику так:

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

Global Combo := {0128:"euro",0036:"dollar"}, timeeuro := A_TickCount, timedollar := A_TickCount
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
^1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
^2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() { 
    if (A_TickCount-timeeuro > 500) 
        SetTimer, sendeuro, -500 
    else 
    {
        SetTimer, sendeuro, off
        ToolTip PgUp
    }
    timeeuro := A_TickCount
    Return
    
    sendeuro:
        ToolTip Home
        Return 
}

dollar() {
    if (A_TickCount-timedollar > 500) 
        SetTimer, senddollar, -500 
    else 
    {
        SetTimer, senddollar, off
        ToolTip PgDn
    }
    timedollar := A_TickCount
    Return
    
    senddollar:
        ToolTip End
        Return 
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

Строчки ToolTip PgUp/ToolTip PgDn/... заменил на SendInput {PgUp}/...

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

Global Combo := {0128:"euro",0036:"dollar"}, timeeuro := A_TickCount, timedollar := A_TickCount
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
^1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
^2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}

euro() { 
    if (A_TickCount-timeeuro > 500) 
        SetTimer, sendeuro, -500 
    else 
    {
        SetTimer, sendeuro, off
        SendInput {PgUp} ; Заменил тут
    }
    timeeuro := A_TickCount
    Return
    
    sendeuro:
        SendInput {Home} ; Заменил тут
        Return 
}

dollar() {
    if (A_TickCount-timedollar > 500) 
        SetTimer, senddollar, -500 
    else 
    {
        SetTimer, senddollar, off
        SendInput {PgDn} ; Заменил тут
    }
    timedollar := A_TickCount
    Return
    
    senddollar:
        SendInput {End} ; Заменил тут
        Return 
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && NumKeys != "")
        {
            AltDown := 0 
            If Func := Combo[NumKeys]
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

Спасибо за помощь, работает практически, так, как мечтал .

1) Нажимаем кнопки € или $ и если в течении например половины секунды не происходит повторного нажатия, то делаем Home или End (соответственно).
2) А если происходит ОДНО ДОПОЛНИТЕЛЬНОЕ (или больше) повторное нажатие, то тогда рассцениваем это как нужду перелистнуть страницу(ы) вверх/вниз и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn.
3) И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток (1-3 пункты)

За исключанием:
-второй части 2 пункта: "...и задерживаем на этом логику (на несколько секунд) в контексте PgUp, PgDn."
-и почти всего 3 пункта: "И когда в течении нескольких секунд кнопки не тычутся, то и отпускаем скрипт на новый виток"

Здесь во втором пункте имеется ввиду, что блокируется логика для удобства листания PgUp, PgDn при беглом поиске в обратном направлении (PgUp) нужного текста в странице (например: когда читаеш текст/таблицу_со_значениями и уже прошел несколько страниц вниз и непомниш точно сколько страниц назад был тот текст который хочется переглядеть). И начинаешь быстренько мотать назад в поиске нужной информации и найдя предыдущую страницу понимаешь что проскочил на страницу выше и сразуже хочется разок перелистнуть вниз по тексту (вот какраз именно для этой фишки, жизненно необходимо иметь возможность спокойно листнуть один раз вниз и непопасть на ситуацию, что страница перемотается ВСЯ ВНИЗ изза единственного тыка вниз). Именно изза этого нужно заблокировать логику сразу двух функций PgUp, PgDn и в течении пары секунд дать возможность принять решение об том: Достигнута ли необходимая позиция в тексте.

Я нарвался на эту проблему сразуже в первую минуту перечитывая эту тему (желая почитать и полистать от сообщения к сообщению - вверх/вниз). И нажимая один раз PgUp или PgDn страница уходила полностью вверх/вниз  и позиция терялась полностью , сводив на нет всю прелесть комбинирования двойной функции PgUp ИЛИ Home на одной кнопке путем установки таймера.

Вобщем, вижу, что надо добавить еще один общий таймер/флаг для выполнения условия 2 и 3 пунктов.
Устанавливать его например на 3 секунды в каждой/любой из функций (где вычитаются таймеры: SetTimer, sendeuro/senddollar, -500) и заключить каждый else в if c этим общим таймером.
По истечении 3 секунд сбросить общий таймер, чтоб в следующий раз в пункте 1) если не нажимается повторно кнопка чтоб всетаки смог сработать else в if и активировалась функция Home или End. но немогу логически додумать какое условие надо поставить.
И еще, конечно, не знаю, как синтаксически это сделать.

22 (изменено: serzh82saratov, 2014-04-14 10:04:43)

Re: AHK: Переназначение клавиш DOLLAR и EURO

Сбарасывается через 3 сек после последнего нажатия PgUp, PgDn.


Global Combo := {0128:"euro",0036:"dollar"}, timeeuro := A_TickCount - 500
    , timedollar := A_TickCount - 500, maintimer := A_TickCount - 3000
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
^1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
^2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}
 
euro() { 
    if (A_TickCount-timeeuro > 500 && A_TickCount-maintimer > 3000) 
    {
        SetTimer, sendeuro, -500 
        timeeuro := A_TickCount
    }
    else 
    {
        SetTimer, sendeuro, off
        maintimer := A_TickCount
        ToolTip {PgUp} ; Заменил тут 
    }
    Return
    
    sendeuro:
        ToolTip {Home} ; Заменил тут
        Return 
}

dollar() {
    if (A_TickCount-timedollar > 500 && A_TickCount-maintimer > 3000)  
    {
        SetTimer, senddollar, -500 
        timedollar := A_TickCount
    } 
    else 
    {
        SetTimer, senddollar, off
        maintimer := A_TickCount
        ToolTip {PgDn} ; Заменил тут
    } 
    Return
    
    senddollar:
        ToolTip {End} ; Заменил тут
        Return 
}

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && !(AltDown := 0) && NumKeys != "")
        { 
            If ((Func := Combo[NumKeys]) != "")
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23 (изменено: serzh82saratov, 2014-04-14 10:05:58)

Re: AHK: Переназначение клавиш DOLLAR и EURO

А не проще Home назначить например на Ctrl+EURO или Shift+EURO? Раз уж с Fn не получится.

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

24 (изменено: serzh82saratov, 2014-04-14 10:14:14)

Re: AHK: Переназначение клавиш DOLLAR и EURO

Вот пример с Shift, просто и никаких задержек.


Global Combo := {0128:"euro",0036:"dollar"} 
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return
 
 *1::SendInput {LAlt Down}{Numpad0}{Numpad0}{Numpad3}{Numpad6}{LAlt Up}
 *2::SendInput {LAlt Down}{Numpad0}{Numpad1}{Numpad2}{Numpad8}{LAlt Up}
 
euro() { 
    ToolTip % GetKeyState("Shift","P") ? "{Home}" : "{PgUp}"
}

dollar() { 
    ToolTip % GetKeyState("Shift","P") ? "{End}" : "{PgDn}"
}
 
Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && !(AltDown := 0) && NumKeys != "")
        { 
            If ((Func := Combo[NumKeys]) != "")
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

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

25

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

А не проще Home назначить например на Ctrl+EURO или Shift+EURO? Раз уж с Fn не получится.

Идея шикарная! Я тоже подумывал так, но уже нехотел еще больше морочить голову, раз уж с таймерами завелись.
Но наверное Ctrl+€=Nome / Ctrl+$=End будет попроще в реализации и надежней, а то с таймерами еще будет чето глючить...
Тем более что Ctrl всегда рядом с этими кнопками на любых компьютерах и люди нуждающие потом смогут сразу пользоваться.

26 (изменено: serzh82saratov, 2014-04-14 16:51:57)

Re: AHK: Переназначение клавиш DOLLAR и EURO

Ну значит так:


#Persistent
Global Combo := {0128:"euro",0036:"dollar"} 
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return 
 
euro() { 
    SendInput % GetKeyState("Ctrl","P") ? "{Home}" : "{PgUp}"
}

dollar() { 
    SendInput % GetKeyState("Ctrl","P") ? "{End}" : "{PgDn}"
}
 
Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && !(AltDown := 0) && NumKeys != "")
        { 
            If ((Func := Combo[NumKeys]) != "")
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27 (изменено: serzh82saratov, 2014-04-14 16:24:10)

Re: AHK: Переназначение клавиш DOLLAR и EURO


Combo := {0128:"Euro",0036:"Dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "")
~*LAlt up:: ToolTip % Combo[Numpad] "`n`n" (GetKeyState("Ctrl","P") ? "Yes Ctrl" : "No Ctrl") "`n`n" Numpad (Numpad := "")  
#If

А у Вас этот код показывает сообщения при нажатиях Euro, Dollar также и с Ctrl+.?
Это как бэ проще, но нельзя проверить без аппаратной кнопки.

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

28

Re: AHK: Переназначение клавиш DOLLAR и EURO

+ открыть спойлер
serzh82saratov пишет:

Combo := {0128:"Euro",0036:"Dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "")
~*LAlt up:: ToolTip % Combo[Numpad] "`n`n" (GetKeyState("Ctrl","P") ? "Yes Ctrl" : "No Ctrl") "`n`n" Numpad (Numpad := "")  
#If

А у Вас этот код показывает сообщения при нажатиях Euro, Dollar также и с Ctrl+.?
Это как бэ проще, но нельзя проверить без аппаратной кнопки.

Да, показывает тултипы в 6 строк высотой. Вот пример для $:
Dollar

No Ctrl

0036

29

Re: AHK: Переназначение клавиш DOLLAR и EURO

Ну а с Ctrl+?

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

30 (изменено: telealex, 2014-04-14 16:49:21)

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Ну а с Ctrl+?

А с Ctrl ничего не происходит. Но зато когда его отпускаю, то потом при нажатии €/$ без Ctrl в тултипе накаприлваются внизу коды например 003600360036 или 003601280036 и так сколько раз ткнул на кнопку с удержанием Ctrl

31

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Ну значит так:


Global Combo := {0128:"euro",0036:"dollar"} 
 
SetFormat, IntegerFast, h 
OnExit, Exit
hHookKeybd  := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return 
 
euro() { 
    SendInput % GetKeyState("Ctrl","P") ? "{Home}" : "{PgUp}"
}

dollar() { 
    SendInput % GetKeyState("Ctrl","P") ? "{End}" : "{PgDn}"
}
 
Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp
 
LowLevelKeyboardProc(nCode, wParam, lParam) {
    Critical
    Static AltDown, NumKeys
 
    vkCode := SubStr(NumGet(lParam+0, 0, "UInt"), 3)
 
    If (wParam = 0x100 || wParam = 0x104)
    {
        If vkCode = A4
            AltDown := 1
        Else If (AltDown && vkCode > 59 && vkCode < 70)
        {
            NumKeys .= SubStr(vkCode, 0)
            Return 1
        }
        NumKeys := ""
    } 
    Else
    {
        If (vkCode = "A4" && !(AltDown := 0) && NumKeys != "")
        { 
            If ((Func := Combo[NumKeys]) != "")
                %Func%()
            NumKeys := ""  
        }
    }
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

При запуске этого кода, иконка АНК пропадает из трея. Также она себя ведет если опустошить фаил скрипта.

32

Re: AHK: Переназначение клавиш DOLLAR и EURO

Добавьте первой строкой:

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

33 (изменено: serzh82saratov, 2014-04-14 16:52:42)

Re: AHK: Переназначение клавиш DOLLAR и EURO

А так:


Combo := {0128:"euro",0036:"dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "")
 ~LAlt up:: ToolTip % Combo[Numpad] "`n`n" Numpad (Numpad := "") "`n`n No Ctrl"
 ~^LAlt up:: ToolTip % Combo[Numpad] "`n`n" Numpad (Numpad := "") "`n`n Yes Ctrl"
#If
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34 (изменено: telealex, 2014-04-14 16:57:51)

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Добавьте первой строкой:

#Persistent

Ой!!!!!!!!!! Все работает отлично

Спасибище огромное!!!!!


ps. прямо немогу нарадоваться

35

Re: AHK: Переназначение клавиш DOLLAR и EURO

Так код из 33 поста как работает? Что пишет?

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

36 (изменено: telealex, 2014-04-14 17:05:36)

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

А так:


Combo := {0128:"euro",0036:"dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "")
 ~LAlt up:: ToolTip % Combo[Numpad] "`n`n" Numpad (Numpad := "") "`n`n No Ctrl"
 ~^LAlt up:: ToolTip % Combo[Numpad] "`n`n" Numpad (Numpad := "") "`n`n Yes Ctrl"
#If

Ой. Я среди всех сообщений не заметил этого. Извиняюсь...
а так работает и с и без Ctrl и внизу просто пишет Yes/No Ctrl

зы. Сейчас буду ехать на работу. Смогу ответить только около 24 по Масковскому времени. Спасибо

37 (изменено: serzh82saratov, 2014-04-14 17:10:37)

Re: AHK: Переназначение клавиш DOLLAR и EURO

А так нажимает что нужно?


*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad == "0036" || Numpad == "0128") || (Numpad := "")
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

38 (изменено: telealex, 2014-04-14 17:12:36)

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

А так нажимает что нужно?


Combo := {0128:"euro",0036:"dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad == "0036" || Numpad == "0128")
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 

Да, все отлично работает )))))))

Я в шоке, от того как выглядит код простенько . Вот это фирма веников не вяжет...
Спасибо

39

Re: AHK: Переназначение клавиш DOLLAR и EURO

+ Я его подредактировал

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad == "0036" || Numpad == "0128") || (Numpad := "")
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If

Пробуйте что лучше, и отписывайтесь.

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

40

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:
+ Я его подредактировал

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad == "0036" || Numpad == "0128") || (Numpad := "")
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If

Пробуйте что лучше, и отписывайтесь.


Это тоже работает. Пока полет нормальный, разницы не заметно

41 (изменено: serzh82saratov, 2014-04-14 18:05:55)

Re: AHK: Переназначение клавиш DOLLAR и EURO

Я его подредактировал

Пробуйте что лучше, и отписывайтесь.

Я исправил это условие:

#If (Numpad == "0036" || Numpad == "0128") || (Numpad := "")

сравнивайте в смысле не с подобным, а сдругим вариантом.

----------------------

Да и ещё, если всё же требуется печатать остальные символы,

+  то должно работать так:

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "") && ((Numpad == "0036" || Numpad == "0128") || SendChr(Numpad) || (Numpad := ""))
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 
 
SendChr(Str) {
    Loop, parse, Str 
        Num .= "{Numpad" A_LoopField "}"  
    SendInput {LAlt Down}%Num%{LAlt Up} 
}

Но это скорее ради интереса, навряд ли это кто использует. Я о таком способе ввода услышал впервые только из этой темы.

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

42 (изменено: telealex, 2014-04-14 22:34:55)

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Я его подредактировал

Пробуйте что лучше, и отписывайтесь.

Я исправил это условие:

#If (Numpad == "0036" || Numpad == "0128") || (Numpad := "")

сравнивайте в смысле не с подобным, а с другим вариантом.

----------------------

Да и ещё, если всё же требуется печатать остальные символы,

+  то должно работать так:

Combo := {0128:"euro",0036:"dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "") && ((Numpad == "0036" || Numpad == "0128") || SendChr(Numpad) || (Numpad := ""))
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 
 
SendChr(Str) {
    Loop, parse, Str 
        Num .= "{Numpad" A_LoopField "}"  
    SendInput {LAlt Down}%Num%{LAlt Up} 
}

Но это скорее ради интереса, навряд ли это кто использует. Я о таком способе ввода услышал впервые только из этой темы.

Немогу ввести символ \ путем (Alt+092). Эти последовательности все-таки иногда нужные. Можете подправить чтоб всетаки:

serzh82saratov пишет:

ещё, если всё же требуется печатать остальные символы

+ то должно работать так:...

Combo := {0128:"euro",0036:"dollar"} 

*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "") && ((Numpad == "0036" || Numpad == "0128") || SendChr(Numpad) || (Numpad := ""))
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 
 
SendChr(Str) {
    Loop, parse, Str 
        Num .= "{Numpad" A_LoopField "}"  
    SendInput {LAlt Down}%Num%{LAlt Up} 
}


-----------------------------------------------------
Я таким образом ввожу \ (Alt+092) на японской клавиатуре в моем старом ноутбуке при необходмости написания путей в винде (ато копировать его из этого же пути гдето раньше еще дольше чем таким образом ввести), тк жалко было покупать новую клавиатуру за 15€. Хотя наверое всеравно придется, тк нормальные люди не смогут такой клавиатурой пользоваться, да еще и без русских букв и еще и с английскими не в обычном месте находящимися символами.

43

Re: AHK: Переназначение клавиш DOLLAR и EURO

Можете подправить

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

^!+vk49:: SendRaw \  ; Ctrl+Alt+Shift+I

А зачем у Вас это в коде?

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

44

Re: AHK: Переназначение клавиш DOLLAR и EURO

Что то я перемудрил с функцией посыла символов:


*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "") && ((Numpad == "0036" || Numpad == "0128") || SendChr(Numpad) || (Numpad := ""))
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 
 
SendChr(Num) { 
    SendInput % "{Raw}" Chr(Num)
}

Может у Вас в таком виде заработает, хотя прошлый вариант тоже рабочий.
Ещё обнаружил такую фичу

SendInput {ASC %Num%} 

но иногда почему то печатает вместо символа сами цифры.

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

45

Re: AHK: Переназначение клавиш DOLLAR и EURO

Этот вариант заработал и символы вводятся через Alt+xxxx

+ открыть спойлер
serzh82saratov пишет:

Что то я перемудрил с функцией посыла символов:


*!Numpad0:: 
*!Numpad1::
*!Numpad2::
*!Numpad3::
*!Numpad4::
*!Numpad5::
*!Numpad6::
*!Numpad7::
*!Numpad8::
*!Numpad9:: Numpad .= SubStr(A_ThisHotkey, 0)

#If (Numpad != "") && ((Numpad == "0036" || Numpad == "0128") || SendChr(Numpad) || (Numpad := ""))
 ~LAlt up:: SendInput % (Numpad = "0036" ? "{PgDn}" : "{PgUp}") (Numpad := "")
 ~^LAlt up:: SendInput % (Numpad = "0036" ? "{End}" : "{Home}") (Numpad := "")
#If 
 
SendChr(Num) { 
    SendInput % "{Raw}" Chr(Num)
}

А какая разница должна быть между этими двумя вариантами?

SendChr(Num) {
    SendInput % "{Raw}" Chr(Num)
}

Может у Вас в таком виде заработает, хотя прошлый вариант тоже рабочий.
Ещё обнаружил такую фичу

SendInput {ASC %Num%} 

но иногда почему то печатает вместо символа сами цифры.

46

Re: AHK: Переназначение клавиш DOLLAR и EURO

А какая разница должна быть между этими двумя вариантами?

Не понял вопрос. Какими вариантами.

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

47

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

А какая разница должна быть между этими двумя вариантами?

Не понял вопрос. Какими вариантами.

Вы написали:

Ещё обнаружил такую фичу

Так вот думаю в чем по идее должна быть для меня разница? Надо протестировать некоторое время вариант с фичей и потом предыдущий без фичи?

48

Re: AHK: Переназначение клавиш DOLLAR и EURO

Конечно есть разница

SendInput {ASC %Num%} 

иногда глючит, потому используйте:

SendInput % "{Raw}" Chr(Num)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

49

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Конечно есть разница

SendInput {ASC %Num%} 

иногда глючит, потому используйте:

SendInput % "{Raw}" Chr(Num)

Теперь есть другая проблема с беспроводной клавиатурой английской, Тут на клавиатуре нет знака € и его надо вводить сочетанием Alt+0136.

Да и на русском быстрей ввести этот код через Alt  чем переключаться на испанский, потом зажимать правый Alt (или левый Ctrl+Alt) и потом тыкать кнопку E и потом обратно переключаться на русский  и типа как ни в чем не бывало вводить дальше русский текст.



Помогите пожалуйста чтоб получилось ввести ее

50

Re: AHK: Переназначение клавиш DOLLAR и EURO

Ничё не понял...

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

51

Re: AHK: Переназначение клавиш DOLLAR и EURO

serzh82saratov пишет:

Ничё не понял...

SendInput % "{Raw}€"

Не работают все/любые комбинации с удержанной клавишей Alt+

Например: $=Alt+0036 или €=Alt+0136 / Alt+0128 или /=Alt+092 или ©=Alt+0169 или ?=Alt+0163 или §=Alt+0167

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

Поэтому я прошу о помощи. Еще Вы писали:

serzh82saratov пишет:

Конечно есть разница
SendInput {ASC %Num%}
иногда глючит,

потому используйте:
SendInput % "{Raw}" Chr(Num)

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

52

Re: AHK: Переназначение клавиш DOLLAR и EURO

перед переустановкой Виндовс работали

В таком случае, теряюсь в догадках.

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

53

Re: AHK: Переназначение клавиш DOLLAR и EURO

Я заметил кое что только что. Оказывается не просто не работают сочетания Alt+ , а так получается, что после комбинаций Alt+0136... сама кнопка Alt остается нажатой!!! до момента пока я ее еще раз не нажму или Esc

54

Re: AHK: Переназначение клавиш DOLLAR и EURO

Возможно замена функции поможет:


SendChr(Num) { 
    SendInput % "{Alt Up}{Raw}" Chr(Num)
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

55 (изменено: telealex, 2014-05-31 00:30:02)

Re: AHK: Переназначение клавиш DOLLAR и EURO

Раньше с этой строчкой

SendInput {ASC %Num%}

после физического отжатия Alt через половину секунды вылетали символы 136 и после чего как я и описывал программный Alt оставался нажатым пока не ткну его еще раз или Esc



А с этим последним вариантом:

serzh82saratov пишет:

Возможно замена функции поможет:


SendChr(Num) { 
    SendInput % "{Alt Up}{Raw}" Chr(Num)
}

ситуация получается такая: могу вводить символы \ или © и другие, НО при этом вообще не отрабатывают только Alt+0128/0136 и Alt+0036, но интересно, что вместо Alt+0128 и Alt+0036 в английской/испанской раскладке работают функции PgDn / PgUp

Еще одно замечание. При отключенном AutoHotkey, комбинация Alt+0036 работает в любой раскладке и выходит символ $ , а комбинация Alt+0136 работает только в русской раскладке и выводит многострадальный символ €. НО Alt+0136 в других раскладках (Espa?ol,EnglishUS) не работает и выводит чтото типа ^ (но только какойто уменьшенный вариант). А чтобы вывести € надо использовать Alt+0128 (работает в любых раскладках, кроме русской).

Но всеравно в последнем варианте при активном AutoHotkey вместо правильных € / $ (комбинации Alt+0128 / Alt+0036) символов работают PgUp / PgDn (соответсвтенно). НО Alt+0136 в русской раскладке не работает как PgUp