Aracılığıyla paylaş


3B uygulama başlatıcıları uygulama (Win32 uygulamaları)

Not

Bu özellik yalnızca en son Windows Insider uçuşlarını (RS5), derleme 17704 ve daha yeni sürümleri çalıştıran bilgisayarlarda kullanılabilir.

Windows Mixed Reality giriş sayfası, kullanıcıların uygulamaları başlatmadan önce indiği başlangıç noktasıdır. Varsayılan olarak, çevreleyici Win32 VR uygulamalarını ve oyunlarını başlığın dışından başlatmanız gerekir ve Windows Mixed Reality Başlat menüsündeki "Tüm uygulamalar" listesinde görünmezsiniz. Bir 3B uygulama başlatıcı uygulamak için bu makaledeki yönergeleri izlerseniz, çevreleyici Win32 VR deneyiminiz Windows Mixed Reality Başlat menüsü ve ev ortamı içinden başlatılabilir.

Bu yalnızca Steam dışında dağıtılan tam kapsamlı Win32 VR deneyimleri için geçerlidir. Steam aracılığıyla dağıtılan VR deneyimleri için SteamVR Beta Windows Mixed Reality ve en son Windows Insider RS5 uçuşlarını güncelleştirdik, böylece SteamVR başlıkları varsayılan başlatıcı kullanılarak otomatik olarak "Tüm uygulamalar" listesindeki Windows Mixed Reality Başlat menüsünde görünür. Başka bir deyişle, bu makalede açıklanan yöntem SteamVR başlıkları için gereksizdir ve SteamVR Beta işlevselliği için Windows Mixed Reality tarafından geçersiz kılınacaktır.

3B uygulama başlatıcı oluşturma işlemi

3B uygulama başlatıcı oluşturmanın üç adımı vardır:

  1. Tasarım ve kavram oluşturma
  2. Modelleme ve dışarı aktarma
  3. Uygulamanıza tümleştirme (bu makale)

Uygulamanız için başlatıcı olarak kullanılacak 3B varlıklar, uyumluluğu sağlamak için Windows Mixed Reality yazma yönergeleri kullanılarak yazılmalıdır. Bu yazma belirtimini karşılayemeyen varlıklar Windows Mixed Reality girişte işlenmez.

3B başlatıcıyı yapılandırma

Win32 uygulamaları, onlar için bir 3B uygulama başlatıcı oluşturursanız Windows Mixed Reality Başlat menüsündeki "Tüm uygulamalar" listesinde görünür. Bunu yapmak için, aşağıdaki adımları izleyerek 3B Uygulama Başlatıcı'ya başvuran bir Görsel Öğeler Bildirimi XML dosyası oluşturun:

  1. 3B Uygulama Başlatıcı varlık GLB dosyası oluşturma (Bkz. Modelleme ve dışarı aktarma).
  2. Uygulamanız için görsel öğeler bildirimi oluşturun.
    1. Aşağıdaki örnekle başlayabilirsiniz. Daha fazla ayrıntı için Görsel Öğeler Bildirimi belgelerinin tamamına bakın.
    2. Uygulamanız için Square150x150Logo ve Square70x70Logo'nu PNG/JPG/GIF ile güncelleştirin.
      • Bunlar, Windows Mixed Reality Tüm Uygulamalar listesindeki uygulamanın 2B logosu ve masaüstündeki Başlat Menüsü için kullanılır.
      • Dosya yolu, Görsel Öğeler Bildirimi'ni içeren klasörü temel alır.
      • Yine de standart mekanizmalar aracılığıyla uygulamanız için bir masaüstü Başlat Menüsü simgesi sağlamanız gerekir. Bu doğrudan yürütülebilir dosyada veya oluşturduğunuz kısayolda olabilir. Örneğin, IShellLink::SetIconLocation aracılığıyla.
      • Isteğe bağlı: MRT'nin farklı çözünürlük ölçekleri ve yüksek karşıtlık temaları için birden çok varlık boyutu sağlamasını istiyorsanız resources.pri dosyasını kullanabilirsiniz.
    3. 3B Uygulama Başlatıcınızın GLB'sini işaret etmek için MixedRealityModel Yolunu güncelleştirin
    4. Dosyayı yürütülebilir dosyanızla aynı adla ve ".VisualElementsManifest.xml" uzantısıyla kaydedin ve aynı dizine kaydedin. Örneğin, "contoso.exe" yürütülebilir dosyası için eşlik eden XML dosyası "contoso.visualelementsmanifest.xml" olarak adlandırılır.
  3. Masaüstü Windows Başlat Menüsü'ne uygulamanızın kısayolunu ekleyin. Örnek bir C++ uygulaması için aşağıdaki örniğe bakın.
    • %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs (makine) veya %APPDATA%\Microsoft\Windows\Start Menu\Programs (kullanıcı) içinde oluşturun
    • Bir güncelleştirme görsel öğelerinizin bildirimini veya bu bildirimin başvurduğunu varlıkları değiştirirse, güncelleştirici veya yükleyici, bildirimin yeniden ayrıştırılması ve önbelleğe alınmış varlıkların güncelleştirilmesi için kısayolu güncelleştirmelidir.
  4. Isteğe bağlı: Masaüstü kısayolunuz doğrudan uygulamanızın EXE'sine işaret etmiyorsa (örneğin, "myapp://" gibi özel bir protokol işleyicisi çağırırsa), Başlat Menüsü uygulamanın VisualElementsManifest.xml dosyasını otomatik olarak bulmaz. Bu sorunu çözmek için kısayol, System.AppUserModel.VisualElementsManifestHintPath () kullanarak Görsel Öğeler Bildirimi'nin dosya yolunu belirtmelidir. Bu, System.AppUserModel.ID ile aynı teknikler kullanılarak kısayolda ayarlanabilir. System.AppUserModel.ID kullanmanız gerekmez, ancak kısayolun, kullanılıyorsa uygulamanın açık Uygulama Kullanıcı Modeli Kimliği ile eşleşmesini istiyorsanız bunu yapabilirsiniz. C++ örneği için aşağıdaki örnek uygulama başlatıcı kısayolu oluşturma bölümüne bakın.

Örnek Görsel Öğeler Bildirimi

<Application xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <VisualElements
    ShowNameOnSquare150x150Logo="on"
    Square150x150Logo="YOUR_APP_LOGO_150X150.png"
    Square70x70Logo=" YOUR_APP_LOGO_70X70.png"
    ForegroundText="light"
    BackgroundColor="#000000">
    <MixedRealityModel Path="YOUR_3D_APP_LAUNCHER_ASSET.glb">
        <SpatialBoundingBox Center="0,0,0" Extents="Auto" />
    </MixedRealityModel>
  </VisualElements>
</Application>

Örnek uygulama başlatıcı kısayolu oluşturma

Aşağıdaki örnek kod, Görsel Öğeler Bildirimi XML dosyasının yolunu geçersiz kılma dahil olmak üzere C++'da nasıl kısayol oluşturabileceğinizi gösterir. Geçersiz kılmanın yalnızca, kısayolunuzun bildirimle ilişkili EXE'ye doğrudan işaret etmediği durumlarda gerekli olduğunu unutmayın (örneğin, kısayolunuz "myapp://" gibi özel bir protokol işleyicisi kullanır).

Örnek. LNK kısayolu oluşturma (C++)

#include <windows.h>
#include <propkey.h>
#include <shlobj_core.h>
#include <shlwapi.h>
#include <propvarutil.h>
#include <wrl.h>

#include <memory>

using namespace Microsoft::WRL;

#define RETURN_IF_FAILED(x) do { HRESULT hr = x; if (FAILED(hr)) { return hr; } } while(0)
#define RETURN_IF_WIN32_BOOL_FALSE(x) do { DWORD res = x; if (res == 0) { return HRESULT_FROM_WIN32(GetLastError()); } } while(0)

int wmain()
{
    RETURN_IF_FAILED(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED));

    ComPtr<IShellLink> shellLink;
    RETURN_IF_FAILED(CoCreateInstance(__uuidof(ShellLink), nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)));
    RETURN_IF_FAILED(shellLink->SetPath(L"MyLauncher://launch/app-identifier"));

    // It is also possible to use an icon file in another location. For example, "C:\Program Files (x86)\MyLauncher\assets\app-identifier.ico".
    RETURN_IF_FAILED(shellLink->SetIconLocation(L"C:\\Program Files (x86)\\MyLauncher\\apps\\app-identifier\\game.exe", 0 /*iIcon*/));

    ComPtr<IPropertyStore> propStore;
    RETURN_IF_FAILED(shellLink.As(&propStore));

    {
        // Optional: If the application has an explict Application User Model ID, then you should usually specify it in the shortcut.
        PROPVARIANT propVar;
        RETURN_IF_FAILED(InitPropVariantFromString(L"ExplicitAppUserModelID", &propVar));
        RETURN_IF_FAILED(propStore->SetValue(PKEY_AppUserModel_ID, propVar));
        PropVariantClear(&propVar);
    }

    {
        // A hint path to the manifest is only necessary if the target path of the shortcut is not a file path to the executable.
        // By convention the manifest is named <executable name>.VisualElementsManifest.xml and is in the same folder as the executable
        // (and resources.pri if applicable). Assets referenced by the manifest are relative to the folder containing the manifest.

        //
        // PropKey.h
        //
        //  Name:     System.AppUserModel.VisualElementsManifestHintPath -- PKEY_AppUserModel_VisualElementsManifestHintPath
        //  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
        //  FormatID: {9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}, 31
        //  
        //  Suggests where to look for the VisualElementsManifest for a Win32 app
        //
        // DEFINE_PROPERTYKEY(PKEY_AppUserModel_VisualElementsManifestHintPath, 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 31);
        // #define INIT_PKEY_AppUserModel_VisualElementsManifestHintPath { { 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3 }, 31 }

        PROPVARIANT propVar;
        RETURN_IF_FAILED(InitPropVariantFromString(L"C:\\Program Files (x86)\\MyLauncher\\apps\\app-identifier\\game.visualelementsmanifest.xml", &propVar));
        RETURN_IF_FAILED(propStore->SetValue(PKEY_AppUserModel_VisualElementsManifestHintPath, propVar));
        PropVariantClear(&propVar);
    }

    constexpr PCWSTR shortcutPath = L"%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\game.lnk";
    const DWORD requiredBufferLength = ExpandEnvironmentStrings(shortcutPath, nullptr, 0);
    RETURN_IF_WIN32_BOOL_FALSE(requiredBufferLength);

    const auto expandedShortcutPath = std::make_unique<wchar_t[]>(requiredBufferLength);
    RETURN_IF_WIN32_BOOL_FALSE(ExpandEnvironmentStrings(shortcutPath, expandedShortcutPath.get(), requiredBufferLength));

    ComPtr<IPersistFile> persistFile;
    RETURN_IF_FAILED(shellLink.As(&persistFile));
    RETURN_IF_FAILED(persistFile->Save(expandedShortcutPath.get(), FALSE));

    return 0;
}

Örnek. URL başlatıcı kısayolu

[{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}]
Prop31=C:\Program Files (x86)\MyLauncher\apps\app-identifier\game.visualelementsmanifest.xml
Prop5=ExplicitAppUserModelID

[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,0

[InternetShortcut]
IDList=
URL=MyLauncher://launch/app-identifier
IconFile=C:\Program Files (x86)\MyLauncher\apps\app-identifier\game.exe
IconIndex=0

Ayrıca bkz.