如何以编程方式禁用Windows 8 Charms栏?

时间:2012-08-06 08:55:07

标签: wpf winapi windows-8

我需要创建一个在Windows 8上全屏运行的应用程序,用户不应该轻易退出。

由于应用程序将在仅具有触觉输入的计算机或平板电脑上运行,因此我打算创建一个无边框和最顶级的WPF应用程序,只有在连接键盘时才能关闭它。

问题是左侧的应用程序切换栏和右侧的超级按钮栏仍然可以在没有键盘的情况下打开,并允许用户退出应用程序。这可以从代码中禁用吗?我似乎无法找到办法。

简单的解决方案是在另一个操作系统上运行,但机器将运行Windows 8,我无能为力。

7 个答案:

答案 0 :(得分:1)

我用一些我在网上某处发现的笔记挖出了.TXT,它可能会有所帮助(最坏的情况,它不适用于Windows 8而且不起作用。不幸的是我是无法引用它的来源,我真的不记得它来自哪里了):

自XP以来已经存在“自助服务终端模式”。通常它的目的是锁定IE以显示一些交互式网页,同时不让用户关闭它:它被称为强制用户配置文件。

进行设置:

  1. 按照您想要的方式设置帐户。设置组策略,设置启动程序 用户必须是标准用户,而不是管理员。但话又说回来,如果一个未经授权的人即使计算机被“冻结”也可以获得管理员权限,我认为你会遇到更严重的问题。
  2. 以管理员身份登录,计算机属性>高级>用户个人资料设置> (选择该个人资料)> (将其复制到任何地方)>将“允许使用”设置为“每个人”
  3. 转到该文件夹​​属性>安全> (改变它以便每个人都可以阅读和修改,但不能写,确保你适用于一切内部)
  4. 将NTUSER.DAT重命名为NTUSER.MAN
  5. 打开计算机管理>本地用户和群组>用户> (创建新用户)> (打开新创建的用户)>个人资料> (在配置文件路径上,将其设置为该文件夹)
  6. 禁用您刚刚复制的用户(因为您不希望别人登录)
  7. 当您完成并登录新帐户后,您会发现它的表现几乎就像您一直在寻找的自助服务终端模式。要撤消更改,请注销并重新登录。

答案 1 :(得分:0)

我有完全相同的问题,形成我所知道的,除非你使用自制的rootkit来禁用Charms Bar,否则就无法做到。在考虑了所有其他选项之后,这就是我的运作方式。

为了节省你一些时间,这将是无效的。

  • Classic Shell。
  • 启动菜单套件。
  • EdgeUI的注册表编辑。
  • 通过右键单击开始菜单禁用 - 但您应该执行此操作以禁用其他功能。

以下是一些可行的选项,但不是很漂亮。请看以下内容:

  • Sideloading Apps
  • 重新创建Windows应用商店应用
  • Rootkit的

否则,你无能为力。我很想听听你是如何解决这个问题的。

查看我问过的类似问题:Kiosks in Windows 8 Running Regular Software (Non-Windows Store App)

答案 2 :(得分:0)

当你的应用程序启动时杀死explorer.exe,而魅力栏将无效。

答案 3 :(得分:0)

我知道回答这个问题可能有点迟了但希望这有助于其他人,在你的Regedit中有一个regkey可以让你选择什么' Shell' Windows启动进入,默认情况下它设置为explorer.exe,如果你更改它,它将启动到你想要的任何程序,而无需通过愚蠢的Windows 8开始菜单。

Regkey在

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\shell

希望对大家有所帮助。

答案 4 :(得分:0)

简单的解决方案,不完美但有效,每次激活魅力栏时,您的应用程序都会停用,因此立即重新激活它并且魅力栏消失。将其添加到App.xaml.cs

75

答案 5 :(得分:0)

那是2018年,Window 10几乎完全推出Windows8。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 ();

答案 6 :(得分:-2)

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ ImmersiveShell \ EdgeUI \ DisableTLcorner DWORD = 1

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ ImmersiveShell \ EdgeUI \ DisableCharmsHint DWORD = 1