Autor
|
Tema: Como aplicar cambios al registro y refrescar el sistema sin tener que reiniciar? (Leído 12,064 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Hola, Como sabreis.. hay muchisimos programas que hacen cambios en el registro (TuneUp por ejemplo) y los cambios tienen efecto enseguida sin necesidad de reiniciar el PC, Si algunos de esos cambios se hicieran manualmente (batch, o añadiendo la clave desde el regedit) habría que reiniciar la sesión del usuario o el pc para que los cambios surgieran efecto... Pues yo necesito añadir esta clave al registro: My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideDrivesWithNoMedia", 1, Microsoft.Win32.RegistryValueKind.DWord)
Y lo que me gustaría es hacer un "system refresh" para que los cambios de esa clave tengan efecto sin tener que reiniciar...
Encontré este ejemplo en C# pero no tengo ni idea de lo que hace, ni tampoco sé si esto sirve para mi propósito. static class SafeNativeMethods { public static IntPtr HWND_BROADCAST = (IntPtr)0xffff; public static int WM_WININICHANGE = 0x001A; [DllImport("User32.Dll")] public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam); } public static class Refresher { public static void ReloadSettings() { SafeNativeMethods.PostMessage(SafeNativeMethods.HWND_BROADCAST, SafeNativeMethods.WM_WININICHANGE, 0, 5000); } } static void ExWin() { Refresher.ReloadSettings(); Application.Run(form); }
|
|
|
En línea
|
|
|
|
seba123neo
|
fijate este ejemplo, lo pasas facil desde C# Registry settings immediate effect using C#lo que hace es con la api SendMessage justamente envia un mensaje de windows, en este caso la constante WM_SETTINGCHANGE y las aplicaciones son notificadas del cambio, en teoria deberia funcionar, probalo.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
private const int HWND_BROADCAST = 0xffff; private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = WM_WININICHANGE, INI_INTL = 1; SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, INI_INTL); [DllImport("user32.dll")] private static extern int SendMessage(int hWnd, uint wMsg, uint wParam, uint lParam);
Gracias pero no me deja convertirlo en los convertidores online me da el mismo error (No se hacer la conversión manual, sinceramente)
|
|
|
En línea
|
|
|
|
seba123neo
|
proba asi: Imports System.Runtime.InteropServices Public Class Form1 Private Const HWND_BROADCAST As Integer = &HFFFF Private Const WM_WININICHANGE As Integer = &H1A, WM_SETTINGCHANGE As Integer = WM_WININICHANGE, INI_INTL As Integer = 1 <DllImport("user32.dll")> _ Private Shared Function SendMessage(ByVal hWnd As Integer, ByVal wMsg As UInteger, ByVal wParam As UInteger, ByVal lParam As UInteger) As Integer End Function Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, INI_INTL) End Sub End Class
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
No me ha funcionado Seba
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
¿Alguien puede echarme una mano? Me gustaría ir paso por paso con esta APP y el problema es que no sé mandar el post adecuado en la API para poder refescar el sistema, intento refrescar los iconos de "Mi PC", debería salir un nuevo dispositivo conectado/ocultado al refrescar, me niego a continuar desarrollando esta APP sin poder resolver ese detalle (Quiero hacer las cosas bien xD). He probado distintas combinaciones, tanto con "PostMessage" como "SendMessage": <DllImport("user32.dll")> _ Private Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Boolean End Function Private Shared Function SendMessage(ByVal hWnd As Integer, ByVal wMsg As UInteger, ByVal wParam As UInteger, ByVal lParam As UInteger) As Integer End Function
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideDrivesWithNoMedia", 1, Microsoft.Win32.RegistryValueKind.DWord) Call PostMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, INI_INTL)
Gracias por leer.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Sigo sin saber nada xD.
|
|
|
En línea
|
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Estoy casi seguro que se requiere usar la api con sendmessage o postmessage, gracias por la info, pero he intentado convertir los dos códigos de aquí a VB, y en ningún convertidor funciona: http://helpnet.flexerasoftware.com/installshield17helplib/GetresEnv_variable_example.htm(¿Alguien que domine C# puede ayudarme a convertirlos?) He intentado los demás ejemplos pero sólo refrescan el escritorio. Esto es lo que intento reproducir en mi aplicación, que es una aplicación para monitorizar USBs:
* En Windows 7 > Opciones de carpeta > "Ocultar unidades vacías en la carpeta Equipo"
Al activar la opción, Windows hace un refrescado de sistema ocultando los pendrives vacíos, es un refrescado..."especial" que no es lo mismo que apretar "F5" para refrescar el escritorio.
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Linux 3.20 permitirá hacer actualizaciones sin reiniciar el sistema
Noticias
|
wolfbcn
|
0
|
1,262
|
12 Febrero 2015, 21:43 pm
por wolfbcn
|
|
|
Cómo saber qué cambios hace una aplicación en el registro de Windows
Noticias
|
wolfbcn
|
0
|
1,635
|
8 Noviembre 2016, 22:33 pm
por wolfbcn
|
|
|
Como hacer un sistema de localización por registro?
PHP
|
Antoniio
|
1
|
2,435
|
19 Julio 2017, 17:38 pm
por LaThortilla (Effort)
|
|
|
Una asociación de consumidores recomienda tener en cuenta los cambios ...
Noticias
|
wolfbcn
|
1
|
1,606
|
24 Diciembre 2019, 12:34 pm
por El_Andaluz
|
|
|
¿Que cambios creeis que se han de aplicar vuestros paises?
Foro Libre
|
crazykenny
|
7
|
3,167
|
2 Febrero 2020, 17:06 pm
por devLand93
|
|