2

私は Windows 8 で作業しており、デスクトップ アプリがフルスクリーンのときにデフォルトのエッジ ジェスチャ動作を無効にしたいと考えています。

C++でそれを行う方法を説明するこのページを見つけました。

私のアプリは WPF/C# アプリケーションであり、Windows Code API PackSetWindowPropertyメソッドが必要なことがわかりました。

問題

boolean である正しいパラメータを渡す方法がわかりません:

PropertyKey キー = 新しい PropertyKey("32CE38B2-2C9A-41B1-9BC5-B3784394AA44", 2); WindowProperties.SetWindowProperty(これ、キー、「真」);

PropertyKey キー = 新しい PropertyKey("32CE38B2-2C9A-41B1-9BC5-B3784394AA44", 2); WindowProperties.SetWindowProperty(これ、キー、「-1」);

PropertyKey キー = 新しい PropertyKey("32CE38B2-2C9A-41B1-9BC5-B3784394AA44", 2); WindowProperties.SetWindowProperty(これ、キー、「VARIANT_TRUE」);

ご覧のとおり、パラメーターは文字列でなければなりませんが、誰も機能しません。

誰かがアイデアを持っている場合は、事前に感謝します!

4

3 に答える 3

0

元の署名を見ると、関数にはIntPtrハンドル、GuidID、およびPropertyStoreデータが取り込まれるオブジェクトが必要です。

HRESULT SHGetPropertyStoreForWindow(
  _In_   HWND hwnd,
  _In_   REFIID riid,
  _Out_  void **ppv
);

これを c# に翻訳すると、次のようになります。

[DllImport("shell32.dll", SetLastError = true)]
 static extern int SHGetPropertyStoreForWindow(
        IntPtr handle,
        ref Guid riid,
        out IPropertyStore propertyStore);

また、 PInvoke.netIPropertyStoreからインターフェイスを取得できます。

[ComImport, Guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface IPropertyStore
    {
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        void GetCount([Out] out uint cProps);

        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        void GetAt([In] uint iProp, out PropertyKey pkey);

        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        void GetValue([In] ref PropertyKey key, out object pv);

        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        void SetValue([In] ref PropertyKey key, [In] ref object pv);

        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        void Commit();
    }

あとは、実際に を実装するだけですPropertyStore。.net フレームワークでの同様の実装は、たとえばPrintSystemObjectにあります。

これを実装した後は、メソッドを呼び出してプロパティを設定するだけです。

IPropertyStore store = new PropertyStore(); 

//your propery id in guid
var g = new Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44");
SHGetPropertyStoreForWindow(this.Handle, ref g, out store);
于 2013-05-29T14:00:47.323 に答える
0

ブール値である正しいパラメーターを渡す方法がわかりません。ご覧のとおり、パラメーターは文字列でなければなりませんが、誰も機能しません。

、またはの文字列"1"を渡します。true"0"false

于 2016-04-29T15:37:54.337 に答える