2014-06-05 7 views
1

이것은 vs2010 MFC 대화 상자 응용 프로그램과 함께 사용됩니다. 아래의 코드 외에도 다음 libs, ehstorguids.lib Uuid.Lib을 포함하여 시도했습니다. 최종 목표는 윈도우 8 Charms Bar를 죽이는 것입니다. 이 선언되지 않은 식별자를 발생시키기 위해 나는 무엇을 놓쳤습니다.PKEY_EdgeGesture_DisableTouchWhenFullscreen 선언되지 않은 식별자

#include "stdafx.h" 
#include <windows.h> 
#include <iostream> 
#include <propsys.h> 
#include <propkey.h> 

using namespace std; 

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

void mymfcdialog::ObBnClickedOk() 
{ 
    EnumWindows(MyEnumProc, 0); 
} 

답변

1

윈도우 8 SDK는 VS 포함 어디 MSDN 당 필요한 라이브러리들에 대해 불평하지 않은 경우에도 신고가 필요합니다.

매력을 숨기기/사용 중지하는이 방법은 전체 화면 일 때 제목 표시 줄이있는 데스크톱 응용 프로그램에서만 작동합니다. 그래서 제 경우에는 이것이 효과가 없을 것입니다. 매력 막대/제스처가 필요하지 않을 때 '탐색기'프로세스를 종료 한 다음 탐색기 프로세스를 다시 실행하는 것이 유일한 옵션입니다. MS가 이것을 읽으면, 당신은 정말로 주변을 둘러 봐야합니다. 이것은 챠임/제스처를 숨기거나 무효화시킬 필요가 없습니다. 그러나 다시 Windows 8에서 Windows를보십시오 ... 나는 8.1을 의미합니다 .... 아직 제대로하지 못했습니다.

0

원본 코드가 잘못 표시되지 않습니다. 실제로이 온라인 작업 예제가 있습니다.

내가 가장 잘 찾은 것은 https://github.com/Kuqd/DisableCharmBar이며 작동 예제를 보여줍니다.

고객님의 답변에서 언급 한 창 제목 표시 줄에 관한 제한 사항은 GetWindowText 수표와 관련이 있습니다. Kuqd의 예제는 제목 표시 줄없이 작동합니다. 나는 내 코드에서 이것을 사용하고

0

, 난 당신을 도울 수 있기를 바랍니다 :

static Guid DISABLE_TOUCH_SCREEN = new Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44"), // PKEY_EdgeGesture_DisableTouchWhenFullscreen 
       IID_PROPERTY_STORE = new Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99"); // PropertyStore 
    static short VT_BOOL = 11; 
    private const int GC_ALLGESTURES = 0x00000001; 

    public static void DisableEdgeGestures(IntPtr hwnd) 
    { 
     win32.IPropertyStore pPropStore = null; 
     int hr = 0; 
     hr = win32.SHGetPropertyStoreForWindow(hwnd, ref IID_PROPERTY_STORE, out pPropStore); 
     if (hr == 0) 
     { 
      win32.PropertyKey propKey = new win32.PropertyKey(); 
      propKey.fmtid = DISABLE_TOUCH_SCREEN; 
      propKey.pid = 2; 
      win32.PropVariant var = new win32.PropVariant(); 
      var.vt = VT_BOOL; 
      var.boolVal = true; 
      pPropStore.SetValue(ref propKey, ref var); 
      System.Runtime.InteropServices.Marshal.FinalReleaseComObject(pPropStore); 
     } 
    }