{"id":144,"date":"2026-02-10T01:10:36","date_gmt":"2026-02-09T17:10:36","guid":{"rendered":"https:\/\/cilici.cn\/?p=144"},"modified":"2026-02-10T01:10:37","modified_gmt":"2026-02-09T17:10:37","slug":"%e5%8a%a9%e6%89%8b","status":"publish","type":"post","link":"https:\/\/cilici.cn\/index.php\/2026\/02\/10\/%e5%8a%a9%e6%89%8b\/","title":{"rendered":"\u52a9\u624b"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>using System;\nusing System.IO;\nusing System.Windows;\nusing System.Drawing;\nusing System.Windows.Forms;\nusing Microsoft.Win32;\nusing System.Diagnostics;\nusing Application = System.Windows.Application;\nusing MessageBox = System.Windows.MessageBox;\n\nnamespace VoiceAssistantBall\n{\n    public partial class App : Application\n    {\n        private NotifyIcon _notifyIcon;\n        private bool _isExiting = false;\n        private ToolStripMenuItem _startupMenuItem;\n\n        private void Application_Startup(object sender, StartupEventArgs e)\n        {\n            CreateTrayIcon();\n            UpdateStartupMenuItemState();\n        }\n\n        private void CreateTrayIcon()\n        {\n            try\n            {\n                _notifyIcon = new NotifyIcon\n                {\n                    Icon = GetTrayIcon(),\n                    Text = \"\u8bed\u97f3\u52a9\u624b - \u53cc\u51fb\u663e\u793a\/\u9690\u85cf\uff0c\u53f3\u952e\u83dc\u5355\",\n                    Visible = true\n                };\n\n                _notifyIcon.DoubleClick += (sender, e) =>\n                {\n                    ToggleMainWindowVisibility();\n                };\n\n                CreateTrayContextMenu();\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show($\"\u521b\u5efa\u7cfb\u7edf\u6258\u76d8\u5931\u8d25: {ex.Message}\", \"\u9519\u8bef\", \n                    MessageBoxButton.OK, MessageBoxImage.Warning);\n            }\n        }\n\n        private Icon GetTrayIcon()\n        {\n            try\n            {\n                string appPath = System.Reflection.Assembly.GetEntryAssembly().Location;\n                string iconPath = Path.Combine(Path.GetDirectoryName(appPath), \"Resources\", \"app.ico\");\n                \n                if (File.Exists(iconPath))\n                {\n                    return new Icon(iconPath);\n                }\n                \n                using (Bitmap bmp = new Bitmap(16, 16))\n                {\n                    using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp))\n                    {\n                        g.Clear(System.Drawing.Color.Transparent);\n                        g.FillEllipse(System.Drawing.Brushes.DodgerBlue, 0, 0, 15, 15);\n                        g.DrawEllipse(new System.Drawing.Pen(System.Drawing.Color.White, 2), 0, 0, 15, 15);\n                    }\n                    return Icon.FromHandle(bmp.GetHicon());\n                }\n            }\n            catch\n            {\n                return System.Drawing.SystemIcons.Application;\n            }\n        }\n\n        private void CreateTrayContextMenu()\n        {\n            if (_notifyIcon == null) return;\n\n            ContextMenuStrip contextMenu = new ContextMenuStrip();\n            \n            ToolStripMenuItem showHideItem = new ToolStripMenuItem(\"\u663e\u793a\/\u9690\u85cf\u4e3b\u7a97\u53e3\");\n            showHideItem.Click += (sender, e) => ToggleMainWindowVisibility();\n            contextMenu.Items.Add(showHideItem);\n            \n            contextMenu.Items.Add(new ToolStripSeparator());\n            \n            _startupMenuItem = new ToolStripMenuItem(\"\u5f00\u673a\u81ea\u542f\");\n            _startupMenuItem.CheckOnClick = true;\n            _startupMenuItem.Click += (sender, e) => ToggleStartup();\n            contextMenu.Items.Add(_startupMenuItem);\n            \n            contextMenu.Items.Add(new ToolStripSeparator());\n            \n            ToolStripMenuItem exitItem = new ToolStripMenuItem(\"\u9000\u51fa\");\n            exitItem.Click += (sender, e) => ShutdownApplication();\n            contextMenu.Items.Add(exitItem);\n            \n            _notifyIcon.ContextMenuStrip = contextMenu;\n        }\n\n        private void ToggleMainWindowVisibility()\n        {\n            MainWindow mainWindow = Application.Current.MainWindow as MainWindow;\n            if (mainWindow == null) return;\n            \n            if (mainWindow.Visibility == Visibility.Visible)\n            {\n                mainWindow.Hide();\n                ShowNotification(\"\u8bed\u97f3\u52a9\u624b\u5df2\u9690\u85cf\u5230\u6258\u76d8\", \"\u63d0\u793a\", ToolTipIcon.Info);\n            }\n            else\n            {\n                mainWindow.Show();\n                mainWindow.WindowState = WindowState.Normal;\n                mainWindow.Activate();\n            }\n        }\n\n        private void ToggleStartup()\n        {\n            try\n            {\n                if (_startupMenuItem == null) return;\n\n                bool currentState = IsStartupEnabled();\n                bool newState = !currentState;\n                \n                SetStartup(newState);\n                \n                _startupMenuItem.Checked = newState;\n                \n                string message = newState ? \"\u5df2\u542f\u7528\u5f00\u673a\u81ea\u542f\" : \"\u5df2\u7981\u7528\u5f00\u673a\u81ea\u542f\";\n                ShowNotification(message, \"\u8bbe\u7f6e\", ToolTipIcon.Info);\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show($\"\u8bbe\u7f6e\u5f00\u673a\u81ea\u542f\u5931\u8d25: {ex.Message}\\n\\n\u8bf7\u5c1d\u8bd5\u4ee5\u7ba1\u7406\u5458\u6743\u9650\u8fd0\u884c\u7a0b\u5e8f\u3002\", \n                    \"\u9519\u8bef\", MessageBoxButton.OK, MessageBoxImage.Error);\n                \n                if (_startupMenuItem != null)\n                {\n                    _startupMenuItem.Checked = IsStartupEnabled();\n                }\n            }\n        }\n\n        private bool IsStartupEnabled()\n        {\n            try\n            {\n                string appName = \"VoiceAssistantBall\";\n                using (RegistryKey key = Registry.CurrentUser.OpenSubKey(\n                    \"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\", false))\n                {\n                    if (key == null) return false;\n                    return key.GetValue(appName) != null;\n                }\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine($\"\u68c0\u67e5\u5f00\u673a\u81ea\u542f\u72b6\u6001\u5931\u8d25: {ex.Message}\");\n                return false;\n            }\n        }\n\n        private void SetStartup(bool enable)\n        {\n            try\n            {\n                string appName = \"VoiceAssistantBall\";\n                string appPath = Process.GetCurrentProcess().MainModule.FileName;\n                \n                using (RegistryKey key = Registry.CurrentUser.OpenSubKey(\n                    \"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\", true))\n                {\n                    if (key == null)\n                    {\n                        throw new Exception(\"\u65e0\u6cd5\u8bbf\u95ee\u6ce8\u518c\u8868\uff0c\u8bf7\u4ee5\u7ba1\u7406\u5458\u6743\u9650\u8fd0\u884c\");\n                    }\n                    \n                    if (enable)\n                    {\n                        key.SetValue(appName, \"\\\"\" + appPath + \"\\\"\");\n                    }\n                    else\n                    {\n                        key.DeleteValue(appName, false);\n                    }\n                }\n            }\n            catch (UnauthorizedAccessException)\n            {\n                throw new Exception(\"\u6743\u9650\u4e0d\u8db3\uff0c\u8bf7\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u8fd0\u884c\u7a0b\u5e8f\");\n            }\n            catch (Exception ex)\n            {\n                throw new Exception($\"\u6ce8\u518c\u8868\u64cd\u4f5c\u5931\u8d25: {ex.Message}\");\n            }\n        }\n\n        private void UpdateStartupMenuItemState()\n        {\n            if (_startupMenuItem != null)\n            {\n                bool isEnabled = IsStartupEnabled();\n                _startupMenuItem.Checked = isEnabled;\n            }\n        }\n\n        public void OnMainWindowClosing(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            if (!_isExiting &amp;&amp; sender is Window window)\n            {\n                e.Cancel = true;\n                window.Hide();\n                \n                if (_notifyIcon != null)\n                {\n                    _notifyIcon.ShowBalloonTip(1000, \"\u8bed\u97f3\u52a9\u624b\", \"\u5df2\u6700\u5c0f\u5316\u5230\u7cfb\u7edf\u6258\u76d8\", ToolTipIcon.Info);\n                }\n            }\n        }\n\n        private void ShowNotification(string message, string title, ToolTipIcon icon)\n        {\n            if (_notifyIcon != null)\n            {\n                _notifyIcon.ShowBalloonTip(3000, title, message, icon);\n            }\n        }\n\n        private void ShutdownApplication()\n        {\n            _isExiting = true;\n            \n            if (_notifyIcon != null)\n            {\n                _notifyIcon.Visible = false;\n                _notifyIcon.Dispose();\n            }\n            \n            Application.Current.Shutdown();\n        }\n\n        private void Application_Exit(object sender, ExitEventArgs e)\n        {\n            if (_notifyIcon != null)\n            {\n                _notifyIcon.Visible = false;\n                _notifyIcon.Dispose();\n            }\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;Window x:Class=\"VoiceAssistantBall.MainWindow\"\n        xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"\n        xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"\n        Title=\"VoiceAssistantBall\"\n        Height=\"60\"\n        Width=\"60\"\n        WindowStyle=\"None\"\n        AllowsTransparency=\"True\"\n        Background=\"Transparent\"\n        Topmost=\"True\"\n        ShowInTaskbar=\"False\"\n        Top=\"100\"\n        Left=\"100\"\n        MouseDown=\"Window_MouseDown\"\n        MouseMove=\"Window_MouseMove\"\n        MouseUp=\"Window_MouseUp\"\n        MouseDoubleClick=\"Window_MouseDoubleClick\"\n        Closing=\"Window_Closing\">\n    \n    &lt;Window.Resources>\n        &lt;Storyboard x:Key=\"ListeningAnimation\" RepeatBehavior=\"Forever\">\n            &lt;DoubleAnimation\n                Storyboard.TargetName=\"ListeningRing\"\n                Storyboard.TargetProperty=\"Opacity\"\n                From=\"0.8\" To=\"0\" Duration=\"0:0:1\"\n                AutoReverse=\"True\"\/>\n            &lt;DoubleAnimation\n                Storyboard.TargetName=\"ListeningRing\"\n                Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\"\n                From=\"1\" To=\"1.5\" Duration=\"0:0:1\"\n                AutoReverse=\"True\"\/>\n            &lt;DoubleAnimation\n                Storyboard.TargetName=\"ListeningRing\"\n                Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\"\n                From=\"1\" To=\"1.5\" Duration=\"0:0:1\"\n                AutoReverse=\"True\"\/>\n        &lt;\/Storyboard>\n    &lt;\/Window.Resources>\n    \n    &lt;Grid>\n        &lt;Ellipse Name=\"MainEllipse\" \n                 Width=\"50\" \n                 Height=\"50\" \n                 Stroke=\"#FF0066CC\" \n                 StrokeThickness=\"2\"\n                 ToolTip=\"\u8bed\u97f3\u52a9\u624b\u60ac\u6d6e\u7403 - \u62d6\u52a8\u53ef\u79fb\u52a8\uff0c\u53cc\u51fb\u5f00\u59cb\u76d1\u542c\"\n                 RenderTransformOrigin=\"0.5,0.5\">\n            &lt;Ellipse.RenderTransform>\n                &lt;ScaleTransform ScaleX=\"1\" ScaleY=\"1\"\/>\n            &lt;\/Ellipse.RenderTransform>\n            &lt;Ellipse.Fill>\n                &lt;RadialGradientBrush GradientOrigin=\"0.3,0.3\" Center=\"0.5,0.5\" RadiusX=\"0.5\" RadiusY=\"0.5\">\n                    &lt;GradientStop Color=\"#FF66B3FF\" Offset=\"0\"\/>\n                    &lt;GradientStop Color=\"#FF0066CC\" Offset=\"1\"\/>\n                &lt;\/RadialGradientBrush>\n            &lt;\/Ellipse.Fill>\n        &lt;\/Ellipse>\n        \n        &lt;Viewbox Width=\"24\" Height=\"24\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\">\n            &lt;Canvas>\n                &lt;Path Data=\"M12,2A3,3 0 0,1 15,5V11A3,3 0 0,1 12,14A3,3 0 0,1 9,11V5A3,3 0 0,1 12,2M19,11C19,14.53 16.39,17.44 13,17.93V21H11V17.93C7.61,17.44 5,14.53 5,11H7A5,5 0 0,0 12,16A5,5 0 0,0 17,11H19Z\"\n                      Fill=\"White\" \n                      Stretch=\"Uniform\"\/>\n            &lt;\/Canvas>\n        &lt;\/Viewbox>\n        \n        &lt;Ellipse Name=\"ListeningRing\" \n                 Width=\"60\" \n                 Height=\"60\" \n                 Stroke=\"#FFFF6B6B\" \n                 StrokeThickness=\"3\" \n                 Opacity=\"0\" \n                 Visibility=\"Collapsed\"\n                 RenderTransformOrigin=\"0.5,0.5\">\n            &lt;Ellipse.RenderTransform>\n                &lt;ScaleTransform ScaleX=\"1\" ScaleY=\"1\"\/>\n            &lt;\/Ellipse.RenderTransform>\n        &lt;\/Ellipse>\n        \n        &lt;TextBlock Name=\"StatusText\" \n                   Text=\"\u5c31\u7eea\" \n                   Foreground=\"White\" \n                   FontSize=\"9\" \n                   HorizontalAlignment=\"Center\" \n                   VerticalAlignment=\"Bottom\"\n                   Margin=\"0,0,0,2\"\n                   Visibility=\"Hidden\"\/>\n    &lt;\/Grid>\n&lt;\/Window>\n\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing System.Runtime.InteropServices;\nusing System.Windows.Interop;\nusing System.Diagnostics;\nusing System.Windows.Threading;\n\nnamespace VoiceAssistantBall\n{\n    public partial class MainWindow : Window\n    {\n        private const int WM_NCLBUTTONDOWN = 0xA1;\n        private const int HT_CAPTION = 0x2;\n        \n        &#91;DllImport(\"user32.dll\")]\n        private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);\n        \n        &#91;DllImport(\"user32.dll\")]\n        private static extern bool ReleaseCapture();\n        \n        private Point _dragStartPoint;\n        private bool _isDragging = false;\n        private bool _isListening = false;\n        private DateTime _lastClickTime = DateTime.MinValue;\n        private const int DoubleClickThreshold = 300;\n        \n        public MainWindow()\n        {\n            InitializeComponent();\n            \n            Loaded += (s, e) => InitializeWindow();\n        }\n        \n        private void InitializeWindow()\n        {\n            Topmost = true;\n            UpdateStatus(\"\u5c31\u7eea\");\n        }\n        \n        private void Window_MouseDown(object sender, MouseButtonEventArgs e)\n        {\n            if (e.ChangedButton == MouseButton.Left)\n            {\n                TimeSpan timeSinceLastClick = DateTime.Now - _lastClickTime;\n                if (timeSinceLastClick.TotalMilliseconds &lt; DoubleClickThreshold)\n                {\n                    HandleDoubleClick();\n                    _lastClickTime = DateTime.MinValue;\n                    return;\n                }\n                \n                _lastClickTime = DateTime.Now;\n                \n                _dragStartPoint = e.GetPosition(this);\n                _isDragging = true;\n                \n                CaptureMouse();\n                \n                ReleaseCapture();\n                SendMessage(new WindowInteropHelper(this).Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);\n            }\n            else if (e.ChangedButton == MouseButton.Right)\n            {\n                ShowRightClickMenu(e.GetPosition(this));\n            }\n            else if (e.ChangedButton == MouseButton.Middle)\n            {\n                TestOpenNotepad();\n            }\n        }\n        \n        private void Window_MouseMove(object sender, MouseEventArgs e)\n        {\n            if (_isDragging &amp;&amp; e.LeftButton == MouseButtonState.Pressed)\n            {\n                Point currentPosition = e.GetPosition(this);\n                Vector offset = currentPosition - _dragStartPoint;\n                \n                Left += offset.X;\n                Top += offset.Y;\n            }\n        }\n        \n        private void Window_MouseUp(object sender, MouseButtonEventArgs e)\n        {\n            if (e.ChangedButton == MouseButton.Left &amp;&amp; _isDragging)\n            {\n                _isDragging = false;\n                ReleaseMouseCapture();\n                \n                UpdateStatus(\"\u4f4d\u7f6e\u5df2\u66f4\u65b0\");\n                ClearStatusAfterDelay(2000);\n            }\n        }\n        \n        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            if (Application.Current is App app)\n            {\n                app.OnMainWindowClosing(this, e);\n            }\n        }\n        \n        private void UpdateStatus(string status)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                StatusText.Text = status;\n                StatusText.Visibility = string.IsNullOrEmpty(status) ? \n                    Visibility.Hidden : Visibility.Visible;\n            });\n        }\n        \n        private void ClearStatusAfterDelay(int milliseconds)\n        {\n            DispatcherTimer timer = new DispatcherTimer\n            {\n                Interval = TimeSpan.FromMilliseconds(milliseconds)\n            };\n            timer.Tick += (s, e) =>\n            {\n                UpdateStatus(\"\");\n                timer.Stop();\n            };\n            timer.Start();\n        }\n        \n        private void ShowRightClickMenu(Point position)\n        {\n            UpdateStatus(\"\u53f3\u952e\u70b9\u51fb\");\n            ClearStatusAfterDelay(1500);\n        }\n        \n        private void TestOpenNotepad()\n        {\n            try\n            {\n                Process.Start(\"notepad.exe\");\n                UpdateStatus(\"\u5df2\u6253\u5f00\u8bb0\u4e8b\u672c\");\n                ClearStatusAfterDelay(2000);\n                \n                ChangeBallColor(Colors.LightGreen);\n                DispatcherTimer timer = new DispatcherTimer\n                {\n                    Interval = TimeSpan.FromSeconds(1)\n                };\n                timer.Tick += (s, e) =>\n                {\n                    ResetBallColor();\n                    timer.Stop();\n                };\n                timer.Start();\n            }\n            catch (Exception ex)\n            {\n                UpdateStatus($\"\u9519\u8bef: {ex.Message}\");\n                ClearStatusAfterDelay(3000);\n            }\n        }\n        \n        private void ChangeBallColor(Color color)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                RadialGradientBrush brush = new RadialGradientBrush\n                {\n                    GradientOrigin = new Point(0.3, 0.3),\n                    Center = new Point(0.5, 0.5),\n                    RadiusX = 0.5,\n                    RadiusY = 0.5\n                };\n                \n                brush.GradientStops.Add(new GradientStop(color, 0));\n                brush.GradientStops.Add(new GradientStop(\n                    Color.FromArgb(color.A, \n                        (byte)(color.R * 0.7), \n                        (byte)(color.G * 0.7), \n                        (byte)(color.B * 0.7)), 1));\n                \n                MainEllipse.Fill = brush;\n            });\n        }\n        \n        private void ResetBallColor()\n        {\n            Dispatcher.Invoke(() =>\n            {\n                RadialGradientBrush brush = new RadialGradientBrush\n                {\n                    GradientOrigin = new Point(0.3, 0.3),\n                    Center = new Point(0.5, 0.5),\n                    RadiusX = 0.5,\n                    RadiusY = 0.5\n                };\n                \n                brush.GradientStops.Add(new GradientStop(Color.FromRgb(102, 179, 255), 0));\n                brush.GradientStops.Add(new GradientStop(Color.FromRgb(0, 102, 204), 1));\n                \n                MainEllipse.Fill = brush;\n            });\n        }\n        \n        private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e)\n        {\n            if (e.ChangedButton == MouseButton.Left)\n            {\n                HandleDoubleClick();\n            }\n        }\n        \n        private void HandleDoubleClick()\n        {\n            if (!_isListening)\n            {\n                StartListening();\n            }\n            else\n            {\n                StopListening();\n            }\n        }\n        \n        private void StartListening()\n        {\n            _isListening = true;\n            UpdateStatus(\"\u76d1\u542c\u4e2d...\");\n            \n            StartListeningAnimation();\n            ChangeBallColor(Colors.Orange);\n        }\n        \n        private void StopListening()\n        {\n            _isListening = false;\n            UpdateStatus(\"\u5904\u7406\u4e2d...\");\n            \n            StopListeningAnimation();\n            ResetBallColor();\n            \n            DispatcherTimer timer = new DispatcherTimer\n            {\n                Interval = TimeSpan.FromSeconds(2)\n            };\n            timer.Tick += (s, e) =>\n            {\n                UpdateStatus(\"\u5c31\u7eea\");\n                timer.Stop();\n            };\n            timer.Start();\n        }\n        \n        private void StartListeningAnimation()\n        {\n            Dispatcher.Invoke(() =>\n            {\n                ListeningRing.Visibility = Visibility.Visible;\n                \n                Storyboard listeningAnimation = FindResource(\"ListeningAnimation\") as Storyboard;\n                if (listeningAnimation != null)\n                {\n                    listeningAnimation.Begin(ListeningRing, true);\n                }\n            });\n        }\n        \n        private void StopListeningAnimation()\n        {\n            Dispatcher.Invoke(() =>\n            {\n                Storyboard listeningAnimation = FindResource(\"ListeningAnimation\") as Storyboard;\n                if (listeningAnimation != null)\n                {\n                    listeningAnimation.Stop(ListeningRing);\n                }\n                \n                ListeningRing.Visibility = Visibility.Collapsed;\n                ListeningRing.Opacity = 0;\n                ListeningRing.RenderTransform = new ScaleTransform(1, 1);\n            });\n        }\n    }\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-144","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/posts\/144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/comments?post=144"}],"version-history":[{"count":2,"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/posts\/144\/revisions"}],"predecessor-version":[{"id":146,"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/posts\/144\/revisions\/146"}],"wp:attachment":[{"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/media?parent=144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/categories?post=144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cilici.cn\/index.php\/wp-json\/wp\/v2\/tags?post=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}