我们已经在我们的应用程序,我们需要禁用一些内置的手势为Windows 8,以防止用户离开该应用程序的一个需要。 (想想在屏幕亭标志)。 是否有仍然允许用户与应用程序交互使用的触摸,但禁用/截取一些内置的手势(像的东西对接左侧的应用程序,要到桌面等)的方法。
我们的备份解决方案是完全禁用触摸时,在某些屏幕(这是我们可以做的),但我们希望能有更好的用户体验和公正禁用,我们绝对需要(类似禁用Windows键,Ctrl手势+ ALT +德尔,而不是全键盘)。
最初的搜索和调查都没有翻起来就是我们一直在寻找所以我们无论是找错了东西或者在错误的地方。
您可以在Windows 8嵌入式停用手势。 也许你可以在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)
要做到这一点编程,您可以拨打下面的链接的功能。 它需要的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;
}
窗的魅力酒吧被操作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的应用程序。
设置IsTapEnabled,IsDoubleTapEnabled,IsRightTapEnabled和IsHoldingEnabled 假应停用UI元素的姿态,但他们的属性,而不是方法。 我还没有看到,这将禁用所有比划了特定元素的方法。
我知道这是荒谬的禁用每个控制的手势作出回应,但如果你需要从字面上禁用所有控件从根到儿童然后创建根的附加属性和设置这些属性设置为false可能是一个解决方案。
这些手势对Explorer.exe的处理。 如果你更换Windows外壳(默认:explorer.exe的),你的应用程序,则有在操作系统层面没有更多的手势。
注册表项:
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ Windows_NT \ CURRENTVERSION \ Winlogon中\
键: “壳”(REG_SZ)= “path_to_your_application”
你也可以只为当前用户做到这一点(HKEY_CURRENT_USER \ SOFTWARE \微软\ Windows_NT \ CURRENTVERSION \ Winlogon中)
至少在8.1,似乎是一个功能叫做分配的访问:
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
设置>更改电脑设置>帐户>其他帐户>设置分配访问权限的帐户