2012-09-13 7 views
6

Necesitamos en alguna de nuestras aplicaciones que necesitemos desactivar algunos de los gestos incorporados para Windows 8 para evitar que los usuarios abandonen la aplicación. (piense en la pantalla de inicio de sesión del kiosco). ¿Existen métodos para seguir permitiendo que el usuario interactúe con la aplicación utilizando el tacto, pero deshabilitando/interceptando algunos de los gestos incorporados (cosas como conectar la aplicación a la izquierda, ir al escritorio, etc.)?Hay un método para deshabilitar gestos para Windows8

Nuestra solución de copia de seguridad es deshabilitar el toque cuando se encuentran en ciertas pantallas (esto es algo que podemos hacer) pero nos gustaría tener una mejor experiencia de usuario y deshabilitar los gestos que necesitamos (similar a deshabilitar las ventanas tecla, ctrl + alt + del en lugar de todo el teclado).

Las búsquedas iniciales y la investigación no han revelado lo que estábamos buscando, por lo que estamos buscando lo incorrecto o en lugares incorrectos.

Respuesta

0

Configuración IsTapEnabled, IsDoubleTapEnabled, IsRightTapEnabled, y IsHoldingEnabled a falsa debe desactivar los gestos en el elemento de la interfaz de usuario, sino que son propiedades, no métodos. No he visto un método que deshabilite TODOS gestos para un elemento en particular.

Sé que sería ridículo desactivar cada control para responder a los gestos pero si necesita deshabilitar todos los controles literalmente de Root a Children entonces crear una propiedad adjuntar en la raíz y establecer estas propiedades en falso podría ser una solución .

+0

No estoy intentando realmente deshabilitar todos los gestos para un elemento. Estoy tratando de deshabilitar los gestos de nivel del sistema operativo. En Win8, puede realizar ciertos gestos sin importar la aplicación y el sistema operativo hará ciertas cosas (mostrar el escritorio, pin a la izquierda, etc.). Necesito atrapar/deshabilitar esas funciones de nivel del sistema operativo. Así que esto realmente no tiene nada que ver con los controles en mi página (y de hecho, nos encantaría que los usuarios interactúen tocando con los controles de la aplicación). –

0

Los gestos son manejados por explorer.exe. Si reemplaza el shell de Windows (predeterminado: explorer.exe) con su aplicación, entonces no hay más gestos en el nivel del sistema operativo.

claves de registro:

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

Clave: "Shell" (REG_SZ) = "path_to_your_application"

también se puede hacer esto sólo para el usuario actual (HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows_NT \ CurrentVersion \ Winlogon)

+0

si desea deshabilitar los gestos solo para una aplicación de metro, ¿cómo se ve la ruta? – Sam

5

Puede deshabilitar el gesto en Windows 8 Embedded. Tal vez usted puede intentar esto en Windows 8.

claves de registro:

[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. 

si quieres desactiva cada gesto, sólo tiene que añadir DWORD: 0000000f (15)

+0

Desafortunadamente no funcionó usando 'Windows 8.1 con Bing' en un Thinkpad 10. ¿Tendría alguna otra sugerencia? – Matyas

3

Para hacerlo mediante programación, puede llama a la función en el siguiente enlace. Requiere el hWnd para la ventana a la que le gustaría enfocar.

http://msdn.microsoft.com/en-us/library/windows/desktop/jj553591%28v=vs.85%29.aspx

El C++ continuación buscará una ventana con el título de la ventana "HelloWorld", y desactivar todos los gestos de Windows 8 para ello. Esto no funciona para las aplicaciones de la Tienda Windows, y la función debe ser llamada en la ventana mientras está abierta. Si la aplicación se cierra y se vuelve a abrir, los gestos volverán. Además, creo que solo funciona cuando la aplicación es a pantalla completa.

#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 charms bar es operado por explorer.exe.

Así que si su aplicación puede funcionar sin él, entonces se puede cortar alrededor de ella mediante la desactivación de la primera autorestart de explorer.exe a través de (Ejecutar como administrador):

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoRestartShell" /t REG_DWORD /d 0 

A continuación, las líneas de abajo representan mi launch.bat - el cual funciona al final como se esperaba:

;; 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 

Utilizo el método descrito anteriormente para permitir que se ejecute una aplicación de kiosco sin teclado. Porque con un teclado todavía puede cerrar la aplicación con alt + f4.

Cuestiones relacionadas