zoukankan      html  css  js  c++  java
  • 如何修改注册表立刻生效

    前两种不知什么原因,改了注册表之后,即使刷新并发送一个通知其他窗口的消息,但是依然不能立即生效,
    最后一种最简单有效,但是修改之后,只是程序运行时为程序设置的默认值,程序一旦退出就会还原。

    如设置一种文件类型的图标和默认的打开程序后怎么让设置马上生效。

    //-----------------------方法一----------------------------
    [DllImport("user32.dll", EntryPoint="SendMessage")]
    public static extern int SendMessage (
    int hwnd,
    int wMsg,
    int wParam,
    int lParam
    );

    public const int HWND_BROADCAST = 0xFFFF;
    public const int WM_SETTINGCHANGE = 0x1A;


    //修改后发送一个消息给系统
    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);

    //-----------------------方法二----------------------------
    IntPtr result1;

    // SendMessageTimeout tools
    [Flags]
    public enum SendMessageTimeoutFlags : uint
    {
    SMTO_NORMAL
    = 0x0000,
    SMTO_BLOCK
    = 0x0001,
    SMTO_ABORTIFHUNG
    = 0x0002,
    SMTO_NOTIMEOUTIFNOTHUNG
    = 0x0008
    }
    const int WM_SETTINGCHANGE = 0x001A;
    const int HWND_BROADCAST = 0xffff;

    [DllImport(
    "user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessageTimeout(
    IntPtr windowHandle,
    uint Msg,
    IntPtr wParam,
    IntPtr lParam,
    SendMessageTimeoutFlags flags,
    uint timeout,
    out IntPtr result
    );
    //调用
    SendMessageTimeout(
    new IntPtr(HWND_BROADCAST),
    WM_SETTINGCHANGE,
    IntPtr.Zero,
    IntPtr.Zero,
    SendMessageTimeoutFlags.SMTO_NORMAL,
    1000,
    out result1);

    //-----------------------方法三----------------------------
    //修改系统鼠标的双击速度,经实践,该方法可用
    const uint ULNTERVAL = 400;

    [DllImport(
    "user32")]
    public static extern bool SetDoubleClickTime(uint ulnterval);

    //调用
    SetDoubleClickTime(ULNTERVAL);
  • 相关阅读:
    C++(封装一)
    数据结构之链式栈(二)
    C++(函数重载二)
    不计算阶乘获得结果末尾0的个数
    附加产品
    刘子闻讲的高精度【太强了】
    字符串相关函数
    回文素数
    蛇形填数
    筛法模版
  • 原文地址:https://www.cnblogs.com/love2wllw/p/1684948.html
Copyright © 2011-2022 走看看