Подтвердить что ты не робот

Отключить жесты жестких дисков Windows 8/горячие углы для приложений с несколькими касаниями во время работы в полноэкранном режиме

У меня есть полноэкранная игра AS3 для игр с Adobe AIR, работающая в Windows 7. В этой игре выходить нелегко (подумайте о режиме киоска, только выйдите, нажав esc и введите пароль).

Теперь я хочу, чтобы эта игра запускалась в Windows 8. Игра работает так, как ожидалось, но анонимными являются эти жесты/горячие углы (левый, верхний, правый, нижний) и ярлыки.

Я читал статьи, но никто не помог мне. Люди говорят о внесении изменений в реестр, но я не получаю эту работу + пользователь должен перезагрузить свой компьютер.

Я хочу открыть игру, отключить жесты/горячие углы, и когда игра закрывает жесты/горячие углы, нужно снова вернуться.

Я видел, как некоторые приложения делают то же самое, что я хочу выполнить.

Я нашел этот, чтобы я мог распознавать жесты. Но как игнорировать их действия?

Я также читал ASUS Smart Gestures, но это для сенсорной панели.

И я попробовал Classic Shell, но мне нужно отключить жесты/горячие углы без таких программ, просто на лету.

Я также нашел этот, но я не знаю, как это реализовать.

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

Кто-нибудь знает, как я могу это сделать? Или назовите меня в правильном направлении?

Я пробовал некоторые в С# и С++, но я знаю опытного разработчика С#/С++. Также игра выполнена в AS3, поэтому ее сложно реализовать на С#/С++.

Я работаю над Lenovo aio (все в одном) с Windows 8.

4b9b3361

Ответ 1

Я пытаюсь сделать то же самое. С++ ниже отключает жесты Win8 в каждом запущенном приложении/окне. Как упоминал JonoRR, следующий шаг будет называть его только на HWND, на который вы хотите настроить таргетинг. Если целевое приложение закрыто, затем снова открывается, жесты вернутся.

#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]));
    SetTouchDisableProperty(hWnd,true);

    _tprintf(_T("Value is %s\n"), title);

    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{   
    EnumWindows(MyEnumProc, 0);
    return 0;
}

Ответ 2

Я делаю приложение для киоска для Windows 8 с помощью С#, Я успешно отключил жестовые салфетки, убив процесс проводника когда программа запускается. Я не знаю, как это делается на С++ но в С# это так.

var explorers = Process.GetProcessesByName("explorer");
            foreach (var explorer in explorers) {
                explorer.Kill();
            }

В заключительном событии моей программы я снова запускаю процесс.

Process.Start("explorer.exe");

Прежде чем это сработает, вам, возможно, придется отредактировать свой регистр, чтобы предотвратить использование проводника после перезапуска после его уничтожения.

В regedit перейдите к

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Установите для параметра AutoRestartShell значение 0.

Ответ 3

(до тех пор, пока вы запускаете AIR, что это похоже). Вы можете использовать AIR 2.0 NativeProcess для его выполнения.

Оттуда я могу представить два решения:

  • Если в классической оболочке есть параметры командной строки, вызовите ее из своего AS3 и включите/выключите жесты.

  • Напишите приложение С++, которое вручную или вручную переключает жесты.

Если вы можете получить этот пример, работающий на С++, добавьте бит в С++ для обработки аргумента командной строки включения/выключения и вызовите С++ exe при инициализации и выходе из приложения AS3 для переключения.

У меня нет С++, установленного здесь (на работе), но похоже, что для этой функции С++ требуется только дескриптор окна вашего приложения (hWnd). Этот учебник должен быть скомпилирован и запущен, но дескриптор окна, который вы видите, будет отображаться в окне приложения С++.

Доступ к ручке флеш-окна будет несколько сложнее:

В любом случае вам нужно будет использовать имя или идентификатор процесса, чтобы идентифицировать его как процесс AS3.

Это решение также зависит от вашей возможности устанавливать на клиентском ПК вещи, отличные от приложения AIR. (например, время выполнения .NET, время выполнения С++, установщик Classic Shell)

Ответ 4

Ответ ниже основан на Dovogja блестящий ответ, но для этого используется командный файл. Таким образом, вам просто нужно запустить с помощью launch.bat

Панель презервативов Windows работает от explorer.exe. Поэтому, если ваше приложение может работать без него, вы можете взломать его, сначала отключив автозагрузку explorer.exe через (запуститесь как администратор):

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

Затем строки ниже представляют my 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"

;; after you close both the app window and the opened chrome window relaunch explorer.exe to give back the functionality to windows
explorer.exe

Я использую описанный выше подход, чтобы запустить приложение без клавиатуры без киоска. Поскольку с помощью клавиатуры вы все равно можете закрыть приложение с помощью alt + f4.