怎样使修改了注册表设置立刻生效?

epyang 2010-06-07 11:18:01
困扰了很久的一个问题,得不到解决,希望在这里能得到高手的帮助~~

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoViewOnDrive", 67108863)
End Sub

上面修改注册表代码是防止从我的电脑访问驱动器,每次修改后要重启Explorer.exe才生效,怎样能让它不用重启Explorer.exe就立刻生效?VB2010下具体怎样写?本人是个新手~~希望能具体说明一下~~感谢~~
...全文
459 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2010-06-13
  • 打赏
  • 举报
回复
可能是系统没有来得及返回数据.用多线程试试.
epyang 2010-06-08
  • 打赏
  • 举报
回复
按下“启动调试”,程序打开之后按“Button1”就卡死了。
epyang 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyazhe 的回复:]
显然不是这里的问题。你看你其他地方还做什么了。
[/Quote]

Imports System.Runtime.InteropServices

Public Class Form1

<DllImport("user32.dll")> _
Public Shared Function SendMessage(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Boolean
End Function
Public Const HWND_BROADCAST As Integer = &HFFFF
Public Const WM_SETTINGCHANGE As Integer = &H1A

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoViewOnDrive", 67108863)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoViewOnDrive", 0)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
End Sub

End Class

全部代码就是这样啊~按下“启动调试”,程序打开之后就卡死了。
epyang 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]
这个是c#的,应该看得懂吧。直接翻译过来可以用了。p/invoke的方式调用api.
url=http://www.cnblogs.com/love2wllw/archive/2010/03/13/1684948.html
[/Quote]

不是几明白~本人基础差~~能结合上面例子就好了~~~
epyang 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
taskkill /f /im explorer.exe
start explorer.exe

有些注册表键值修改后需要刷新桌面生效:
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
[/Quote]

不要重启Explorer.exe的~~~
兔子-顾问 2010-06-08
  • 打赏
  • 举报
回复
显然不是这里的问题。你看你其他地方还做什么了。
epyang 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyazhe 的回复:]
那改成这样的声明

VB.NET code
<DllImport("User32 ")>
Public Shared Function SendMessage(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Boolean
……
[/Quote]

好像能立刻生效了,但是运行后程序无响应,卡死住了~~~无法关闭~
兔子-顾问 2010-06-08
  • 打赏
  • 举报
回复
那改成这样的声明
    <DllImport("User32 ")> 
Public Shared Function SendMessage(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Boolean
End Function
epyang 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyazhe 的回复:]
VB.NET code

Public Declare Function SendMessage Lib "user32" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Any) As Integer
Public Const HWND_BROAD……
[/Quote]

楼主,这句代码:
Public Declare Function SendMessage Lib "user32" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Any) As Integer
中的lParam As Any提示错误:“Declare”语句中部支持“As Any”。
兔子-顾问 2010-06-08
  • 打赏
  • 举报
回复
需要在代码最前面添加命名空间引用

Imports System.Runtime.InteropServices
兔子-顾问 2010-06-08
  • 打赏
  • 举报
回复

Public Declare Function SendMessage Lib "user32" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Any) As Integer
Public Const HWND_BROADCAST As Integer = &HFFFF
Public Const WM_SETTINGCHANGE As Integer = &H1A
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoViewOnDrive", 67108863)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
End Sub
兔子-顾问 2010-06-07
  • 打赏
  • 举报
回复
这个是c#的,应该看得懂吧。直接翻译过来可以用了。p/invoke的方式调用api.
http://www.cnblogs.com/love2wllw/archive/2010/03/13/1684948.html
tkscascor 2010-06-07
  • 打赏
  • 举报
回复
重启。。。。
wuyq11 2010-06-07
  • 打赏
  • 举报
回复
taskkill /f /im explorer.exe
start explorer.exe

有些注册表键值修改后需要刷新桌面生效:
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧