2012-09-13 27 views
6

Chúng tôi có nhu cầu trong một trong các ứng dụng của chúng tôi, nơi chúng tôi cần vô hiệu hóa một số cử chỉ tích hợp cho Windows 8 để ngăn người dùng rời khỏi ứng dụng. (nghĩ màn hình đăng nhập kiosk). Có phương pháp nào vẫn cho phép người dùng tương tác với ứng dụng bằng cách chạm nhưng vô hiệu hóa/chặn một số cử chỉ tích hợp (những thứ như gắn ứng dụng ở bên trái, chuyển sang màn hình, v.v.).Có phương pháp để tắt cử chỉ cho Windows8

Giải pháp sao lưu của chúng tôi là tắt hoàn toàn khi chạm vào một số màn hình (đây là điều chúng tôi có thể làm) nhưng chúng tôi muốn có trải nghiệm người dùng tốt hơn và chỉ cần tắt các cử chỉ mà chúng tôi thực sự cần (tương tự như tắt cửa sổ phím, ctrl + alt + del thay vì toàn bộ bàn phím).

Tìm kiếm và điều tra ban đầu chưa bật lên những gì chúng tôi đang tìm kiếm để chúng tôi đang tìm kiếm điều sai hoặc ở những nơi không chính xác.

Trả lời

0

Thiết IsTapEnabled, IsDoubleTapEnabled, IsRightTapEnabledIsHoldingEnabled để sai nên vô hiệu hóa các cử chỉ trong giao diện người dùng phần tử nhưng họ là tài sản, chứ không phải phương pháp. Tôi chưa thấy phương thức nào sẽ tắt các cử chỉ TẤT CẢ cho một yếu tố cụ thể.

Tôi biết sẽ vô lý khi vô hiệu hóa từng điều khiển để phản hồi cử chỉ nhưng nếu bạn cần vô hiệu hóa tất cả các điều khiển theo nghĩa đen từ Gốc sang Trẻ em thì tạo thuộc tính đính kèm trên thư mục gốc và đặt các thuộc tính này thành false .

+0

Tôi không thực sự cố gắng vô hiệu hóa tất cả cử chỉ cho một phần tử. Tôi đang cố vô hiệu hóa các cử chỉ ở cấp hệ điều hành. Trong Win8, bạn có thể thực hiện các cử chỉ nhất định bất kể ứng dụng và hệ điều hành sẽ làm những việc nhất định (hiển thị màn hình, ghim sang trái, v.v.). Tôi cần phải bẫy/vô hiệu hóa các chức năng cấp hệ điều hành. Vì vậy, điều này thực sự không liên quan gì đến các điều khiển trên trang của tôi (và trên thực tế, chúng tôi muốn cho phép người dùng tương tác bằng cách chạm vào các điều khiển trong ứng dụng). –

0

Cử chỉ được xử lý bởi explorer.exe. Nếu bạn thay thế vỏ cửa sổ (mặc định: explorer.exe) bằng Ứng dụng của bạn, thì không có thêm cử chỉ nào ở cấp hệ điều hành.

khóa Registry:

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

chính: "Shell" (REG_SZ) = "path_to_your_application"

bạn cũng có thể làm được điều này chỉ dành cho người dùng hiện tại (HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows_NT \ CurrentVersion \ Winlogon)

+0

nếu bạn muốn tắt các cử chỉ chỉ dành cho ứng dụng tàu điện ngầm, đường dẫn trông như thế nào? – Sam

5

Bạn có thể tắt cử chỉ trong Windows 8 được nhúng. Có lẽ bạn có thể thử điều này trong Windows 8.

Registry Keys:

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

nếu bạn muốn vô hiệu hóa từng cử chỉ, chỉ cần thêm dword: 0000000f (15)

+0

Thật không may đã không hoạt động bằng cách sử dụng 'Windows 8.1 với Bing' trên Thinkpad 10. bạn sẽ có bất kỳ đề xuất nào khác không? – Matyas

3

Để làm điều đó theo chương trình, bạn có thể gọi hàm trong liên kết bên dưới. Nó yêu cầu hWnd đến cửa sổ bạn muốn nhắm mục tiêu.

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

C++ dưới đây sẽ tìm kiếm một cửa sổ với các tiêu đề cửa sổ "helloworld", và vô hiệu hóa tất cả các cử chỉ 8 Windows cho nó. Điều này không hoạt động đối với các ứng dụng Windows Store và chức năng này phải được gọi trên cửa sổ khi nó đang mở. Nếu ứng dụng được đóng và mở lại, cử chỉ sẽ trở lại. Ngoài ra, tôi tin rằng nó chỉ hoạt động trong khi ứng dụng là toàn màn hình.

#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; 
} 
0

Ít nhất trong 8.1, dường như có một tính năng gọi là truy cập được giao:

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

Settings> Change PC Settings> Accounts> Tài khoản khác> Thiết lập một tài khoản cho quyền truy cập được chỉ định

+0

Rất tiếc, tính năng này chỉ hoạt động đối với ứng dụng Giao diện người dùng Metru. – Matyas

1

Thanh thu hút Windows được điều hành bởi explorer.exe.

Vì vậy, nếu ứng dụng của bạn có thể chạy mà không có nó thì bạn có thể hack xung quanh nó bằng cách đầu tiên vô hiệu hóa autorestart của explorer.exe qua (run as administrator):

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

Sau đó, các dòng dưới đây đại diện của tôi launch.bat - mà hoạt động cuối cùng như mong đợi:

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

Tôi sử dụng cách tiếp cận được nêu ở trên để cho phép ứng dụng kiosk không bàn phím chạy. Vì với bàn phím, bạn vẫn có thể đóng ứng dụng với alt + f4.

Các vấn đề liên quan