TableCloth
TableCloth copied to clipboard
[제안] 샌드박스에 사용자 선호 설정 적용
제안해주시는 기능이 소프트웨어로 인해 발생한 문제 때문인가요? 그렇다면 자세히 알려주세요. 윈도우 샌드박스 안의 테마 설정이 밖의 테마 설정과 다를 때 불편합니다.
어떻게 개선한다면 좋을까요? 윈도우 바깥의 사용자 설정(라이트/다크, 고대비)을 내부 샌드박스 환경에도 적용했으면 좋겠습니다.
추가 맥락 가능하면 제가 PR을 진행하고 싶은데, 가능한지 묻고 싶습니다.
ëµ, ê²í í´ì£¼ì ì ê°ì¬í©ëë¤! ì ìê°ì¼ë¡ë 구íí ë Sporkì ì ë¬í ì¸ìì ê´ë ¨ ì¤ì ì ì¶ê°í´ì¼ íë ë¶ë¶, ê·¸ë¦¬ê³ Windowsì ì»¬ë¬ í ë§ ì¤ì ë³ê²½ í ìëë°ì¤ ë´ìì ì ì²´ì ì¼ë¡ 리íë ìíë ë¶ë¶ì 구íì´ íìí ê² ê°ìµëë¤. ìëë ì ê° íë¡í íì´íí´ë³¸ LINQPad ì¤í¬ë¦½í¸ì¸ë°, 구ííì¤ ë ì°¸ê³ íìë©´ ì¢ì ë¯ í´ì ê°ì´ ì¬ë¦½ëë¤.
<Query Kind="Program">
<Namespace>Microsoft.Win32</Namespace>
<Namespace>System.Runtime.InteropServices</Namespace>
<Namespace>System.Threading.Tasks</Namespace>
</Query>
internal static class Program
{
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern bool SendNotifyMessageW(IntPtr hWnd, uint msg, int wParam, string lParam);
[DllImport("user32.dll")]
private static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues);
private const int WM_SETTINGCHANGE = 0x1A;
private const int COLOR_DESKTOP = 1;
static int ColorToInt(int r, int g, int b)
=> (b << 16) | (g << 8) | r;
static void SetDarkMode(bool enableDarkMode)
{
var mode = enableDarkMode ? 0 : 1;
var colors = new int[] { enableDarkMode ? ColorToInt(0, 0, 0) : ColorToInt(255, 255, 255) };
// ë ì§ì¤í¸ë¦¬ ë³ê²½
try
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", true))
{
if (key != null)
{
key.SetValue("AppsUseLightTheme", mode, RegistryValueKind.DWord);
key.SetValue("SystemUsesLightTheme", mode, RegistryValueKind.DWord);
}
}
// ë³ê²½ ì¬í ì ì©
SendNotifyMessageW((IntPtr)0xFFFF, WM_SETTINGCHANGE, 0, "ImmersiveColorSet");
// ë°í íë©´ ìì ì¦ì ë³ê²½ (ë ì§ì¤í¸ë¦¬ë ìì ìí¨)
SetSysColors(1, new int[] { COLOR_DESKTOP, }, colors);
}
catch (Exception ex)
{
Console.WriteLine("Error updating registry: " + ex.Message);
}
}
static async Task Main()
{
Console.WriteLine("ë¤í¬ 모ë íì±í ì¤...");
SetDarkMode(true); // ë¤í¬ 모ë íì±í
await Task.Delay(TimeSpan.FromSeconds(5d)); // 5ì´ í ë¼ì´í¸ 모ëë¡ ë³ê²½ (í
ì¤í¸ì©)
Console.WriteLine("ë¼ì´í¸ 모ë íì±í ì¤...");
SetDarkMode(false); // ë¤í¬ 모ë í´ì
await Task.Delay(TimeSpan.FromSeconds(5d)); // 5ì´ í ë¼ì´í¸ 모ëë¡ ë³ê²½ (í
ì¤í¸ì©)
}
}