123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Diagnostics;
- using System.Runtime.InteropServices;
- using System.Runtime.CompilerServices;
- namespace EdgeGesture
- {
- public class EdgeGestureUtil
- {
- private static Guid DISABLE_TOUCH_SCREEN = new Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44");
- private static Guid IID_PROPERTY_STORE = new Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99");
- private static short VT_BOOL = 11;
- #region "Structures"
- [StructLayout(LayoutKind.Sequential, Pack = 4)]
- public struct PropertyKey
- {
- public PropertyKey(Guid guid, UInt32 pid)
- {
- fmtid = guid;
- this.pid = pid;
- }
- [MarshalAs(UnmanagedType.Struct)]
- public Guid fmtid;
- public uint pid;
- }
- [StructLayout(LayoutKind.Explicit)]
- public struct PropVariant
- {
- [FieldOffset(0)]
- public short vt;
- [FieldOffset(2)]
- private short wReserved1;
- [FieldOffset(4)]
- private short wReserved2;
- [FieldOffset(6)]
- private short wReserved3;
- [FieldOffset(8)]
- private sbyte cVal;
- [FieldOffset(8)]
- private byte bVal;
- [FieldOffset(8)]
- private short iVal;
- [FieldOffset(8)]
- public ushort uiVal;
- [FieldOffset(8)]
- private int lVal;
- [FieldOffset(8)]
- private uint ulVal;
- [FieldOffset(8)]
- private int intVal;
- [FieldOffset(8)]
- private uint uintVal;
- [FieldOffset(8)]
- private long hVal;
- [FieldOffset(8)]
- private long uhVal;
- [FieldOffset(8)]
- private float fltVal;
- [FieldOffset(8)]
- private double dblVal;
- [FieldOffset(8)]
- public bool boolVal;
- [FieldOffset(8)]
- private int scode;
-
- [FieldOffset(8)]
- private DateTime date;
- [FieldOffset(8)]
- private System.Runtime.InteropServices.ComTypes.FILETIME filetime;
-
-
-
-
- [FieldOffset(8)]
- private Blob blobVal;
-
- [FieldOffset(8)]
- private IntPtr pwszVal;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- private byte[] GetBlob()
- {
- byte[] Result = new byte[blobVal.Length];
- Marshal.Copy(blobVal.Data, Result, 0, Result.Length);
- return Result;
- }
-
-
-
- public object Value
- {
- get
- {
- VarEnum ve = (VarEnum)vt;
- switch (ve)
- {
- case VarEnum.VT_I1:
- return bVal;
- case VarEnum.VT_I2:
- return iVal;
- case VarEnum.VT_I4:
- return lVal;
- case VarEnum.VT_I8:
- return hVal;
- case VarEnum.VT_INT:
- return iVal;
- case VarEnum.VT_UI4:
- return ulVal;
- case VarEnum.VT_LPWSTR:
- return Marshal.PtrToStringUni(pwszVal);
- case VarEnum.VT_BLOB:
- return GetBlob();
- }
- throw new NotImplementedException("PropVariant " + ve.ToString());
- }
- }
- }
- internal struct Blob
- {
- public int Length;
- public IntPtr Data;
-
-
-
-
-
-
-
- private void FixCS0649()
- {
- Length = 0;
- Data = IntPtr.Zero;
- }
- }
- #endregion
- #region "Interfaces"
- [ComImport(), Guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- public interface IPropertyStore
- {
- [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
- void GetCount([Out(), In()] ref uint cProps);
- [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
- void GetAt([In()] uint iProp, ref PropertyKey pkey);
- [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
- void GetValue([In()] ref PropertyKey key, ref PropVariant pv);
- [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
- void SetValue([In()] ref PropertyKey key, [In()] ref PropVariant pv);
- [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
- void Commit();
- [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
- void Release();
- }
- #endregion
- #region "Methods"
- [DllImport("shell32.dll", SetLastError = true)]
- private static extern int SHGetPropertyStoreForWindow(IntPtr handle, Guid riid, ref IPropertyStore propertyStore);
- public static void EnableEdgeGestures(IntPtr hwnd, bool enable)
- {
- IPropertyStore pPropStore = null;
- int hr = 0;
- hr = SHGetPropertyStoreForWindow(hwnd, IID_PROPERTY_STORE, ref pPropStore);
- if (hr == 0)
- {
- PropertyKey propKey = new PropertyKey();
- propKey.fmtid = DISABLE_TOUCH_SCREEN;
- propKey.pid = 2;
- PropVariant var = new PropVariant();
- var.vt = VT_BOOL;
- var.boolVal = enable;
- pPropStore.SetValue(ref propKey, ref var);
- Marshal.FinalReleaseComObject(pPropStore);
- }
- }
- #endregion
- }
-
-
-
-
-
-
- }
|