1 (изменено: stealzy, 2014-04-24 14:39:06)

Тема: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Capslock::PostMessage, 0x50,, 0x4090409,, A ; English
+Capslock::PostMessage, 0x50,, 0x4190419,, A ; Russian

В окне диалога открытия/выбора файла не работают
(Стандартное windows, по Ctrl+O которое обычно.)

Посоветуйте, пожалуйста универсальную команду.
--------------------------------------------------------------------------
UPD. Спасибо teadrinker:

teadrinker пишет:

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

CapsLock::
   WinGetClass, Class, % "ahk_id" hwnd := WinExist("A")
   if (Class = "#32770")
      hwnd := DllCall("GetWindow", Ptr, hwnd, UInt, GW_OWNER := 4, Ptr)
   PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 2,,, ahk_id %hwnd%
   Return

2

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Вот это попробуйте:


Capslock::
    ControlGetFocus, CtrlFocus, A
    PostMessage, 0x50,, 0x4090409, %CtrlFocus%, A ; English
Return
+Capslock::
    ControlGetFocus, CtrlFocus, A
    PostMessage, 0x50,, 0x4190419, %CtrlFocus%, A ; Russian
Return

3 (изменено: stealzy, 2014-04-23 13:24:02)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Спасибо, но в этих окнах работает через раз, иногда Capslock без + не перехватывается, а посылается как есть. Наверно придется определять раскладку и эмулировать AltShift. Нда.

4

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Что значит в этих окнах через раз? В одном и том же окне?

5 (изменено: stealzy, 2014-04-23 14:05:49)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Да, в одном и том же даже.

6

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

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

CapsLock::
   WinGetClass, Class, % "ahk_id" hwnd := WinExist("A")
   if (Class = "#32770")
      hwnd := DllCall("GetWindow", Ptr, hwnd, UInt, GW_OWNER := 4, Ptr)
   PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 2,,, ahk_id %hwnd%
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Может быть так?

   if hwnd := DllCall("GetWindow", "Ptr", WinExist("A"), "UInt", GW_OWNER := 4, "Ptr") 
      WinExist("ahk_id" hwnd)
   PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 2

8

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Вроде работает, здорово . Ну и до кучи:

CapsLock::
   WinGetClass, Class, % "ahk_id" hwnd := WinExist("A")
   if (Class = "AutoHotkeyGUI")
   {
      WinGet, PID, PID
      SetTitleMatchMode, 2
      DetectHiddenWindows, On
      WinExist("- AutoHotkey ahk_pid" PID)
   }
   else if hwnd := DllCall("GetWindow", Ptr, hwnd, UInt, GW_OWNER := 4, Ptr)
      WinExist("ahk_id" hwnd)
   PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 2
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Кстати, посылка в фокусный контрол с AHK Gui работает без дополнительных телодвижений.


Capslock::
    ControlGetFocus, CtrlFocus, A
    PostMessage, 0x50, 2,, %CtrlFocus%, A
Return

Я у себя пока перебоев в срабатывании не заметил.

10

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

У меня тоже работает, даже с AHK-окнами, но пока только на Win 7 пробовал.

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

11 (изменено: stealzy, 2014-04-24 14:36:57)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

teadrinker, спасибо за объяснение.
Взял ваш первый вариант на вооружение. Вариант bWRmeA работает в FileOpen окнах, но в обычных у меня не заработал.

12

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

А что, последний вариант YMP`а тоже не работает? Какая ОС?

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

13

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

У меня он работает на 8.1, ещё проверил на ХР SP2.

14

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

+ Offtop

Последний вариант YMP мне не подходит, т.к. мне не нужен переключатель, а первый предложенный работал очень нестабильно.

15 (изменено: define, 2014-04-30 00:27:38)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

А как реализовать инверт CapsLock, исправление регистра букв (с заглавных на маленькие и обратно)?

16

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Алгоритм такой. Создаете две пары массивов символов: один с русскими буквами в нижнем регистре, второй с соответствующими в верхнем, аналогично с английскими; считываете последнее написанное слово и побуквенно сравниваете с символами в массивах, если найдено, добавляете в переменную соответствующий символ из парного массива, если нет — сам считанный символ. После прохождения всех букв заменяете написанное слово на текст из полученной переменой.

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

17 (изменено: serzh82saratov, 2014-04-30 00:22:33)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

teadrinker
Похоже на 10+ просьбу добавить это сюда - Смена раскладки написанного текста.

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

18

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

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

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

19 (изменено: serzh82saratov, 2014-04-30 01:03:39)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Да в принципе и массивы букв ненужны, просто добавьте:


ConvertRegistr(text) {
    Loop, parse, text
        res .= (Asc := Asc(A_LoopField)) > 0x0040 && Asc < 0x005b ? Chr(Asc+32)
            : Asc > 0x0060 && Asc < 0x007b ? Chr(Asc-32)
            : Asc > 0x040f && Asc < 0x042f ? Chr(Asc+32)
            : Asc > 0x042f && Asc < 0x0451 ? Chr(Asc-32) : A_LoopField
   Return res
}

Ну и функцию запуска:


SwitchRegistr() {
    Critical 
    TempClipboard := ClipboardAll
    Clipboard =
    SendInput, ^{vk43}   ; Ctrl + C
    ClipWait, 0 
    SelText := ErrorLevel ? GetWord() : Clipboard 
    Clipboard := ConvertRegistr(SelText) 
    SendInput, ^{vk56}   ; Ctrl + V 
    Sleep, 200 
    Clipboard := TempClipboard
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

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

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

21

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

serzh82saratov пишет:

Да в принципе и массивы букв ненужны, просто добавьте:


ConvertRegistr(text) {
    Loop, parse, text
        res .= (Asc := Asc(A_LoopField)) > 0x0040 && Asc < 0x005b ? Chr(Asc+32)
            : Asc > 0x0060 && Asc < 0x007b ? Chr(Asc-32)
            : Asc > 0x040f && Asc < 0x042f ? Chr(Asc+32)
            : Asc > 0x042f && Asc < 0x0451 ? Chr(Asc-32) : A_LoopField
   Return res
}

А букву Ё за что обидел?

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

22

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

И "Я" из верхнего в нижний не конвертируется.

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

23 (изменено: serzh82saratov, 2014-04-30 18:22:00)

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

А букву Ё за что обидел?

Эх Ё моЁ.

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

24

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Вообщем так:


ConvertRegistr(text) {
    Loop, parse, text
        res .= (Asc := Asc(A_LoopField)) > 0x0040 && Asc < 0x005b ? Chr(Asc+32)
            : Asc > 0x0060 && Asc < 0x007b ? Chr(Asc-32)
            : Asc > 0x040f && Asc < 0x0430 ? Chr(Asc+32)
            : Asc > 0x042f && Asc < 0x0451 ? Chr(Asc-32)
            : Asc = 0x0451 ? "Ё" :  Asc = 0x0401 ? "ё" : A_LoopField
   Return res
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Вроде работает.

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

26

Re: AHK: Решено: Переключение раскладки не работает в окнах FileOpen

Добавил, заодно остальной код подправил.

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