Desconozco la respuesta, pero tal vez si compararas lo que retorna GetForegroundWindow() contra el hwnd, algo distinto pasaria:
osea cambiar:
Código C:
Ver originalif(GetForegroundWindow() && IsWindowVisible(hwnd)){
por
Código C:
Ver originalif(( hwnd == GetForegroundWindow()) && IsWindowVisible(hwnd)){