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

是否有一种方法可以禁用Windows8的手势,windows,kiosk,Windows,Kiosk,我们的一个应用程序需要禁用Windows 8的一些内置手势,以防止用户离开该应用程序。(想想信息亭登录屏幕)。是否有方法仍然允许用户使用触摸与应用程序交互,但禁用/拦截一些内置手势(如将应用程序停靠在左侧、转到桌面等) 我们的备份解决方案是在某些屏幕中完全禁用触摸(这是我们可以做到的),但我们希望获得更好的用户体验,并且只禁用我们绝对需要的手势(类似于禁用windows键,ctrl+alt+del而不是整个键盘) 最初的搜索和调查没有找到我们一直在寻找的东西,所以我们不是在找错误的东西,就是在找

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

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


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

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


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

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

注册表项:

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\u NT\CurrentVersion\Winlogon\

键:“Shell”(REG_SZ)=“应用程序的路径”


您也只能对当前用户执行此操作(HKEY\U current\U user\SOFTWARE\Microsoft\Windows\U NT\CurrentVersion\Winlogon)

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

注册表项:

[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:0000000 f(15)

以编程方式执行,您可以调用下面链接中的函数。它需要将hWnd发送到您要定位的窗口

下面的C++将搜索窗口标题为“HeloWord”的窗口,并禁用所有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;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
窗柄;
HRESULT SetTouchDisableProperty(HWND HWND,BOOL fDisableTouch)
{
IPropertyStore*pPropStore;
HRESULT hrReturnValue=SHGetPropertyStoreForWindow(hwnd、IID_PPV_参数(&pPropStore));
if(成功(hrReturnValue))
{
前变异体;
变量vt=vt_BOOL;
var.boolVal=fDisableTouch?VARIANT_TRUE:VARIANT_FALSE;
hrReturnValue=pPropStore->SetValue(PKEY_Edgegestrue_DisableTouchWhenFullscreen,var);
pPropStore->Release();
}
返回hrReturnValue;
}
BOOL回调MyEnumProc(HWND-HWND,LPARAM-LPARAM)
{
TCHAR名称[500];
零内存(title,sizeof(title));
GetWindowText(hWnd,title,sizeof(title)/sizeof(title[0]);
如果(!\u tcscmp(标题(“helloworld”))
{
SetTouchDisableProperty(hWnd,true);
}
返回TRUE;
}
int _tmain(int argc,_TCHAR*argv[]
{   
枚举窗口(MyEnumProc,0);
返回0;
}

至少在8.1中,似乎有一个称为分配访问的功能:


设置>更改电脑设置>帐户>其他帐户>为分配的访问设置帐户

Windows charms bar由
explorer.exe
操作

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

然后,下面的几行代表我的
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关闭应用程序。

我并不是真的试图禁用某个元素的所有手势。我正在尝试禁用操作系统级别的手势。在Win8中,无论应用程序和操作系统执行某些操作(显示桌面、向左锁定等),您都可以执行某些手势。我需要捕获/禁用那些操作系统级功能。因此,这与我页面上的控件没有任何关系(事实上,我们希望让用户通过应用程序中的控件与触摸进行交互)。如果您只想为metro应用程序禁用手势,路径是什么样子的?不幸的是,在Thinkpad 10上使用带有Bing的
Windows 8.1时,路径不起作用。你还有其他建议吗?
;; 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