我们需要在其中一个应用中禁用Windows 8的某些内置手势,以防止用户离开应用。 (认为自助服务终端登录屏幕)。是否有方法仍然允许用户使用触摸与应用程序交互,但禁用/拦截一些内置手势(例如在左侧停靠应用程序,转到桌面等)。
我们的备份解决方案是在某些屏幕上完全禁用触摸(这是我们可以做的事情),但我们希望获得更好的用户体验并禁用我们绝对需要的手势(类似于禁用Windows键) ,ctrl + alt + del而不是整个键盘。)
最初的搜索和调查没有找到我们一直在寻找的东西,所以我们要么找错了,要么找错了。
答案 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://windows.microsoft.com/en-us/windows-8/assigned-access
设置&gt;更改电脑设置&gt;帐户&gt;其他帐户&gt;设置指定访问权限的帐户