Function at 0x405630
Capabilities:
Check for unmoving mouse cursor
Print debug messages

Disassembly:
sub esp, 0x188
mov eax, dword [0x40c060]
push ebx
mov ebx, dword [esp + 0x190]
cmp ebx, 0x104
push ebp
mov dword [esp + 0x18c], eax
push edi
ja 0x405840
je 0x4057f2
lea eax, [ebx - 8]
cmp eax, 0xfa
ja case.0x405673.9
movzx eax, byte [eax + 0x405b90]
jmp dword [eax*4 + 0x405b70]
push str.WM_DRAWITEM
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
jmp case.0x405673.9
push str.WM_CHAR
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
jmp case.0x405673.9
mov ebp, dword [esp + 0x1a0]
mov ecx, dword [esp + 0x19c]
push ebp
push ecx
lea edx, [esp + 0x98]
push str.wParam__is:_x_Param_is:_x
push edx
call dword [sym.imp.MSVCR71.dll_sprintf]
mov edi, dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
add esp, 0x10
lea eax, [esp + 0x90]
push eax
call edi
cmp ebp, 0xd
jne 0x4056dc
push str.Press_Enter
call edi
push str.WM_KEYDOWN
call edi
jmp case.0x405673.9
mov edx, dword [esi + 8]
lea ecx, [esp + 0x50]
push ecx
push edx
call dword [sym.imp.USER32.dll_BeginPaint]
mov edi, eax
push edi
call dword [sym.imp.GDI32.dll_SaveDC]
push 0
push 0
push 0
push 0
mov ebp, eax
call dword [sym.imp.GDI32.dll_CreateRectRgn]
mov ebx, eax
mov eax, dword [esi + 8]
push ebx
push eax
call dword [sym.imp.USER32.dll_GetWindowRgn]
push ebx
push edi
call dword [sym.imp.GDI32.dll_SelectClipRgn]
test eax, eax
jne 0x405734
push str.SelectClipRgn_ERROR
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
push edi
mov ecx, esi
call fcn.00405d90
push ebp
push edi
call dword [sym.imp.GDI32.dll_RestoreDC]
mov edx, dword [esi + 8]
lea ecx, [esp + 0x50]
push ecx
push edx
call dword [sym.imp.USER32.dll_EndPaint]
push ebx
call dword [sym.imp.GDI32.dll_DeleteObject]
pop edi
pop ebp
xor eax, eax
pop ebx
mov ecx, dword [esp + 0x184]
call fcn.00406fae
add esp, 0x188
ret 0xc
pop edi
pop ebp
mov eax, 1
pop ebx
mov ecx, dword [esp + 0x184]
call fcn.00406fae
add esp, 0x188
ret 0xc
mov ecx, dword [esi + 8]
lea eax, [esp + 0xc]
push eax
push ecx
mov dword [esi + 0x88], 0
call dword [sym.imp.USER32.dll_GetClientRect]
mov eax, dword [esi + 8]
push 1
lea edx, [esp + 0x10]
push edx
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x405673.9
mov eax, dword [esi + 8]
mov ecx, dword [esp + 0x19c]
lea edx, [esp + 0xc]
push edx
push eax
mov dword [esi + 0x84], ecx
call dword [sym.imp.USER32.dll_GetClientRect]
mov edx, dword [esi + 8]
push 1
lea ecx, [esp + 0x10]
push ecx
push edx
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x405673.9
mov eax, dword [esp + 0x1a0]
mov ebp, dword [esp + 0x19c]
push eax
push ebp
lea ecx, [esp + 0x98]
push str.wParam__is:_x_Param_is:_x
push ecx
call dword [sym.imp.MSVCR71.dll_sprintf]
mov edi, dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
add esp, 0x10
lea edx, [esp + 0x90]
push edx
call edi
cmp ebp, 0x1e
jne 0x405834
push str.Press_Enter
call edi
push str.WM_SYSKEYDOWN
call edi
jmp case.0x405673.9
cmp ebx, 0x202
ja 0x405ab3
je 0x405a84
mov eax, ebx
sub eax, 0x113
je 0x405a52
sub eax, 0xed
je 0x4058b4
dec eax
jne case.0x405673.9
mov eax, dword [esp + 0x1a0]
movzx ecx, ax
shr eax, 0x10
lea edx, [esp + 0xc]
mov dword [0x419448], eax
mov eax, dword [esi + 8]
push edx
push eax
mov dword [esi + 0x80], 1
mov dword [0x419444], ecx
call dword [sym.imp.USER32.dll_GetClientRect]
mov edx, dword [esi + 8]
push 1
lea ecx, [esp + 0x10]
push ecx
push edx
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x405673.9
mov eax, dword [esi + 0x90]
test eax, eax
mov ebp, dword [sym.imp.USER32.dll_GetCursorPos]
je 0x405976
mov eax, dword [esi + 0xc]
test eax, eax
je 0x405976
mov eax, dword [esi + 0x94]
test eax, eax
je 0x405976
lea edi, [esi + 0x2d8]
push edi
call ebp
mov eax, dword [esi + 0xc]
lea ebx, [esi + 0x2a0]
push ebx
push eax
call dword [sym.imp.USER32.dll_GetWindowRect]
mov ecx, dword [esi + 0x2b0]
mov eax, dword [esi + 0x2e4]
mov edi, dword [edi]
mov edx, ecx
sub edx, dword [esi + 0x2e8]
push 1
sub edx, dword [esi + 0x2d0]
sub edx, dword [ebx]
mov ebx, dword [esi + 0x2dc]
sub ebx, dword [esi + 0x2e0]
sub edx, eax
sub ebx, dword [esi + 0x2d4]
lea edx, [edx + edi - 1]
sub ebx, dword [esi + 0x2a4]
mov edi, dword [esi + 0x2b4]
sub ebx, eax
lea eax, [ebx + edi - 1]
mov ebx, dword [esi + 0x2bc]
sub ebx, edi
mov edi, dword [esi + 0x2b8]
push ebx
sub edi, ecx
push edi
push eax
mov dword [esi + 0x2c4], eax
mov eax, dword [esi + 8]
push edx
push eax
mov dword [esi + 0x2c0], edx
call dword [sym.imp.USER32.dll_MoveWindow]
mov ebx, dword [esp + 0x198]
mov eax, dword [esi + 4]
test eax, eax
je 0x4059b5
mov edx, dword [esp + 0x19c]
mov ecx, dword [esp + 0x1a0]
mov dword [esp + 0x2c], edx
lea edx, [esp + 0x24]
push edx
push 0
mov dword [esp + 0x38], ecx
mov ecx, dword [esi + 8]
push 0x407
push eax
mov dword [esp + 0x38], 0x200
mov dword [esp + 0x34], ecx
call dword [sym.imp.USER32.dll_SendMessageA]
lea eax, [esp + 0x1c]
push eax
call ebp
mov edx, dword [esi + 8]
lea ecx, [esp + 0x1c]
push ecx
push edx
call dword [sym.imp.USER32.dll_ScreenToClient]
mov ecx, dword [esi + 8]
mov edi, dword [sym.imp.USER32.dll_GetClientRect]
lea eax, [esp + 0x40]
push eax
push ecx
call edi
mov eax, dword [esp + 0x1c]
cmp eax, dword [esp + 0x40]
jl 0x405a46
cmp eax, dword [esp + 0x48]
jg 0x405a46
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x44]
jl 0x405a46
cmp eax, dword [esp + 0x4c]
jg 0x405a46
mov eax, dword [esi + 8]
lea edx, [esp + 0xc]
push edx
push eax
mov dword [esi + 0x7c], 1
call edi
mov edx, dword [esi + 8]
push 1
lea ecx, [esp + 0x10]
push ecx
push edx
call dword [sym.imp.USER32.dll_InvalidateRect]
mov eax, dword [esi + 8]
lea ecx, [esp + 0x24]
push ecx
mov dword [esp + 0x28], 0x10
mov dword [esp + 0x2c], 2
mov dword [esp + 0x30], eax
call dword [sym.imp.USER32.dll_TrackMouseEvent]
jmp case.0x405673.9
mov dword [esi + 0x7c], 0
jmp case.0x405673.9
cmp dword [esp + 0x19c], esi
jne case.0x405673.9
mov eax, dword [esi + 8]
lea edx, [esp + 0xc]
push edx
push eax
call dword [sym.imp.USER32.dll_GetClientRect]
mov edx, dword [esi + 8]
push 1
lea ecx, [esp + 0x10]
push ecx
push edx
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x405673.9
mov ecx, dword [esi + 8]
lea eax, [esp + 0xc]
push eax
push ecx
mov dword [esi + 0x80], 0
call dword [sym.imp.USER32.dll_GetClientRect]
mov eax, dword [esi + 8]
push 1
lea edx, [esp + 0x10]
push edx
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x405673.9
mov eax, ebx
sub eax, 0x204
je 0x405aff
dec eax
je 0x405af3
sub eax, 0x9e
jne case.0x405673.9
mov edx, dword [esi + 8]
lea ecx, [esp + 0xc]
xor eax, eax
push ecx
push edx
mov dword [esi + 0x7c], eax
mov dword [esi + 0x90], eax
call dword [sym.imp.USER32.dll_GetClientRect]
mov ecx, dword [esi + 8]
push 1
lea eax, [esp + 0x10]
push eax
push ecx
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x405673.9
mov dword [esi + 0x90], 0
jmp case.0x405673.9
lea edx, [esi + 0x2d0]
push edx
mov dword [esi + 0x90], 1
call dword [sym.imp.USER32.dll_GetCursorPos]
mov ecx, dword [esi + 8]
mov edi, dword [sym.imp.USER32.dll_GetWindowRect]
lea eax, [esi + 0x2b0]
push eax
push ecx
call edi
mov eax, dword [esi + 8]
lea edx, [esi + 0x2c0]
push edx
push eax
call edi
mov ecx, dword [esp + 0x1a0]
mov edx, dword [esp + 0x19c]
mov eax, dword [esi + 8]
push ecx
mov ecx, dword [esi + 0x10]
push edx
push ebx
push eax
push ecx
call dword [sym.imp.USER32.dll_CallWindowProcA]
mov ecx, dword [esp + 0x190]
pop edi
pop ebp
pop ebx
call fcn.00406fae
add esp, 0x188
ret 0xc