Что нового

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

hexin

Новичок
Сообщения
32
Репутация
0
Скрипт простой, нажимаем кнопку в окошке и скрипт вставляет ссылку в адресную строку браузера, у меня мозилла и координаты рассчитаны для адресной строки мозиллы, если у вас другой браузер то просто подправьте координаты под адресную строку вашего браузера.
Ошибка появляется если делать в такой последовательности:
1)запускаем браузер
2)запускаем скрипт (раскладка клавиатуры не важка, скрипт сам переключит на английскую)
3)сами вручную переключаем клавиатуру на русскую
4)нажимаем кнопку в скрипте

...и видим что в адрессную строку вставляется не http://autoit-script.ru а что-то другое.
Подскажите пожалуйста как исправить?

Код:
#include <WinAPISys.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
#include <Misc.au3>

_FixAccelHotKeyLayout()
Local $hDLL = DllOpen("user32.dll")

Opt("WinTitleMatchMode", 2)

$GUI = GUICreate("WWW", 200, 100)
$nButton = GUICtrlCreateButton('', 20, 20, 100, 50)


GUISetState(@SW_SHOW)
WinSetOnTop($GUI, "", 1)


While 1

   $msg = GUIGetMsg()

    Switch $msg
      Case $GUI_EVENT_CLOSE
           ExitLoop
      Case $nButton
           sleep(200)
            MouseMove(@DesktopWidth/2, 50, 0)
            Sleep(50)
            MouseClick("left")
            Sleep(300)
            ClipPut("http://autoit-script.ru")
            Send("^v")


   EndSwitch



WEnd



Func _FixAccelHotKeyLayout()

    If @KBLayout <> 409 Then
        _WinAPI_SetKeyboardLayout(WinGetHandle('[ACTIVE]'), 0x0409)

    EndIf
EndFunc
 
Последнее редактирование:
Автор
H

hexin

Новичок
Сообщения
32
Репутация
0
В моём случае я не нажимаю непосредственно на клавиатуре ctrl+t а я просто кликаю по кнопке в своем скрипте и код сам должен посылать команду ctrl+t.
Так что хоткей мне не подходит.
Сама команда ctrl+t нужна для создания новой пустой вкладки в мозилле куда будет вставляться ссылка, но если на панели трей стоит язвк русский то браузер просто не видит эту команду посылаемую из скрипта, нужно только чтобы анг стоял.

Если посылать в мозиллу ctrl+t руками с клавиатуры то команда видна мозилле и она создает новую вкладку даже при рус раскладке в панели трей, а если эту команду посылать через скрипт и при этом фокус на окне моей программы то есть моя программа активная то активируя окно мозиллы при рус языке в панели трей то мозилла не видит эту команду и новая вкладке не создается.

1)запустить мозиллу
2)запустить скрипт
3)установить руками через клавиатуру рус расскладку чтобы была в панели трей
4)запустить скрипт (кликнуть мышкой по кнопке)

...вкладка в браузере новая не создается.


Код:
#include <WinAPISys.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
#include <Misc.au3>

_FixAccelHotKeyLayout()
Local $hDLL = DllOpen("user32.dll")

Opt("WinTitleMatchMode", 2)

$GUI = GUICreate("WWW", 200, 100)
$nButton = GUICtrlCreateButton('', 20, 20, 100, 50)


GUISetState(@SW_SHOW)
WinSetOnTop($GUI, "", 1)


While 1

   $msg = GUIGetMsg()

    Switch $msg
      Case $GUI_EVENT_CLOSE
           ExitLoop
        Case $nButton

           WinActivate("[REGEXPTITLE:.*Mozilla Firefox.*]")
            Sleep(500)
            Send("^t")

   EndSwitch


WEnd



Func _FixAccelHotKeyLayout()

    If @KBLayout <> 409 Then
        _WinAPI_SetKeyboardLayout(WinGetHandle('[ACTIVE]'), 0x0409)

    EndIf
EndFunc
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>

_SendCtrlKey($VK_T) ; Ctrl+T
_SendCtrlKey($VK_V) ; Ctrl+V

Func _SendCtrlKey($Key)
  _WinAPI_Keybd_Event($VK_CONTROL, 0)
  _WinAPI_Keybd_Event($Key, 0)
  _WinAPI_Keybd_Event($Key, 2)
  _WinAPI_Keybd_Event($VK_CONTROL, 2)
EndFunc
 
Автор
H

hexin

Новичок
Сообщения
32
Репутация
0
Код:
#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>

_SendCtrlKey($VK_T) ; Ctrl+T
_SendCtrlKey($VK_V) ; Ctrl+V

Func _SendCtrlKey($Key)
  _WinAPI_Keybd_Event($VK_CONTROL, 0)
  _WinAPI_Keybd_Event($Key, 0)
  _WinAPI_Keybd_Event($Key, 2)
  _WinAPI_Keybd_Event($VK_CONTROL, 2)
EndFunc
Супер! Работает прекрасно! Спасибо!
 
Верх