禁用退出软件的任何可能性?

Lou*_*uis 2 c++ windows winapi kiosk windows-7

我正在实施大学考试软件C++,我希望防止任何人一旦运行就关闭它.目的是防止用户复制软件,打印屏幕并保存它,以及其他用途!

我最初想禁用的一种方式ctrl- - alt,del+ ,alt + ,及其它键组合,但显然以下这种方法并不特别是在Windows XP后的版本那么容易.F4alttab

您认为解决我的问题的可行方法是什么?

Jon*_*Jon 5

您当然应该采取所有正常步骤使您的应用程序拒绝自行关闭(可能除非提供密码),因此我们只讨论"我不想让任何人强行关闭它"部分.

一种解决方案是使您的应用程序成为Windows shell.

另一种解决方案是设置计算机,使当前登录的用户无权关闭您的应用程序.

最后的解决方案,这是一个肮脏的,没有正式支持的黑客,你没有听到我,是这样做的:

public static class Utility
{
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3);

    public static void BsodIfProcessEnds()
    {
        Process.EnterDebugMode();
        RtlSetProcessIsCritical(1, 0, 0);
    }

    public static void NoFireworksIfProcessEnds()
    {
        RtlSetProcessIsCritical(0, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

警告:BsodIfProcessEnds完全按照锡上的说法完成.

  • 呵呵,我喜欢这样一个想法,即如果他们试图关闭测试,那么参加考试的学生会立即获得BSOD,甜蜜...... ;-) (2认同)