Как известно, команда Send не работает нормально, если перед запуском скрипта не была включена английская раскладка клавиатуры. Здесь предлагается для этого использовать
а чем он лучше простейшего варианта ?
Код:
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
_FixAccelHotKeyLayout()
HotKeySet("^+e", "_Quit")
$hGUI = GUICreate("Fix for hotkey/Accelerators assign problem", 300, 200)
$nEdit = GUICtrlCreateEdit("", 20, 40, 260, 120)
$nDummy = GUICtrlCreateDummy()
Dim $aAccelKeys[1][2] = [["^a", $nDummy]]
GUISetAccelerators($aAccelKeys)
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $nDummy
_GUICtrlEdit_SetSel($nEdit, 0, -1)
EndSwitch
WEnd
Func _Quit()
Exit
EndFunc
Func _FixAccelHotKeyLayout()
Static $iKbrdLayout, $aKbrdLayouts
If Execute('@exitMethod') <> '' Then
Local $iUnLoad = 1
For $i = 1 To Ubound($aKbrdLayouts) - 1
If Hex($iKbrdLayout) = Hex('0x' & StringRight($aKbrdLayouts[$i], 4)) Then
$iUnLoad = 0
ExitLoop
EndIf
Next
If $iUnLoad Then
_WinAPI_UnloadKeyboardLayout($iKbrdLayout)
EndIf
Return
EndIf
$iKbrdLayout = 0x0409
$aKbrdLayouts = _WinAPI_GetKeyboardLayoutList()
_WinAPI_LoadKeyboardLayout($iKbrdLayout, $KLF_ACTIVATE)
OnAutoItExitRegister('_FixAccelHotKeyLayout')
EndFunc
а чем он лучше простейшего варианта ?
Код:
_WinAPI_SetKeyboardLayout(WinGetHandle("[ACTIVE]"), 0x0409)