是否有一种禁用Windows8手势的方法

时间:2012-09-13 22:48:25

标签: windows kiosk

我们需要在其中一个应用中禁用Windows 8的某些内置手势,以防止用户离开应用。 (认为​​自助服务终端登录屏幕)。是否有方法仍然允许用户使用触摸与应用程序交互,但禁用/拦截一些内置手势(例如在左侧停靠应用程序,转到桌面等)。

我们的备份解决方案是在某些屏幕上完全禁用触摸(这是我们可以做的事情),但我们希望获得更好的用户体验并禁用我们绝对需要的手势(类似于禁用Windows键) ,ctrl + alt + del而不是整个键盘。)

最初的搜索和调查没有找到我们一直在寻找的东西,所以我们要么找错了,要么找错了。

6 个答案:

答案 0 :(得分:5)

您可以在Windows 8 Embedded中禁用手势。也许你可以在Windows 8中试试这个。

注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ImmersiveShell\EdgeUI]
"DisabledEdges"=dword:0000000f

0x01 : Disables left edge input and app switcher gesture.
0x02 : Disables right edge input and charm bar gesture.
0x04 : Disables top edge input and top application bar gesture.
0x08 : Disables bottom edge input and bottom application bar gesture.

如果要禁用每个手势,只需添加dword:0000000f(15)

答案 1 :(得分:3)

要以编程方式执行此操作,您可以在下面的链接中调用该函数。它需要hWnd到您想要定位的窗口。

http://msdn.microsoft.com/en-us/library/windows/desktop/jj553591%28v=vs.85%29.aspx

下面的C ++将搜索窗口标题为“helloworld”的窗口,并禁用所有Windows 8手势。这不适用于Windows应用商店应用,并且必须在窗口打开时调用该功能。如果应用程序已关闭并重新打开,则会返回手势。此外,我相信只有在应用程序全屏时它才有效。

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <propsys.h>
#include <propkey.h>

using namespace std;

HWND windowHandle;

HRESULT SetTouchDisableProperty(HWND hwnd, BOOL fDisableTouch)
{
    IPropertyStore* pPropStore;
    HRESULT hrReturnValue = SHGetPropertyStoreForWindow(hwnd, IID_PPV_ARGS(&pPropStore));
    if (SUCCEEDED(hrReturnValue))
    {
        PROPVARIANT var;
        var.vt = VT_BOOL;
        var.boolVal = fDisableTouch ? VARIANT_TRUE : VARIANT_FALSE;
        hrReturnValue = pPropStore->SetValue(PKEY_EdgeGesture_DisableTouchWhenFullscreen, var);
        pPropStore->Release();
    }
    return hrReturnValue;
}

BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)
{
    TCHAR title[500];
    ZeroMemory(title, sizeof(title));    

    GetWindowText(hWnd, title, sizeof(title)/sizeof(title[0]));

    if (!_tcscmp(title, _T("helloworld")))
    {
        SetTouchDisableProperty(hWnd,true);
    }

    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{   
    EnumWindows(MyEnumProc, 0);
    return 0;
}

答案 2 :(得分:1)

Windows魅力栏由explorer.exe操作。

因此,如果你的应用程序可以在没有它的情况下运行,那么你可以通过首先通过(以管理员身份运行)禁用explorer.exe的自动重启来解决它:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoRestartShell" /t REG_DWORD /d 0

然后下面的行代表我的launch.bat - 最终按预期工作:

;; kill explorer (this disables all windows functionalities
taskkill /f /im explorer.exe

;; start your kiosk app - should block the batch execution (so explorer.exe doesn't get executed at the end)
"\path\to\your\app.exe"

;; relaunch explorer.exe after you close the app to give back the functionality to windows
explorer.exe

我使用上面概述的方法让无键盘信息亭运行。因为使用键盘,您仍然可以使用 alt + f4 关闭应用。

答案 3 :(得分:0)

IsTapEnabled IsDoubleTapEnabled IsRightTapEnabled IsHoldingEnabled 设置为 false 应该禁用UI元素中的手势,但它们是属性,而不是方法。我还没有看到一种方法会禁用特定元素的 所有 手势。

我知道禁用每个控件来响应手势是荒谬的,但是如果你需要从Root到Children完全禁用所有控件,那么在root上创建attach属性并将这些属性设置为false可能是一个解决方案。

答案 4 :(得分:0)

手势由explorer.exe处理。 如果用您的应用程序替换Windows shell(默认值:explorer.exe),则操作系统级别不再有手势。

注册表项:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ Windows_NT \ CURRENTVERSION \ Winlogon中\

密钥:“Shell”(REG_SZ)=“path_to_your_application”

您也可以仅为当前用户执行此操作(HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows_NT \ CurrentVersion \ Winlogon)

答案 5 :(得分:0)

至少在8.1中,似乎有一个名为Assigned Access的功能:

http://blogs.technet.com/b/askpfeplat/archive/2013/10/28/how-to-setup-assigned-access-in-windows-8-1-kiosk-mode.aspx

http://windows.microsoft.com/en-us/windows-8/assigned-access

设置&gt;更改电脑设置&gt;帐户&gt;其他帐户&gt;设置指定访问权限的帐户