C# 。 regitstry编辑的Caret Width如何立即生效?

C# . How to take effect for regitstry edited Caret Width immediately?


我在注册表中找到了 Caret Width 的路径:HKEY_USERS\S-1-5-21-1217365396-2387141574-3682890637-1001\Control Panel\Desktop。值“CaretWidth”= 1。例如,
我想将其更改为 5。 但是如何让这个改变立即生效呢?
我认为需要使用 pinvoke.net 中的一些方法,但我不知道该怎么做。
你能帮帮我吗?

您可以使用 SystemParametersInfo 并传递 SPI_SETCARETWIDTH

    using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices; // Add

    namespace Caret_Changer
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            const int SPIF_UPDATEINIFILE = 0x01;
            const int SPIF_SENDCHANGE = 0x02;
            public const uint SPI_SETCARETWIDTH = 0x2007;

            [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
            public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);

            private void ChangeCaret(uint caret)
            {
                SystemParametersInfo(SPI_SETCARETWIDTH, 0, caret, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
            }

            // Start button
            private void Button1_Click(object sender, EventArgs e)
            {
                ChangeCaret(0x0000005); // New caret width
            }

            // Stop Button
            private void Button2_Click(object sender, EventArgs e)
            {
                ChangeCaret(0x0000001); // Return default width
            }
        }
    }