mirror of
https://github.com/2dust/v2rayN.git
synced 2025-04-19 21:52:25 +00:00
125 lines
No EOL
3.9 KiB
C#
125 lines
No EOL
3.9 KiB
C#
using Microsoft.Win32;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Runtime.InteropServices;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Interop;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
|
|
namespace v2rayN
|
|
{
|
|
internal static class WindowsUtils
|
|
{
|
|
/// <summary>
|
|
/// 获取剪贴板数
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static string? GetClipboardData()
|
|
{
|
|
string? strData = string.Empty;
|
|
try
|
|
{
|
|
IDataObject data = Clipboard.GetDataObject();
|
|
if (data.GetDataPresent(DataFormats.UnicodeText))
|
|
{
|
|
strData = data.GetData(DataFormats.UnicodeText)?.ToString();
|
|
}
|
|
return strData;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logging.SaveLog(ex.Message, ex);
|
|
}
|
|
return strData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 拷贝至剪贴板
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static void SetClipboardData(string strData)
|
|
{
|
|
try
|
|
{
|
|
Clipboard.SetText(strData);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
[DllImport("dwmapi.dll")]
|
|
public static extern int DwmSetWindowAttribute(IntPtr hwnd, DWMWINDOWATTRIBUTE attribute, ref int attributeValue, uint attributeSize);
|
|
|
|
public static ImageSource IconToImageSource(Icon icon)
|
|
{
|
|
return Imaging.CreateBitmapSourceFromHIcon(
|
|
icon.Handle,
|
|
new System.Windows.Int32Rect(0, 0, icon.Width, icon.Height),
|
|
BitmapSizeOptions.FromEmptyOptions());
|
|
}
|
|
|
|
public static bool IsDarkTheme()
|
|
{
|
|
using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize");
|
|
var obj = key?.GetValue("AppsUseLightTheme");
|
|
int.TryParse(obj?.ToString(), out var value);
|
|
return value == 0;
|
|
}
|
|
|
|
public static void RemoveTunDevice()
|
|
{
|
|
try
|
|
{
|
|
var sum = MD5.HashData(Encoding.UTF8.GetBytes("wintunsingbox_tun"));
|
|
var guid = new Guid(sum);
|
|
string pnputilPath = @"C:\Windows\System32\pnputil.exe";
|
|
string arg = $$""" /remove-device "SWD\Wintun\{{{guid}}}" """;
|
|
|
|
// Try to remove the device
|
|
Process proc = new()
|
|
{
|
|
StartInfo = new()
|
|
{
|
|
FileName = pnputilPath,
|
|
Arguments = arg,
|
|
RedirectStandardOutput = true,
|
|
UseShellExecute = false,
|
|
CreateNoWindow = true
|
|
}
|
|
};
|
|
|
|
proc.Start();
|
|
var output = proc.StandardOutput.ReadToEnd();
|
|
proc.WaitForExit();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public static void SetDarkBorder(Window window, bool dark)
|
|
{
|
|
// Make sure the handle is created before the window is shown
|
|
IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle();
|
|
int attribute = dark ? 1 : 0;
|
|
uint attributeSize = (uint)Marshal.SizeOf(attribute);
|
|
DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, ref attribute, attributeSize);
|
|
DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, ref attribute, attributeSize);
|
|
}
|
|
|
|
#region Windows API
|
|
|
|
[Flags]
|
|
public enum DWMWINDOWATTRIBUTE : uint
|
|
{
|
|
DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19,
|
|
DWMWA_USE_IMMERSIVE_DARK_MODE = 20,
|
|
}
|
|
|
|
#endregion Windows API
|
|
}
|
|
} |