Как запретить пользователю закрывать, сворачивать программу?
Отрубить им всем руки и другие выступающие части тела. Это я к тому что на 100% защититься не получится, все равно если постараться можно будет закрыть. Но можно минимизировать возможности. По личному опыту для этого не достаточно чего то одного, нужен целый ряд манипуляций. Если вкратце использовал насколько я помню эти:блокировка CTRL+ALT+DEL на уровне реестраудаление совсем диспетчера задачглобальный хук всех клавиш клавиатуры, отправка сигнала "обработано" по всем "ненужным" клавишам, тем самым сигналы до других приложений просто не доходят. отслеживание активного окна, если сменилось мгновенное переключение обратно на нужноециклический перезапуск нужного окна на случай его крашаблокировка клавиатуры и мыши на время перезапуска
это только то что на вскидку вспомнил, все это я делал в виде приложения на C#, тогда это была оболочка вместо explorer для игровых машин, взламывать ее получалось очень редко и только самыми изощренными способами, которые я в конце концов прикрыл. Все это могло работать под админской учеткой без опастности для здоровья машины.
На самом деле манипуляций реально много. К вышесказанному добавлю, что можно в реестре поменять значение Shell с explorer'a на ваше приложение.