[SOURCE] Environment Util (Un set de classes para VB.Net sobre el entorno Win)

Iniciado por Eleкtro, 27 Junio 2015, 19:40 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro


ACTUALIZADO EL 27/JUNIO/2015




• ¿ Para que sirve esto ?

EnvironmentUtil.vb es una Class con un conjunto de Classes hijas que cumplen diversas funcionalidades relacionadas con el entorno de Windows, funcionalidades que mediante la librería de classes de .NET Framework no se pueden llevar a cabo, y en algunos casos para simplificar a éstas,
permite modificar muchos parámetros del sistema cómo por ejemplo la velocidad del mouse o del teclado, así cómo desde poder registrar una variable de entorno en el sistema, modificar el wallpaper del escritorio, mostrar u ocultar el escritorio o la barra de tareas, anclar o desanclar items en la barra de tareas o el menú de inicio, hasta iterar las ventanas del explorador de Windows o notificar ciertos eventos del sistema (y del registro) para afectar los cambios.

En resumen, sirve para todo un poco, ya que hace un poco de casi todo, pero obviamente le faltan muchísimas posibles funcionalidades adicionales.

La Class consta de más de 8.000 lineas de código, esto hace un poco compleja la manutención y depuración del código, es posible que haya algún bug que no he detectado todavía, sean tolerantes con esto y sean libres de reportarme cualquier problema para poder corregirlo.

Acepto cualquier tipo de crítica y/o petición para añadirle nuevas funcionalidades a este proyecto, ya que a pesar de ser tanto código lo cierto es que por ahora cumple poquitas funciones, si les ha gustado entonces dejen su omentario y no tienen más que decirme que característica les gustaría que implementase en esta class ...la única condición es que la característica debe estar relacionada con la temática de la Class :).




• ¿ Cómo lo hago funcionar ?

La Class contiene varias classes hijas cuyo nombre ya da una pista sobre el tipo de funcionalidades que se pueden encontrar:

  • EnvironmentUtil.EnvironmentVariables
  • EnvironmentUtil.FileSystem
  • EnvironmentUtil.OS
  • EnvironmentUtil.Programs
  • EnvironmentUtil.Shell
  • EnvironmentUtil.Shell.Desktop
  • EnvironmentUtil.Shell.Explorer
  • EnvironmentUtil.Shell.StartMenu
  • EnvironmentUtil.Shell.TaskBar
  • EnvironmentUtil.Theming

Algunas funcionalidades requieren que se añada algunas referencias al proyecto:

  • Microsoft Shell Controls And Automation (COM) (Interop.SHDocVw.dll)
  • Microsoft Internet Controls (COM) (Interop.Shell32.dll)

La Class se puede utilizar directamente copiando todo el código en una nueva Class, o también se puede compilar el código en una librería dinámica dll.

A cada miembro le añadí documentación XML para IntelliSense, para entender cual es el propósito de cada miembro, y cómo hacerlo funcionar explicando cada parámetro.

Además, abajo puedne ver el diagrama de Classes, y además también, en la cabecera de la Class, pueden encontrar una región que contiene un sumario de los miembros públicos de cada clase hija.

Importante:
Debo mencionar que yo he compartido la class "compactada" así muy "arrejuntada" o cómo quieran llamarlo pero solamente lo he hecho para que sea facil su distribuición en un único archivo.
Si van a usar/compilar este proyecto, entonces lo correcto sería separar las clases hijas en distintos archivos ...sobre todo para que el mantenimiento no se vuelva una pesadilla entre tantos miles de lineas de código.





• Código fuente:
http://pastebin.com/2WW6j3h8




• Lista de propiedades, métodos y funciones públicas (y los types que acepta cada overload)

Código (vbnet) [Seleccionar]
#Region " Public Members Summary "

#Region " Child Util-Classes "

EnvironmentUtil.EnvironmentVariables
EnvironmentUtil.FileSystem
EnvironmentUtil.OS
EnvironmentUtil.Programs
EnvironmentUtil.Shell
EnvironmentUtil.Shell.Desktop
EnvironmentUtil.Shell.Explorer
EnvironmentUtil.Shell.StartMenu
EnvironmentUtil.Shell.TaskBar
EnvironmentUtil.Theming

#End Region

#Region " Properties "

EnvironmentUtil.EnvironmentVariables.CurrentVariables(EnvironmentUtil.EnvironmentUser) As ReadOnlyCollection(Of EnvironmentUtil.EnvironmentVariables.EnvironmentVariableInfo)
EnvironmentUtil.OS.ActiveWindowTrackingEnabled As Boolean
EnvironmentUtil.OS.ActiveWindowTrackingTimeout As UShort
EnvironmentUtil.OS.BeepEnabled As Boolean
EnvironmentUtil.OS.BlockSendInputResetsEnabled As Boolean
EnvironmentUtil.OS.BorderMultiplierFactor As Integer
EnvironmentUtil.OS.CaretWidth As Integer
EnvironmentUtil.OS.CleartypeEnabled As Boolean
EnvironmentUtil.OS.ClientAreaAnimationEnabled As Boolean
EnvironmentUtil.OS.ComboBoxAnimationEnabled As Boolean
EnvironmentUtil.OS.CurrentArchitecture() As EnvironmentUtil.OS.Architecture
EnvironmentUtil.OS.CursorShadowEnabled As Boolean
EnvironmentUtil.OS.DoubleClickSize As Size
EnvironmentUtil.OS.DoubleClickTime As Integer
EnvironmentUtil.OS.DragFullWindowsEnabled As Boolean
EnvironmentUtil.OS.DragSize As Size
EnvironmentUtil.OS.DropShadowEnabled As Boolean
EnvironmentUtil.OS.FlatMenuEnabled As Boolean
EnvironmentUtil.OS.FocusBorderSize As Size
EnvironmentUtil.OS.FontSmoothingContrast As Integer
EnvironmentUtil.OS.FontSmoothingEnabled As Boolean
EnvironmentUtil.OS.ForegroundFlashCount As UShort
EnvironmentUtil.OS.ForegroundLockTimeout As UShort
EnvironmentUtil.OS.HotTrackingEnabled As Boolean
EnvironmentUtil.OS.HungAppTimeout As Integer
EnvironmentUtil.OS.IconSpacing As Size
EnvironmentUtil.OS.IconTitleWrappingEnabled As Boolean
EnvironmentUtil.OS.KeyboardDelay As Integer
EnvironmentUtil.OS.KeyboardSpeed As Integer
EnvironmentUtil.OS.ListBoxSmoothScrollingEnabled As Boolean
EnvironmentUtil.OS.MenuAccessKeysUnderlined As Boolean
EnvironmentUtil.OS.MenuAnimationEnabled As Boolean
EnvironmentUtil.OS.MenuFadeEnabled As Boolean
EnvironmentUtil.OS.MenuShowDelay As Integer
EnvironmentUtil.OS.MessageDuration As Long
EnvironmentUtil.OS.MouseButtonsSwapEnabled As Boolean
EnvironmentUtil.OS.MouseClickLockEnabled As Boolean
EnvironmentUtil.OS.MouseClickLockTime As Integer
EnvironmentUtil.OS.MouseHoverSize As Size
EnvironmentUtil.OS.MouseHoverTime As Integer
EnvironmentUtil.OS.MouseSonarEnabled As Boolean
EnvironmentUtil.OS.MouseSpeed As Integer
EnvironmentUtil.OS.MouseTrailAmount As Integer
EnvironmentUtil.OS.MouseVanishEnabled As Boolean
EnvironmentUtil.OS.MouseWheelScrollLines As Integer
EnvironmentUtil.OS.OverlappedContentEnabled As Boolean
EnvironmentUtil.OS.PopupMenuAlignment As LeftRightAlignment
EnvironmentUtil.OS.ScreensaverEnabled As Boolean
EnvironmentUtil.OS.ScreensaverPath As String
EnvironmentUtil.OS.ScreensaverTimeout As Integer
EnvironmentUtil.OS.ScreensaveSecureEnabled As Boolean
EnvironmentUtil.OS.SelectionFadeEnabled As Boolean
EnvironmentUtil.OS.SnapToDefaultEnabled As Boolean
EnvironmentUtil.OS.SystemDateTime As Date
EnvironmentUtil.OS.SystemLanguageBarEnabled As Boolean
EnvironmentUtil.OS.TitleBarGradientEnabled As Boolean
EnvironmentUtil.OS.ToolTipAnimationEnabled As Boolean
EnvironmentUtil.OS.UIEffectsEnabled As Boolean
EnvironmentUtil.OS.WaitToKillAppTimeout As Integer
EnvironmentUtil.OS.WaitToKillServiceTimeout As Integer
EnvironmentUtil.OS.WheelscrollChars As Integer
EnvironmentUtil.Programs.DefaultWebBrowser() As String
EnvironmentUtil.Programs.IExplorerVersion() As Version
EnvironmentUtil.Shell.Explorer.ExplorerWindows As ReadOnlyCollection(Of ShellBrowserWindow)
EnvironmentUtil.Shell.Explorer.ExplorerWindowsFolders As ReadOnlyCollection(Of Shell32.Folder2)
EnvironmentUtil.Shell.TaskBar.ClassName() As String
EnvironmentUtil.Shell.TaskBar.Hwnd() As Intptr
EnvironmentUtil.Theming.AeroEnabled() As Boolean
EnvironmentUtil.Theming.AeroSupported() As Boolean
EnvironmentUtil.Theming.CurrentTheme() As EnvironmentUtil.Theming.ThemeInfo
EnvironmentUtil.Theming.CurrentWallpaper() As String
EnvironmentUtil.Theming.WallpaperAsJpegIsSupported() As Boolean
EnvironmentUtil.Theming.WallpaperStylesFitFillAreSupported() As Boolean

#End Region

#Region " Types "

EnvironmentUtil.EnvironmentVariables.EnvironmentVariableInfo
EnvironmentUtil.Theming.ThemeInfo

#End Region

#Region " Functions "

EnvironmentUtil.EnvironmentVariables.GetValue(EnvironmentUtil.EnvironmentUser, String, Boolean) As String
EnvironmentUtil.EnvironmentVariables.GetVariableInfo(EnvironmentUtil.EnvironmentUser, String, Boolean) As EnvironmentUtil.EnvironmentVariables.EnvironmentVariableInfo
EnvironmentUtil.FileSystem.GetItemVerbs(String) As IEnumerable(Of FolderItemVerb)
EnvironmentUtil.FileSystem.ItemNameIsInvalid(String) As Boolean
EnvironmentUtil.FileSystem.ItemNameOrPathIsInvalid(String) As Boolean
EnvironmentUtil.FileSystem.ItemPathIsInvalid(String) As Boolean

#End Region

#Region " Methods "

EnvironmentUtil.EnvironmentVariables.RegisterVariable(EnvironmentUtil.EnvironmentUser, EnvironmentUtil.EnvironmentVariables.EnvironmentVariableInfo, Boolean)
EnvironmentUtil.EnvironmentVariables.RegisterVariable(EnvironmentUtil.EnvironmentUser, String, String, Boolean)
EnvironmentUtil.EnvironmentVariables.UnregisterVariable(EnvironmentUtil.EnvironmentUser, String, Boolean)
EnvironmentUtil.FileSystem.InvokeItemVerb(String, String)
EnvironmentUtil.OS.NotifyDirectoryAttributesChanged(String)
EnvironmentUtil.OS.NotifyDirectoryCreated(String)
EnvironmentUtil.OS.NotifyDirectoryDeleted(String)
EnvironmentUtil.OS.NotifyDirectoryRenamed(String, String)
EnvironmentUtil.OS.NotifyDriveAdded(String, Boolean)
EnvironmentUtil.OS.NotifyDriveRemoved(String)
EnvironmentUtil.OS.NotifyFileAssociationChanged()
EnvironmentUtil.OS.NotifyFileAttributesChanged(String)
EnvironmentUtil.OS.NotifyFileCreated(String)
EnvironmentUtil.OS.NotifyFileDeleted(String)
EnvironmentUtil.OS.NotifyFileRenamed(String, String)
EnvironmentUtil.OS.NotifyFreespaceChanged(String)
EnvironmentUtil.OS.NotifyMediaInserted(String)
EnvironmentUtil.OS.NotifyMediaRemoved(String)
EnvironmentUtil.OS.NotifyNetworkFolderShared(String)
EnvironmentUtil.OS.NotifyNetworkFolderUnshared(String)
EnvironmentUtil.OS.NotifyUpdateDirectory(String)
EnvironmentUtil.OS.NotifyUpdateImage()
EnvironmentUtil.OS.ReloadSystemCursors()
EnvironmentUtil.OS.ReloadSystemIcons()
EnvironmentUtil.OS.RunDateTime()
EnvironmentUtil.OS.RunExecuteDialog()
EnvironmentUtil.OS.RunFindComputer()
EnvironmentUtil.OS.RunFindFiles()
EnvironmentUtil.OS.RunFindPrinter()
EnvironmentUtil.OS.RunHelpCenter()
EnvironmentUtil.OS.RunSearchCommand()
EnvironmentUtil.OS.RunTrayProperties()
EnvironmentUtil.OS.RunWindowsSecurity()
EnvironmentUtil.OS.RunWindowSwitcher()
EnvironmentUtil.Shell.Desktop.CascadeWindows()
EnvironmentUtil.Shell.Desktop.Hide()
EnvironmentUtil.Shell.Desktop.Show()
EnvironmentUtil.Shell.Desktop.TileWindowsHorizontally()
EnvironmentUtil.Shell.Desktop.TileWindowsVertically()
EnvironmentUtil.Shell.Desktop.ToggleState()
EnvironmentUtil.Shell.Explorer.AddFileToRecentDocs(String)
EnvironmentUtil.Shell.Explorer.RefreshWindows()
EnvironmentUtil.Shell.StartMenu.PinItem(String)
EnvironmentUtil.Shell.StartMenu.UnpinItem(String)
EnvironmentUtil.Shell.TaskBar.Hide(Boolean)
EnvironmentUtil.Shell.TaskBar.PinItem(String)
EnvironmentUtil.Shell.TaskBar.Show(Boolean)
EnvironmentUtil.Shell.TaskBar.UnpinItem(String)
EnvironmentUtil.Theming.RemoveDesktopWallpaper()
EnvironmentUtil.Theming.SetDesktopWallpaper(String, EnvironmentUtil.Theming.WallpaperStyle)
EnvironmentUtil.Theming.SetSystemCursor(String, EnvironmentUtil.Theming.CursorType)

#End Region

#End Region


• Diagrama de Classes:





















kub0x

¡Grandísimo aporte Elektro! ¡Enorme! Sigues en tus trece ;)

Me ha llamado la atención los métodos de notifificación, ¿a caso estás hookeando algun módulo para que te chive que carpetas (por ejemplo) se han creado en X directorio? ¿O usas algún componente COM?

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Eleкtro

Gracias por comentar.

Cita de: kub0x en 27 Junio 2015, 20:23 PM¿a caso estás hookeando algun módulo para que te chive que carpetas (por ejemplo) se han creado en X directorio?

Esos métodos de notificación son un simple wrapper de la función SHChangeNotify
Cita de: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762118%28v=vs.85%29.aspxNotifies the system of an event that an application has performed. An application should use this function if it performs an action that may affect the Shell.

Los métodos de notificación están ahí para que cada uno quiera darle los propósitos que uno quiera, es útil por ejemplo al registrar una asociación de archivo, o tras modificar los iconos del sistema, o si tienes la ventana del explorer abierta en "Mi PC" y quieres refrescar los cambios de espacio libre en los labels, o si hookeas alguna función que crea carpetas y quieres notificar al sistema la carpeta creada por algún motivo cómo has mencionado, simplemente están ahí para cualquier uso.

Saludos!








kub0x

Cita de: Eleкtro en 27 Junio 2015, 20:32 PM
Los métodos de notificación están ahí para que cada uno quiera darle los propósitos que uno quiera, es útil por ejemplo al registrar una asociación de archivo, o tras modificar los iconos del sistema, o si tienes la ventana del explorer abierta en "Mi PC" y quieres refrescar los cambios de espacio libre en los labels, o si hookeas alguna función que crea carpetas y quieres notificar al sistema la carpeta creada por algún motivo cómo has mencionado, simplemente están ahí para cualquier uso.

Solo concierne a la aplicación, vale pensé que era global.

Por lo demás buen trabajo, supongo que lo habrás incluido en los posts recopilatorios. Sino chincheta (sin problemas).

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Eleкtro

Cita de: kub0x en 27 Junio 2015, 21:08 PMSolo concierne a la aplicación, vale pensé que era global.

Si te refieres a que si había implementado algún Hook para interceptar la eliminación de archivos de manera global o algo parecido... pues no.

En cambio, si lo dices por esto:
CitarNotifies the system of an event that an application has performed. An application should use this function if it performs an action that may affect the Shell.

...entonces no te dejes engañar confundir por lo que pone, si que afecta de manera global, por ejemplo si eliminas un archivo desde la consola de Windows y quieres refrescar los cambios de la carpeta donde se eliminó, puedes hacerlo llamando a esa función desde tu app.

Saludos!