如何修改注册表立刻生效【搜藏】

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

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

//-----------------------方法一----------------------------
[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, 00); 

//-----------------------方法二----------------------------
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);

 

posted @ 2009-06-13 13:18  与卡  阅读(558)  评论(0编辑  收藏  举报