6

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

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

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

4

6 回答 6

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)

于 2012-11-05T08:44:27.490 回答
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;
}
于 2013-02-15T02:18:56.717 回答
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

于 2014-08-26T07:22:03.220 回答
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

设置 > 更改 PC 设置 > 帐户 > 其他帐户 > 设置帐户以分配访问权限

于 2014-07-24T20:35:16.283 回答
0

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

注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows_NT\CurrentVersion\Winlogon\

键:“Shell”(REG_SZ)=“path_to_your_application”

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

于 2012-10-17T06:44:53.770 回答
0

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

我知道禁用每个控件以响应手势是荒谬的,但是如果您需要从字面上禁用从 Root 到 Children 的所有控件,那么在根上创建附加属性并将这些属性设置为 false 可能是一种解决方案。

于 2012-09-14T20:48:20.930 回答