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

Disassembly:
sub esp, 0x188
mov eax, dword [0x428990]
push ebx
mov ebx, dword [esp + 0x190]
cmp ebx, 0x104
push ebp
mov dword [esp + 0x18c], eax
push edi
ja 0x40787e
je 0x407831
lea eax, [ebx - 8]
cmp eax, 0xfa
ja case.0x4076b3.9
movzx eax, byte [eax + 0x407bcc]
jmp dword [eax*4 + 0x407bac]
push str.WM_DRAWITEM
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
jmp case.0x4076b3.9
push str.WM_CHAR
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
jmp case.0x4076b3.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 fcn.004099a6
mov edi, dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
add esp, 0x10
lea eax, [esp + 0x90]
push eax
call edi
cmp ebp, 0xd
jne 0x40771b
push str.Press_Enter
call edi
push str.WM_KEYDOWN
call edi
jmp case.0x4076b3.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 0x407773
push str.SelectClipRgn_ERROR
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
push edi
mov ecx, esi
call fcn.00407dd0
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.0040b285
add esp, 0x188
ret 0xc
pop edi
pop ebp
mov eax, 1
pop ebx
mov ecx, dword [esp + 0x184]
call fcn.0040b285
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.0x4076b3.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.0x4076b3.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 fcn.004099a6
mov edi, dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
add esp, 0x10
lea edx, [esp + 0x90]
push edx
call edi
cmp ebp, 0x1e
jne 0x407872
push str.Press_Enter
call edi
push str.WM_SYSKEYDOWN
call edi
jmp case.0x4076b3.9
cmp ebx, 0x202
ja 0x407af1
je 0x407ac2
mov eax, ebx
sub eax, 0x113
je 0x407a90
sub eax, 0xed
je 0x4078f2
dec eax
jne case.0x4076b3.9
mov eax, dword [esp + 0x1a0]
movzx ecx, ax
shr eax, 0x10
lea edx, [esp + 0xc]
mov dword [0x439208], eax
mov eax, dword [esi + 8]
push edx
push eax
mov dword [esi + 0x80], 1
mov dword [0x439204], 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.0x4076b3.9
mov eax, dword [esi + 0x90]
test eax, eax
mov ebp, dword [sym.imp.USER32.dll_GetCursorPos]
je 0x4079b4
mov eax, dword [esi + 0xc]
test eax, eax
je 0x4079b4
mov eax, dword [esi + 0x94]
test eax, eax
je 0x4079b4
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 0x4079f3
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 0x407a84
cmp eax, dword [esp + 0x48]
jg 0x407a84
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x44]
jl 0x407a84
cmp eax, dword [esp + 0x4c]
jg 0x407a84
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.0x4076b3.9
mov dword [esi + 0x7c], 0
jmp case.0x4076b3.9
cmp dword [esp + 0x19c], esi
jne case.0x4076b3.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.0x4076b3.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.0x4076b3.9
mov eax, ebx
sub eax, 0x204
je 0x407b3d
dec eax
je 0x407b31
sub eax, 0x9e
jne case.0x4076b3.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.0x4076b3.9
mov dword [esi + 0x90], 0
jmp case.0x4076b3.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.0040b285
add esp, 0x188
ret 0xc