Function at 0x453290
Capabilities:
Get keyboard layout

Disassembly:
sub esp, 0x130
push ebx
push ebp
mov ebp, ecx
push esi
push edi
mov eax, dword [ebp]
cmp eax, 6
ja case.0x4532a8.1
jmp dword [eax*4 + 0x453524]
mov eax, str.Timeout
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
mov eax, str.Match
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
mov eax, dword [esp + 0x144]
mov edi, eax
test eax, eax
jne 0x4532f2
mov eax, str.EndKey
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
cmp byte [esp + 0x14c], 0
mov ebx, dword [esp + 0x148]
je 0x453313
movups xmm0, xmmword [str.EndKey:]
lea edi, [eax + 0xe]
sub ebx, 7
movups xmmword [eax], xmm0
movzx eax, word [ebp + 0x4a]
test ax, ax
je 0x453347
mov word [edi], ax
xor eax, eax
cmp byte [esp + 0x14c], 0
mov word [edi + 2], ax
mov eax, str.EndKey
cmovne eax, dword [esp + 0x144]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
cmp byte [ebp + 0x4d], 0
je 0x453407
push 0x100
lea eax, [esp + 0x44]
push 0
push eax
call fcn.004cc590
add esp, 0xc
mov byte [esp + 0x50], 0x80
call dword [sym.imp.USER32.dll_GetForegroundWindow]
xor esi, esi
test eax, eax
je 0x4533a9
mov ebx, dword [sym.imp.USER32.dll_GetWindowThreadProcessId]
push esi
push eax
call ebx
mov esi, eax
mov dword [esp + 0x10], 0x30
lea eax, [esp + 0x10]
push eax
push esi
call dword [sym.imp.USER32.dll_GetGUIThreadInfo]
test eax, eax
je 0x4533a9
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x4533a9
push 0
push eax
call ebx
mov esi, eax
push esi
call dword [sym.imp.USER32.dll_GetKeyboardLayout]
mov cl, byte [ebp + 0x46]
xor ebx, ebx
cmp dword [0x51eaa8], ebx
mov esi, eax
setne bl
xor dl, dl
call fcn.0041e950
push esi
push ebx
push 2
push edi
lea edx, [esp + 0x50]
movzx ecx, ax
movzx eax, byte [ebp + 0x46]
push edx
push ecx
push eax
call dword [sym.imp.USER32.dll_ToUnicodeEx]
xor ecx, ecx
cmp byte [esp + 0x14c], cl
mov word [edi + eax*2], cx
mov eax, str.EndKey
cmovne eax, dword [esp + 0x144]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
xor eax, eax
mov word [edi], ax
cmp byte [ebp + 0x4c], al
je 0x453444
movzx ecx, word [ebp + 0x48]
cmp word [eax*8 + 0x51b9a4], cx
je 0x453427
inc eax
cmp eax, 0xd
jl 0x453415
jmp 0x45344e
lea esi, [ebx - 1]
push esi
push dword [eax*8 + 0x51b9a0]
push edi
call fcn.004d95fc
add esp, 0xc
xor eax, eax
mov word [edi + esi*2], ax
movzx eax, word [edi]
movzx eax, ax
mov ecx, eax
test ax, ax
jne 0x45347b
cmp byte [esp + 0x14c], 0
je 0x45345f
xor ecx, ecx
cmp byte [ebp + 0x4c], cl
jne 0x45347b
cmp byte [ebp + 0x4c], 0
mov edx, edi
mov cl, byte [ebp + 0x46]
sete al
movzx eax, al
push eax
push ebx
call fcn.0041e0f0
movzx ecx, word [edi]
add esp, 8
movzx edx, cx
test cx, cx
jne 0x45349a
movzx eax, word [ebp + 0x48]
push eax
push str.sc_03X
push ebx
push edi
call fcn.004af740
movzx edx, word [edi]
add esp, 0x10
lea eax, [edx - 0x61]
cmp ax, 0x19
ja 0x4534ba
cmp word [edi + 2], 0
jne 0x4534ba
cmp byte [esp + 0x14c], 0
je 0x4534ba
lea eax, [edx - 0x20]
mov word [edi], ax
cmp byte [esp + 0x14c], 0
mov eax, str.EndKey
cmovne eax, dword [esp + 0x144]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
mov eax, 0x50a7c4
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
mov eax, str.NewInput
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
mov eax, str.Stopped
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x130
ret 0xc
pop edi
pop esi
pop ebp
mov eax, 0x4f03e8
pop ebx
add esp, 0x130
ret 0xc