2012-09-13 14 views
6

我們需要在我們的某個應用程序中禁用某些Windows 8內置手勢以防止用戶離開應用程序。 (想想kiosk登錄屏幕)。是否有方法仍然允許用戶使用觸摸與應用程序進行交互,但禁用/攔截某些內置手勢(例如停靠左側的應用程序,進入桌面等)。是否有禁用Windows8手勢的方法

我們的備份解決方案是在某些屏幕中完全禁用觸摸屏(這是我們可以做的事情),但我們希望獲得更好的用戶體驗,並禁用我們絕對需要的手勢(類似於禁用窗口鍵,ctrl + alt + del而不是整個鍵盤)。

最初的搜索和調查還沒有找到我們一直在尋找的東西,所以我們要麼尋找錯誤的東西,要麼找錯了地方。

回答

0

設置IsTapEnabledIsDoubleTapEnabledIsRightTapEnabled,並IsHoldingEnabled應停用UI元素的姿態,但他們的屬性,而不是方法。我還沒有看到一種方法,將禁用所有手勢爲特定元素禁用

我知道如果禁用每個控件以響應手勢將是荒謬的,但是如果您需要從Root到Children逐字禁用所有控件,那麼在根上創建attach屬性並將這些屬性設置爲false可能是一種解決方案。

+0

我並非真的想要禁用所有元素的手勢。我試圖禁用操作系統級別的手勢。在Win8中,無論應用程序和操作系統會執行某些操作(顯示桌面,引腳到左側等),您都可以執行某些手勢。我需要捕捉/禁用這些操作系統級別的功能。因此,這與我的網頁上的控件無關(實際上,我們希望讓用戶能夠與應用中的控件進行互動)。 –

0

手勢由explorer.exe處理。 如果用您的應用程序替換Windows Shell(默認:explorer.exe),則在操作系統級別沒有更多手勢。

註冊表項:

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

關鍵: 「殼牌」(REG_SZ)= 「path_to_your_application」

你也只能做到這一點的當前用戶(HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows_NT \ CurrentVersion \ Winlogon)

+0

如果您想禁用適用於metro應用程序的手勢,那麼路徑是什麼樣子的? – Sam

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)

+0

不幸的是,在Thinkpad 10上沒有使用'Windows 8.1 with Bing'工作。你會碰到其他建議嗎? – Matyas

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; 
} 
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關閉應用程序。