我需要创建一个可以在 Windows 8 上全屏运行并且用户不能轻易退出的应用程序。
由于该应用程序将在只有触觉输入的计算机或平板电脑上运行,因此我将创建一个无铬和最顶层的 WPF 应用程序,该应用程序只有在连接键盘时才能关闭。
问题是左侧的应用程序切换栏和右侧的超级按钮栏仍然可以在没有键盘的情况下打开,并且允许用户退出应用程序。这可以从代码中禁用吗?我似乎找不到方法。
简单的解决方案是在另一个操作系统上运行,但机器将运行 Windows 8,对此我无能为力。
我挖出了一个 .TXT,其中包含我前段时间在网上某处找到的一些注释,它可能会有所帮助(最坏的情况,它不适用于 Windows 8 并且不起作用。不幸的是我无法引用它的来源,我真的不记得它来自哪里):
自 XP 以来已经存在“信息亭模式”。通常它的目的是锁定 IE 以显示一些交互式网页而不让用户关闭它:它被称为强制用户配置文件。
要设置它:
完成并登录新帐户后,您会发现它的性能几乎与您一直在寻找的信息亭模式一样。要撤消更改,请注销并重新登录。
我遇到了完全相同的问题,并且形成了我所知道的,除非您使用自制的 rootkit 来禁用 Charms Bar,否则无法做到这一点。这就是我在考虑了所有其他选项后一直采用的方式。
为了节省您一些时间,这里是行不通的。
这里有一些可能有效的选项,虽然不是很漂亮。查看以下内容:
否则,你无能为力。我很想听听你是如何解决这个问题的。
查看我提出的类似问题:Windows 8 中的 Kiosks Running Regular Software (Non-Windows Store App)
explorer.exe
当您的应用程序启动并且魅力栏不起作用时终止。
这一年是 2018 年,Window 10 几乎完全推出了 Windows 8。Win8 的“热角”在 Win10 中再次变冷——它们显然取得了巨大的成功。但是,如果您仍然需要在 Win8.x/Win2012 中禁用它们并最终在这里寻找解决方案(就像我所做的那样),这就是我解决它的方法。我意识到如果全屏应用程序处于活动状态并覆盖任务栏,Windows 会自动禁用它们。由于我的应用程序是基于对话框的而不是全屏的,因此我创建了一个透明窗口(光学透明且输入透明)并将其设置为我的对话框的父窗口。现在这个不可见的窗口覆盖了整个屏幕-> 热角被禁用。
像这样的东西(简化):
int nVirtualScreenLeft = GetSystemMetrics (SM_XVIRTUALSCREEN);
int nVirtualScreenTop = GetSystemMetrics (SM_YVIRTUALSCREEN);
int nVirtualScreenWidth = GetSystemMetrics (SM_CXVIRTUALSCREEN);
int nVirtualScreenHeight = GetSystemMetrics (SM_CYVIRTUALSCREEN);
HWND hwndFullScreenInvisible = CreateWindowEx(
WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW,
_T("Static"), strWindowCaption,
WS_VISIBLE | WS_POPUP,
nVirtualScreenLeft, nVirtualScreenTop, nVirtualScreenWidth, nVirtualScreenHeight,
HWND_DESKTOP, NULL, NULL, NULL);
if (hwndFullScreenInvisible != NULL)
{
BOOL bRet = SetLayeredWindowAttributes (hwndFullScreenInvisible, /*COLORREF = */ 0, /* byAlpha = */ 0, LWA_ALPHA);
}
CMyDlg dlg (CWnd::FromHandle(hwndFullScreenInvisible));
dlg.DoModal ();
简单的解决方案,不完美但有效,每次激活魅力栏时,您的应用程序都会停用,因此立即重新激活它,魅力栏就会消失。将此添加到您的 App.xaml.cs
DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
public App()
{
this.Deactivated += App_Deactivated;
this.Activated += App_Activated;
timer.Tick += delegate
{
Application.Current.MainWindow.Activate();
};
timer.Interval = new TimeSpan(0, 0, 0, 0, 10);
}
void App_Activated(object sender, EventArgs e)
{
timer.Stop();
}
void App_Deactivated(object sender, EventArgs e)
{
timer.Start();
}
我知道回答这个问题可能有点晚了,但希望这对其他人有帮助,在您的 Regedit 中有一个 regkey 允许您选择“Shell”窗口启动的内容,默认情况下它设置为 explorer.exe 如果您改变它它会启动到你想要的任何程序,而无需通过愚蠢的 Windows 8 开始菜单。
Regkey 在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\shell
希望对大家有所帮助。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell\EdgeUI\DisableTLcorner DWORD=1
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell\EdgeUI\DisableCharmsHint DWORD=1