diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Resx/ResxGenerator.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Resx/ResxGenerator.cs index fe446d27..17979d76 100644 --- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Resx/ResxGenerator.cs +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Resx/ResxGenerator.cs @@ -314,12 +314,6 @@ public sealed class ResxGenerator : IIncrementalGenerator string callParams = string.Join(", ", Enumerable.Range(0, args + 1).Select(arg => "arg" + arg.ToString(CultureInfo.InvariantCulture))); sb.AppendLine($$""" - /// {{comment}} - public static string Format{{ToCSharpNameIdentifier(entry.Name!)}}(global::System.Globalization.CultureInfo? provider, {{inParams}}) - { - return GetString(provider, "{{entry.Name}}", {{callParams}})!; - } - /// {{comment}} public static string Format{{ToCSharpNameIdentifier(entry.Name!)}}({{inParams}}) { diff --git a/src/Snap.Hutao/Snap.Hutao.Win32/NativeMethods.txt b/src/Snap.Hutao/Snap.Hutao.Win32/NativeMethods.txt index 3a06f23a..88a7812e 100644 --- a/src/Snap.Hutao/Snap.Hutao.Win32/NativeMethods.txt +++ b/src/Snap.Hutao/Snap.Hutao.Win32/NativeMethods.txt @@ -28,6 +28,7 @@ WaitForSingleObject WriteProcessMemory // OLE32 +CoCreateInstance CoWaitForMultipleObjects // USER32 diff --git a/src/Snap.Hutao/Snap.Hutao.Win32/PInvoke.cs b/src/Snap.Hutao/Snap.Hutao.Win32/PInvoke.cs new file mode 100644 index 00000000..e5ae3614 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao.Win32/PInvoke.cs @@ -0,0 +1,18 @@ +using System; +using Windows.Win32.Foundation; +using Windows.Win32.System.Com; + +namespace Windows.Win32; + +internal static partial class PInvoke +{ + /// + internal static unsafe HRESULT CoCreateInstance(object? pUnkOuter, CLSCTX dwClsContext, out TInterface ppv) +where TInterface : class + + { + HRESULT hr = CoCreateInstance(typeof(TClass).GUID, pUnkOuter, dwClsContext, typeof(TInterface).GUID, out object o); + ppv = (TInterface)o; + return hr; + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao.Win32/WinRTCustomMarshaler.cs b/src/Snap.Hutao/Snap.Hutao.Win32/WinRTCustomMarshaler.cs index 12f4d9bc..72e1e2c3 100644 --- a/src/Snap.Hutao/Snap.Hutao.Win32/WinRTCustomMarshaler.cs +++ b/src/Snap.Hutao/Snap.Hutao.Win32/WinRTCustomMarshaler.cs @@ -69,4 +69,4 @@ internal class WinRTCustomMarshaler : ICustomMarshaler return Marshal.GetObjectForIUnknown(pNativeData); } } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs index c91d536b..5a709cb0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs @@ -55,6 +55,9 @@ internal static class DependencyInjection CultureInfo.CurrentCulture = cultureInfo; CultureInfo.CurrentUICulture = cultureInfo; + ApplicationLanguages.PrimaryLanguageOverride = cultureInfo.Name; + + SH.Culture = cultureInfo; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs b/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs index 051aed33..1172d6d7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs @@ -2,11 +2,14 @@ // Licensed under the MIT license. using System.IO; +using System.Runtime.InteropServices; using Windows.Storage; using Windows.Win32; +using Windows.Win32.Foundation; using Windows.Win32.System.Com; using Windows.Win32.UI.Shell; using Windows.Win32.UI.WindowsAndMessaging; +using static Windows.Win32.PInvoke; namespace Snap.Hutao.Core.Shell; @@ -37,16 +40,17 @@ internal sealed partial class ShellLinkInterop : IShellLinkInterop return false; } - IShellLinkW shellLink = (IShellLinkW)new ShellLink(); + HRESULT result = CoCreateInstance(null, CLSCTX.CLSCTX_INPROC_SERVER, out IShellLinkW shellLink); + Marshal.ThrowExceptionForHR(result); + shellLink.SetPath("powershell"); shellLink.SetArguments($""" -Command "Start-Process shell:AppsFolder\{runtimeOptions.FamilyName}!App -verb runas" """); shellLink.SetShowCmd(SHOW_WINDOW_CMD.SW_SHOWMINNOACTIVE); - shellLink.SetIconLocation(targetLogoPath, 0); string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - string target = Path.Combine(desktop, $"{SH.AppNameAndVersion.Format(runtimeOptions.Version)}.lnk"); + string target = Path.Combine(desktop, $"{SH.FormatAppNameAndVersion(runtimeOptions.Version)}.lnk"); IPersistFile persistFile = (IPersistFile)shellLink; try diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs index f2c8192e..66eb91d0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs @@ -98,7 +98,7 @@ internal sealed partial class MetadataService : IMetadataService, IMetadataServi else { int code = (int)(ex.StatusCode ?? 0); - infoBarService.Error(SH.FormatServiceMetadataHttpRequestFailed(CultureInfo.CurrentCulture, code)); + infoBarService.Error(SH.FormatServiceMetadataHttpRequestFailed(code)); } return false;