Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Visual Basic y Net


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 21-nov-2012, 12:15   #1
Ninja y moderador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.236
Gracias: 1.953
Agradecido 401 veces en 284 mensajes.
Predeterminado Como aplicar cambios al registro y refrescar el sistema sin tener que reiniciar?

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:
Código:
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 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.
Código:
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()
{
Form form = new Form();
Refresher.ReloadSettings();
Application.Run(form);
}
  
__________________
EleKtro está desconectado   Responder Citando
Antiguo 21-nov-2012, 16:35   #2
Mod recien llegado
 
Fecha de Ingreso: enero-2010
Amigos 10
Mensajes: 1.367
Gracias: 623
Agradecido 369 veces en 320 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

Aquí tienes el código traducido. Lo que realiza es crear 2 handled o punteros a una direccion de memoria statica, en la clase SafeNativeMethods,importa de la librería del sistema la dll User32.dll, y luego define los parámetros que se le deben pasar.
En la clase Refresher, hace llamada a la clase anterior,haciendo uso de la funcion creada, pasandole como parámetro los 2 punteros creados y 2 indices.
Luego en el procedimiento ExWin crea un formulario nuevo , refresca la configuracion el procedimiento que hablamos antes(reloadedSettings) y luego abre el form de una forma diferente, mediante application.Run, lo normal es form.show(pero eso habría que mirar el porque, aunque casi seguro que se puede hacer como indico yo.)
Código:
Private NotInheritable Class SafeNativeMethods
	Private Sub New()
	End Sub
	Public Shared HWND_BROADCAST As IntPtr = DirectCast(&Hffff, IntPtr)
	Public Shared WM_WININICHANGE As Integer = &H1a

	<DllImport("User32.Dll")> _
	Public Shared Function PostMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As Boolean
	End Function
End Class

Public NotInheritable Class Refresher
	Private Sub New()
	End Sub
	Public Shared Sub ReloadSettings()
		SafeNativeMethods.PostMessage(SafeNativeMethods.HWND_BROADCAST, SafeNativeMethods.WM_WININICHANGE, 0, 5000)
	End Sub
End Class

Private Shared Sub ExWin()
	Dim form As New Form()
	Refresher.ReloadSettings()
	Application.Run(form)
End Sub
  
Url donde lo he traducido:

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

cuban está desconectado   Responder Citando
El Siguiente Usuario Agradeció a cuban Por Este Mensaje:
EleKtro (21-nov-2012)
Antiguo 21-nov-2012, 17:12   #3
Ninja y moderador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.236
Gracias: 1.953
Agradecido 401 veces en 284 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

Gracias Cuban, yo uso un programa para convertir de C# a VBNET, ya lo tenía convertido, el problema es que es demasiado avanzado para mi, no se ponerlo en práctica.

EDITO: Además, todos los códigos que he probado hasta ahora que usan "hWnd", en VS2012 me han dado error, y este code no es menos.
en vb6 podía usar hwnd sin problemas, no se si debo importar primero algo trabajando en vs2012 para poder usar hwnd...

Te agradezco mucho la explicación de como funciona (aunque entendí poco XD)
__________________
EleKtro está desconectado   Responder Citando
Antiguo 24-dic-2012, 12:30   #4
Ninja y moderador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.236
Gracias: 1.953
Agradecido 401 veces en 284 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

¿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":

Código:
    <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
  
Código:
    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.
__________________
EleKtro está desconectado   Responder Citando
Antiguo 24-dic-2012, 14:03   #5
Novato
 
Fecha de Ingreso: diciembre-2008
Amigos 0
Mensajes: 37
Gracias: 0
Agradecido 7 veces en 6 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

yo diria q pensaras 2 veces antes de andar tocando los registros, y algunos OS no permiten acceder al registro si no son aplicaciones con permisos administrativos y es terrible lio porque pasa a ser administrado por la UAC :S
spiritdead está desconectado   Responder Citando
El Siguiente Usuario Agradeció a spiritdead Por Este Mensaje:
EleKtro (30-dic-2012)
Antiguo 28-dic-2012, 17:41   #6
Moderador
 
Avatar de ajr784
 
Fecha de Ingreso: marzo-2007
Amigos 5
Mensajes: 1.727
Gracias: 31
Agradecido 361 veces en 313 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

@EleKtro la verdad es que no entiendo para nada tu problema.
Lo que si te puedo decir es que, hay cosas que no puedes "refrescar" desde tu aplicación y que, desgraciadamente, necesitas (aunque menos sea) cerrar la sesión y volver a iniciarla (algunas, incluso reiniciar la PC). A lo mejor lo que quieres hacer sea alguna de esas opciones, insisto que no entiendo el problema.

Si el código que te puso @cuban te resulta complejo, el <DllImport("dll.dll")> _ , puedes verlo como el Declare en Visual Basic 6. Lo de NotInheritable no le des mucha importancia ya que son palabras claves (de las infinitas que posee .NET que incluso llegan a exasperar) que lo que dice que esa clase no puede ser Heredada (lo hermoso de la Orientacion a Objetos, esa palabrita te la tira al tacho, es como final en java).

Cita:
yo diria q pensaras 2 veces antes de andar tocando los registros, y algunos OS no permiten acceder al registro si no son aplicaciones con permisos administrativos y es terrible lio porque pasa a ser administrado por la UAC :S
El único sistema operativo que yo conozco que utiliza registro es Windows, puede ser diferente versión (3.1, 4.0, 4.1, 6.0, 6.5, etc), pero no deja de ser sistema windows, y no es tan así, tienes que tener en cuenta que tocar el registro puede romper el sistema completo, pero si sabes lo que haces (y seguro que @EleKtro sabe) está todo bien. El problema con la UAC no es tan enquilombado, supongando que tu usuario es un usuario normal, cuando tu programa requiera realizar cambios en el sistema, el mismo sistema te preguntará (o a lo sumo te denegará la petición), se soluciona fácilmente haciendo click derecho->Ejecutar como Administrador, problema solucionado.
__________________
Cita:
Nunca vio la luz
no sintió el calor
no sufrió el dolor
no vivió el morir
muy grande la cruz
muy chico el honor
enana actitud
de vivir mejor.
-- Lo +Fino - Las pastillas del Abuelo --
ajr784 está desconectado   Responder Citando
El Siguiente Usuario Agradeció a ajr784 Por Este Mensaje:
EleKtro (30-dic-2012)
Antiguo 29-dic-2012, 01:13   #7
Novato
 
Fecha de Ingreso: diciembre-2008
Amigos 0
Mensajes: 37
Gracias: 0
Agradecido 7 veces en 6 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

Cita:
Iniciado por ajr784 Ver Mensaje
@EleKtro la verdad es que no entiendo para nada tu problema.
Lo que si te puedo decir es que, hay cosas que no puedes "refrescar" desde tu aplicación y que, desgraciadamente, necesitas (aunque menos sea) cerrar la sesión y volver a iniciarla (algunas, incluso reiniciar la PC). A lo mejor lo que quieres hacer sea alguna de esas opciones, insisto que no entiendo el problema.

Si el código que te puso @cuban te resulta complejo, el <DllImport("dll.dll")> _ , puedes verlo como el Declare en Visual Basic 6. Lo de NotInheritable no le des mucha importancia ya que son palabras claves (de las infinitas que posee .NET que incluso llegan a exasperar) que lo que dice que esa clase no puede ser Heredada (lo hermoso de la Orientacion a Objetos, esa palabrita te la tira al tacho, es como final en java).


El único sistema operativo que yo conozco que utiliza registro es Windows, puede ser diferente versión (3.1, 4.0, 4.1, 6.0, 6.5, etc), pero no deja de ser sistema windows, y no es tan así, tienes que tener en cuenta que tocar el registro puede romper el sistema completo, pero si sabes lo que haces (y seguro que @EleKtro sabe) está todo bien. El problema con la UAC no es tan enquilombado, supongando que tu usuario es un usuario normal, cuando tu programa requiera realizar cambios en el sistema, el mismo sistema te preguntará (o a lo sumo te denegará la petición), se soluciona fácilmente haciendo click derecho->Ejecutar como Administrador, problema solucionado.
a lo que quiero llegar es, que el hecho de estar tocando los registros, puedes joder el windows, y se le debe tener bastante cuidado
spiritdead está desconectado   Responder Citando
El Siguiente Usuario Agradeció a spiritdead Por Este Mensaje:
EleKtro (30-dic-2012)
Antiguo 29-dic-2012, 16:02   #8
Mod recien llegado
 
Fecha de Ingreso: enero-2010
Amigos 10
Mensajes: 1.367
Gracias: 623
Agradecido 369 veces en 320 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

spiritdead para eso están las mv
cuban está desconectado   Responder Citando
Antiguo 30-dic-2012, 02:48   #9
Ninja y moderador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.236
Gracias: 1.953
Agradecido 401 veces en 284 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

Antes de nada, gracias por contestar a los 3.

Cita:
Iniciado por spiritdead Ver Mensaje
a lo que quiero llegar es, que el hecho de estar tocando los registros, puedes joder el windows, y se le debe tener bastante cuidado
Hombreee... depende de los conocimientos que tenga uno y de lo crítica que séa la clave que quieres editar, por eso no hay que preocuparse.

Cita:
Iniciado por ajr784 Ver Mensaje
@EleKtro la verdad es que no entiendo para nada tu problema.
Es muy sencillo de entender, pero no se me ocurre un buen ejemplo ahora mismo,

Si has usado programas de StarDock (Los que te hacen cambios en los iconos y en el theme del escritorio y cosas así), pues por ejemplo el programa IconPackager de stardock te cambia todos los iconos del sistema agregando claves al registro, y luego refresca el sistema para que se puedan ver los nuevos iconos (Sé que lo refresca porque el efecto de refrescado del distema se nota), esas claves no podrían tener efecto enseguida si no se reinicia sesión como bien has dicho, o si no se refresca el sistema enviando esos mensajes como hace dicho programa, pero eso aún no he conseguido hacerlo en el mío .

Podría dar 1.000 ejemplos más pero no se me viene a la mente ningún otro programa ahora mismo que haga cambios en el registro y refresque el sistema para que los cambios tnegan efecto sin reiniciar sesión.

Estoy intentando hacer un programa y me gustaría ocultar una unidad USB en "Mi PC", lo hago agregando una clave al registro, pero claro para que los cambios tengan efecto debo reiniciar, a menos que consiga mimicar la forma en la que lo hace StarDock y ese tipo de programas que si consiguen refrescar el sistema para cambios pequeños en el registro .


un saludo!
__________________
EleKtro está desconectado   Responder Citando
Antiguo 12-ene-2013, 11:45   #10
Ninja y moderador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.236
Gracias: 1.953
Agradecido 401 veces en 284 mensajes.
Predeterminado Respuesta: Como aplicar cambios al registro y refrescar el sistema sin tener que rein

Sigo sin saber la solución a este problema xD.
__________________
EleKtro está desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
El sendero del hacker arcangel_night Hack para newbies 34 26-dic-2012 16:41
DUELO empate CARLOS_ CUBAN-HACK cuban-hack Batch 87 07-may-2012 22:20
Cómo convertirse en hacker Besti4 HacK GeneraL 2 04-abr-2011 00:51
FATAL ERROR 001b 0x7c92b21a 0x00000010 c0p3rn1c Windows y otros sistemas operativos no libres 1 15-dic-2010 22:59
Hacking Empezando desde 0 mancuertex HacK GeneraL 89 26-oct-2010 13:01



Portal Hacker
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0