#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
using System.Runtime.InteropServices;
using System.Text;
#endif
using UnityEngine;
namespace AibisDream.Utility
{
///
/// 打开游戏的 Steam 商店页面。
///
public static class SteamStoreUtility
{
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
private const uint AssocStrCommand = 1;
private const int S_OK = 0;
[DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int AssocQueryString(
uint flags,
uint str,
string association,
string extra,
StringBuilder output,
ref uint outputLength);
#endif
///
/// Windows 下优先使用 Steam 客户端;Steam 协议不可用时回退到网页商店。
///
public static void OpenWishlistPage()
{
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
if (IsSteamProtocolRegistered())
{
Application.OpenURL(ConstRef.SteamWishlistURL);
return;
}
#endif
Application.OpenURL(ConstRef.WishlistURL);
}
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
private static bool IsSteamProtocolRegistered()
{
try
{
uint commandLength = 0;
AssocQueryString(0, AssocStrCommand, "steam", null, null, ref commandLength);
if (commandLength == 0)
{
return false;
}
var command = new StringBuilder((int)commandLength);
var result = AssocQueryString(
0,
AssocStrCommand,
"steam",
null,
command,
ref commandLength);
return result == S_OK && command.Length > 0;
}
catch (System.Exception exception)
{
Debug.LogWarning(
$"[SteamStoreUtility] 无法检测 Steam URL Protocol,将回退到网页商店:{exception.Message}");
return false;
}
}
#endif
}
}