2

Windows 8 の C# で、IMetroMode::IsLauncherVisible メソッドを pInvoke するにはどうすればよいですか?

メソッドの詳細については、http: //msdn.microsoft.com/en-us/library/windows/desktop/hh404166 (v=vs.85).aspx を参照してください。

4

2 に答える 2

4

古いIMetroModeインターフェイスの代わりにIAppVisibilityインターフェイスを使用する

サンプルコードは次のとおりです。

/* From ShObjIdl.idl
// CLSID_AppVisibility
[ uuid(7E5FE3D9-985F-4908-91F9-EE19F9FD1514)] coclass AppVisibility { interface IAppVisibility; }
 */
Type tIAppVisibility = Type.GetTypeFromCLSID(new Guid("7E5FE3D9-985F-4908-91F9-EE19F9FD1514"));
IAppVisibility appVisibility = (IAppVisibility)Activator.CreateInstance(tIAppVisibility);
bool launcherVisible;
if(HRESULT.S_OK == appVisibility.IsLauncherVisible(out launcherVisible)) {
    // Here you can use the launcherVisible flag
}

IAppVisibility インターフェイスの定義:

[ComImport, Guid("2246EA2D-CAEA-4444-A3C4-6DE827E44313"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppVisibility {
    HRESULT GetAppVisibilityOnMonitor([In] IntPtr hMonitor, [Out] out MONITOR_APP_VISIBILITY pMode);
    HRESULT IsLauncherVisible([Out] out bool pfVisible);
    HRESULT Advise([In] IAppVisibilityEvents pCallback, [Out] out int pdwCookie);
    HRESULT Unadvise([In] int dwCookie);
}
//...
public enum HRESULT : long {
    S_FALSE = 0x0001,
    S_OK = 0x0000,
    E_INVALIDARG = 0x80070057,
    E_OUTOFMEMORY = 0x8007000E
}
public enum MONITOR_APP_VISIBILITY {
    MAV_UNKNOWN = 0,         // The mode for the monitor is unknown
    MAV_NO_APP_VISIBLE = 1,
    MAV_APP_VISIBLE = 2
}
[ComImport, Guid("6584CE6B-7D82-49C2-89C9-C6BC02BA8C38"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppVisibilityEvents {
    HRESULT AppVisibilityOnMonitorChanged(
        [In] IntPtr hMonitor,
        [In] MONITOR_APP_VISIBILITY previousMode,
        [In] MONITOR_APP_VISIBILITY currentMode);

    HRESULT LauncherVisibilityChange([In] bool currentVisibleState);
}
于 2012-08-17T17:57:11.290 に答える
1

いくつかのこと:

  1. Windows 8 の RC および RTM ビルドから削除されたIMetroModeようです。
  2. WinRT 呼び出しで P/Invoke を使用しないでください。代わりに、C# プロジェクトの参照を から適切な WinMD ファイルに追加する必要がありますC:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral\。これにより、必要な WinRT 機能へのアクセスを提供する必要があるオートコンプリートを備えた相互運用サービスが提供されます。詳細については、こちらをご覧ください
于 2012-08-17T17:47:59.943 に答える