C# 使注册表修改后立即生效

修改注册表后不重启计算机并生效。

const int WM_SETTINGCHANGE = 0x001A;
const int HWND_BROADCAST = 0xffff;

IntPtr result1;

public enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0000,
SMTO_BLOCK = 0x0001,
SMTO_ABORTIFHUNG = 0x0002,
SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
}

[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 void ChangeReg()
{
//通知所有打开的程序注册表已修改
SendMessageTimeout(new IntPtr(HWND_BROADCAST), WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out result1);
}

posted @ 2012-04-09 22:37  scgw  阅读(581)  评论(0编辑  收藏  举报