2012-09-13 16 views
6

Abbiamo bisogno di una delle nostre app in cui è necessario disabilitare alcuni dei gesti predefiniti per Windows 8 per impedire agli utenti di lasciare l'app. (pensa al chiosco accedi allo schermo). Esistono metodi per consentire ancora all'utente di interagire con l'app utilizzando il touch, ma disabilitando/intercettando alcuni dei gesti integrati (cose come l'aggancio dell'app a sinistra, il desktop, ecc.).Esiste un metodo per disattivare i gesti per Windows8

La nostra soluzione di backup è disabilitare completamente il touch quando ci si trova in determinate schermate (questo è qualcosa che possiamo fare) ma vorremmo un'esperienza utente migliore e semplicemente disabilitare i gesti di cui abbiamo assolutamente bisogno (simile alla disabilitazione delle finestre tasto, ctrl + alt + del invece dell'intera tastiera).

Le ricerche iniziali e le indagini non hanno trovato quello che stavamo cercando, quindi stiamo cercando la cosa sbagliata o nei posti sbagliati.

risposta

0

Impostazione IsTapEnabled, IsDoubleTapEnabled, IsRightTapEnabled e IsHoldingEnabled a falso dovrebbe disabilitare i gesti nell'interfaccia utente Element ma sono proprietà, non metodi. Non ho visto un metodo che disabiliti i gesti ALL per un particolare elemento.

So che sarebbe ridicolo disabilitare ciascun controllo per rispondere ai gesti, ma se è necessario disabilitare tutti i controlli letteralmente da Root to Children, quindi creare una proprietà attach sulla root e impostare queste proprietà su false potrebbe essere una soluzione .

+0

Non sto davvero cercando di disabilitare tutti i gesti per un elemento. Sto cercando di disabilitare i gesti del livello OS. In Win8, puoi eseguire determinati gesti indipendentemente dall'app e il sistema operativo eseguirà determinate operazioni (mostra desktop, pin a sinistra, ecc.). Devo intercettare/disabilitare quelle funzioni a livello di sistema operativo. Quindi questo in realtà non ha nulla a che fare con i controlli sulla mia pagina (e infatti, ci piacerebbe permettere agli utenti di interagire con il touch con i controlli nell'app). –

0

I gesti sono gestiti da explorer.exe. Se si sostituisce la shell di Windows (default: explorer.exe) con l'applicazione, non ci sono più gesti a livello di sistema operativo.

chiavi di registro:

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

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

si può anche fare questo solo per l'utente corrente (HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows_NT \ CurrentVersion \ Winlogon)

+0

se si desidera disabilitare i gesti solo per un'app Metro, come appare il percorso? – Sam

5

È possibile disattivare il gesto in Windows 8 incorporato. Forse si può provare questo in Windows 8.

chiavi di 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. 

se si vuole disabilita ogni gesto, basta aggiungere DWORD: 0000000f (15)

+0

Sfortunatamente non ha funzionato con 'Windows 8.1 con Bing' su un Thinkpad 10. avresti qualche altro suggerimento? – Matyas

3

Per farlo a livello di codice, è possibile chiama la funzione nel link sottostante. Richiede l'hWnd alla finestra che vorresti indirizzare.

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

Il C++ sotto cercherà una finestra con il titolo della finestra "HelloWorld", e disattivare tutte le 8 gesti di Windows per esso. Questo non funziona per le app di Windows Store e la funzione deve essere richiamata sulla finestra mentre è aperta. Se l'applicazione viene chiusa e riaperta, i gesti ritorneranno. Inoltre, credo che funzioni solo mentre l'applicazione è a schermo intero.

#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 è gestito da explorer.exe.

Quindi, se la vostra applicazione può essere eseguito senza che poi si può incidere intorno ad esso dal primo disabilitando l'autorestart di explorer.exe via (Esegui come amministratore):

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

Poi le linee di seguito rappresentano il mio launch.bat - che lavora alla fine come previsto:

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

io uso l'approccio delineato sopra per lasciare che un senza tastiera corsa chiosco app. Perché con una tastiera puoi ancora chiudere l'app con alt + f4.

Problemi correlati