zoukankan      html  css  js  c++  java
  • 设置注册表项,如何不重启立即生效

    某些windows设置的时候,我们如果通过代码设置的时候,通常是修改一些注册表项,可是每次都不是立即生效,查了半天发现原来还需要调一个api通知所有窗体,经测试好使,代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    namespace restrict
    {
    public partial class Form1 : Form
    {
    int delflag = 1;
    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
    );
    public Form1()
    {
    InitializeComponent();
    
    
    RegistryKey hkcu = Registry.CurrentUser;
    RegistryKey cu = hkcu.CreateSubKey(@"Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/RestrictRun");
    RegistryKey cu1 = hkcu.CreateSubKey(@"SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/Policies/Explorer");
    RegistryKey cu2 = hkcu.OpenSubKey(@"SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/RUN", true);
    string aa = Application.ExecutablePath;
    cu2.SetValue("RestrictFun", aa);
    
    cu1.SetValue("RestrictRun", 1);
    cu.SetValue("1", "notepad.exe");
    cu.SetValue("2", "gpedit.msc");
    cu.SetValue("3", "regedit.exe");
    cu.SetValue("4", "tmshell.exe");
    cu.SetValue("5", "kav.exe");
    cu.SetValue("6", "TTraveler.exe");
    cu.SetValue("7", "iexplore.exe");
    cu.SetValue("8", "mmc.exe");
    cu.SetValue("9", "restrict.exe");
    hkcu.Close();
    SendMessageTimeout(
    new IntPtr(HWND_BROADCAST), 
    WM_SETTINGCHANGE, 
    IntPtr.Zero, 
    IntPtr.Zero,
    SendMessageTimeoutFlags.SMTO_NORMAL,
    1000,
    out result1);
    
    }
    
    
    public void delres()
    {
    RegistryKey hkcu = Registry.CurrentUser;
    RegistryKey cu = hkcu.OpenSubKey(@"SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/Policies/Explorer", true);
    cu.DeleteValue("RestrictRun");
    cu.DeleteSubKey("RestrictRun");
    hkcu.Close();
    
    SendMessageTimeout(
    new IntPtr(HWND_BROADCAST),
    WM_SETTINGCHANGE,
    IntPtr.Zero,
    IntPtr.Zero,
    SendMessageTimeoutFlags.SMTO_NORMAL,
    1000,
    out result1);
    delflag = 0;
    }
    
    private void timer1_Tick(object sender, EventArgs e)
    {
    
    if ((DateTime.Now.Hour >= 12)&&(DateTime.Now.Hour <= 14)&&(delflag==1)) 
    {
    
    delres();
    
    }
    }
    }
    }
    

      

  • 相关阅读:
    Html5 Canvas一个简单的画笔例子
    DrawTool画笔之图形笔
    DrawTool画笔之纹理笔
    DrawTool多重笔之前奏 => 通过InkAnalyzer实现图形识别
    分布式系统阅读清单
    多点触摸画板(MultiTouchCanvas)
    基于 abp vNext 微服务开发的敏捷应用构建平台
    基于 abp vNext 微服务开发的敏捷应用构建平台
    基于 abp vNext 微服务开发的敏捷应用构建平台
    基于 abp vNext 微服务开发的敏捷应用构建平台
  • 原文地址:https://www.cnblogs.com/xienb/p/2610657.html
Copyright © 2011-2022 走看看