~怎样修改注册表后即时生效不需要重启计算机


在线等~~~怎样修改注册表后即时生效不需要重启计算机
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA"
  (ByVal hKey As Long, _
  ByVal lpSubKey As String, _
  phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
  (ByVal hKey As Long, _
  ByVal lpValueName As String, _
  ByVal Reserved As Long, _
  ByVal dwType As Long, _
  lpData As Any, _
  ByVal cbData As Long) As Long


Private Sub Form
Load()
Dim hKey As Long
  RegCreateKey HKEYCURRENTUSER, "Keyboard Layout\Preload", hKey
  RegSetValueEx hKey, "1", 0, REGSZ, ByVal "e0220804", Len("e0220804")
  RegSetValueEx hKey, "2", 0, REG
SZ, ByVal "e0210804", Len("e0210804")
  RegCloseKey hKey
End Sub

这样改要重启计算机才生效,有没有办法能让他不重启即时生效啊。
这个是修改默认输入法的,要是大侠们有其他的办法用VB设置默认输入法也行
听说用SystemParametersInfo,BroadcastSystemMessage可以直接让系统知道注册表更改过了,不用重启,可是我不会用这2个API,希望大侠们帮帮忙
祝大侠们情人节快乐

VisualBasic程序开发环境 程序开发 VisualBasic

sola7 12 years, 1 month ago


如果是设置默认输入法,用SystemParametersInfo就可以。
VC的代码类似这样写:
HKL hkl = LoadKeyboardLayout("e0220804", 0);
SystemParametersInfo(SPISETDEFAULTINPUTLANG, 0, &hkl, SPIFSENDCHANGE);
UnloadKeyboardLayout(hkl);
其中:HKL是一个HANDLE类型,SPISETDEFAULTINPUTLANG是90,&hkl表示引用传递hkl,SPIFSENDCHANGE是2。
你自己改成VB代码吧。

sdeath answered 12 years, 1 month ago


  VB code

  Declare Function LoadKeyboardLayout Lib "user32.dll" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As Long) As Long Declare Function UnloadKeyboardLayout Lib "user32.dll" Alias "UnloadKeyboardLayout" (ByVal hkl As Long) As Boolean Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uiAction As Long, ByVal uiParam As Long, ByRef pvParam As Long, ByVal fWinIni As Long) As Boolean

亚啦那一卡 answered 12 years, 1 month ago

Your Answer