Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#8371
A pesar de tus esfuerzos el segundo código a mi no me funciona, me da el mismo error que comentas en el primer código.

He probado decenas de códigos, he estudiado un poco sobre RegistryKeyPermissionCheck ,RegistryRights ,SetAccessControl ,RegistryAccessRule , y RegistryKey

Incluso he probado un código koreano!... pero nada ha valido la pena, parece algo de locos intentar modificar los permisos de una clave en .NET, Google no tiene la respuesta.

A mi me habría gustado solucionar tu problema porque también me serviría para mi en un futuro, pero parece muy dificil conseguirlo, así que quizás quieras mirar esta alternativa que hice:
-> http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1872406#msg1872406

Saludos.
#8372
No apruebo el uso de aplicaciones commandline a menos que sea para situaciones complicadas y tediosas como esta...

...Una class para usar SETACL para modificar el propietario de una clave de registro y para modificar los permisos de la clave:

PD: a ver si alguien nos sorprende con un código nativo...  :silbar:

Código (vbnet) [Seleccionar]
#Region " SETACL Helper "


' [ SETACL Helper ]
'
' // By Elektro H@cker
'
'
' INSTRUCTIONS:
' 1. Add the "SETACL.exe" in the project.
'
' Examples :
'
' SETACL.Set_Owner("HKCU\Test", True)
' SETACL.Set_Permission("HKCU\Test\", SETACL.SETACL_Permission.full, False)


Public Class SETACL

   ' <summary>
   ' Gets or sets the SETACL executable path.
   ' </summary>
   Public Shared SETACL_Location As String = ".\SetACL.exe"

   ' <summary>
   ' Gets or sets the SETACL logfile filename.
   ' </summary>
   Public Shared SETACL_Logfile As String = ".\SetACL.log"


   Public Enum SETACL_Permission

       ' <summary>
       ' Create link
       ' </summary>
       create_link

       ' <summary>
       ' Create subkeys
       ' </summary>
       create_subkey

       ' <summary>
       ' Delete
       ' </summary>
       delete

       ' <summary>
       ' Enumerate subkeys
       ' </summary>
       enum_subkeys

       ' <summary>
       ' Notify
       ' </summary>
       notify

       ' <summary>
       ' Query value
       ' </summary>
       query_val

       ' <summary>
       ' Read control
       ' </summary>
       read_access

       ' <summary>
       ' Set value
       ' </summary>
       set_val

       ' <summary>
       ' Write permissions
       ' </summary>
       write_dacl

       ' <summary>
       ' Take ownership
       ' </summary>
       write_owner


       ' <summary>
       ' Read (KEY_ENUMERATE_SUB_KEYS + KEY_EXECUTE + KEY_NOTIFY + KEY_QUERY_VALUE + KEY_READ + READ_CONTROL)
       ' </summary>
       read

       ' <summary>
       ' Full access
       ' (KEY_CREATE_LINK + KEY_CREATE_SUB_KEY +KEY_ENUMERATE_SUB_KEYS + ...
       ' ...KEY_EXECUTE + KEY_NOTIFY + KEY_QUERY_VALUE + KEY_READ + KEY_SET_VALUE + ...
       ' ...KEY_WRITE + READ_CONTROL + WRITE_OWNER + WRITE_DAC + DELETE)
       ' </summary>
       full

   End Enum

   ' <summary>
   ' Checks if SETACL process is avaliable.
   ' </summary>
   Public Shared Function Is_Avaliable() As Boolean
       Return IO.File.Exists(SETACL_Location)
   End Function

   ' <summary>
   ' Takes ownership of a registry key.
   ' </summary>
   Public Shared Sub Set_Owner(ByVal RegKey As String, ByVal Recursive As Boolean, Optional ByVal UserName As String = "%USERNAME%")

       If RegKey.EndsWith("\") Then RegKey = RegKey.Substring(0, RegKey.Length - 1)

       Dim Recursion As String = "No" : If Recursive Then Recursion = "Yes"

       Dim SETACL As New Process(), SETACL_Info As New ProcessStartInfo()

       SETACL_Info.FileName = SETACL_Location
       SETACL_Info.Arguments = String.Format("-on ""{0}"" -ot reg -ownr ""n:{1}"" -rec ""{2}"" -actn setowner -silent -ignoreerr -log ""{3}""", RegKey, UserName, Recursion, SETACL_Logfile)
       SETACL_Info.CreateNoWindow = True
       SETACL_Info.UseShellExecute = False
       SETACL.StartInfo = SETACL_Info
       SETACL.Start()
       SETACL.WaitForExit()

       If SETACL.ExitCode <> 0 Then
           ' Throw New Exception("Exit code: " & SETACL.ExitCode)
           MsgBox(IO.File.ReadAllText(SETACL_Logfile))
       End If

   End Sub

   ' <summary>
   ' Sets the user permission of a registry key.
   ' </summary>
   Public Shared Sub Set_Permission(ByVal RegKey As String, ByVal Permission As SETACL_Permission, ByVal Recursive As Boolean, Optional ByVal UserName As String = "%USERNAME%")

       If RegKey.EndsWith("\") Then RegKey = RegKey.Substring(0, RegKey.Length - 1)

       Dim Recursion As String = "No" : If Recursive Then Recursion = "Yes"

       Dim SETACL As New Process(), SETACL_Info As New ProcessStartInfo()

       SETACL_Info.FileName = SETACL_Location
       SETACL_Info.Arguments = String.Format("-on ""{0}"" -ot reg -ace ""n:{1};p:{2}"" -rec ""{3}"" -actn ace -silent -ignoreerr -log ""{4}""", RegKey, UserName, Permission, Recursion, SETACL_Logfile)
       SETACL_Info.CreateNoWindow = True
       SETACL_Info.UseShellExecute = False
       SETACL.StartInfo = SETACL_Info
       SETACL.Start()
       SETACL.WaitForExit()

       If SETACL.ExitCode <> 0 Then
           ' Throw New Exception("Exit code: " & SETACL.ExitCode)
           MsgBox(IO.File.ReadAllText(SETACL_Logfile))
       End If

   End Sub

End Class

#End Region
#8373
Todavía nadie ha podido compilar el proyecto para "anycpu" y "x64"... si hay alguien que quiera colaborar... please.
#8374
Gracias por intentarlo omarhack, me voy a conectar ahora, no se si estarás,
ya hablamos...
#8376
Me generas mucho spam xDDD pero sabes que agradezco la intención ;)
#8378
Cita de: Ikillnukes en 20 Julio 2013, 11:26 AM
Tu usas el mismo VS2012 que yo, creo... A mi si se me abren ya que se me compilen es otra cosa... :xD

Si usaste mi instalador con las opciones por defecto entonces vas a ser incapaz de abrir un proyecto donde se maneje C/C++ ya que hay que elegir esos paquetes manualmente en el instalador (si se quieren instalar), en cambio los proyectos CSharp puro si que puedes abrirlos y además compilarlos.
#8379
En mi VisualStudio no tengo instalados los paquetes necesarios para ejecutar algunos proyectos de C

Necesito que una persona bondadosa que use Visual C se apiade de mi alma jeje y me targetee este proyecto a la plataforma x64: http://downloads.sourceforge.net/freeimage/FreeImage3154.zip

...Como bien explican aquí paso a paso como hacerlo funcionar: http://www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/

Necesito esa librería compilada en "AnyCpu" y "x64"

De verdad que yo no puedo abrir el proyecto ni hacer nada con él, no es cuestión de vagancia, podría instalar una maquina virtual e instalar vs alli pero...requiere mucho tiempo y alguno de ustedes puede hacerlo en 5 minutos.

¿Alguien puede hacerlo?.

Un saludo, y gracias...
#8380
Una class de ayuda para manejar lo básico de la librería FreeImage

Convertir entre formatos, convertir a escala de grises, rotar, redimensionar, generar un thumbnail...

http://freeimage.sourceforge.net/download.html

Código (vbnet) [Seleccionar]
#Region " FreeImage Helper "


' [ FreeImage Helper ]
'
' // By Elektro H@cker
'
'
' INSTRUCTIONS:
' 1. ADD A REFERENCE FOR "FreeImageNET.dll" IN THE PROJECT.
' 2. ADD THE "FREEIMAGE.DLL" IN THE PROJECT.
'
'
' Examples :
'
' MsgBox(FreeImageHelper.Is_Avaliable() ' Result: True
' MsgBox(FreeImageHelper.Get_Version()  ' Result: 3.15.1
' MsgBox(FreeImageHelper.Get_ImageFormat("C:\Test.png")) ' Result: PNG
'
' FreeImageHelper.Convert("C:\Test.png", "C:\Test.ico", FreeImageAPI.FREE_IMAGE_FORMAT.FIF_ICO)
' FreeImageHelper.Convert(New Bitmap("C:\Test.png"), "C:\Test.jpg", FreeImageAPI.FREE_IMAGE_FORMAT.FIF_JPEG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.JPEG_SUBSAMPLING_444 Or FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYSUPERB)
'
' PictureBox1.BackgroundImage = FreeImageHelper.GrayScale(New Bitmap("C:\Test.bmp"))
' PictureBox1.BackgroundImage = FreeImageHelper.GrayScale("C:\Test.bmp")
'
' PictureBox1.BackgroundImage = FreeImageHelper.Resize(New Bitmap("C:\Test.bmp"), 32, 32)
' PictureBox1.BackgroundImage = FreeImageHelper.Resize("C:\Test.bmp", 64, 128)
'
' PictureBox1.BackgroundImage = FreeImageHelper.Rotate(New Bitmap("C:\Test.bmp"), 90)
' PictureBox1.BackgroundImage = FreeImageHelper.Rotate("C:\Test.bmp", -90)
'
' PictureBox1.BackgroundImage = FreeImageHelper.Thumbnail(New Bitmap("C:\Test.png"), 64, True)
' PictureBox1.BackgroundImage = FreeImageHelper.Thumbnail("C:\Test.png", 64, True)



Imports FreeImageAPI

Public Class FreeImageHelper

   ' <summary>
   ' Checks if <i>FreeImage.dll</i> is avaliable on the system.
   ' </summary>
   Public Shared Function Is_Avaliable() As Boolean
       Return FreeImage.IsAvailable
   End Function

   ' <summary>
   ' Gets the version of FreeImage.dll.
   ' </summary>
   Shared Function Get_Version() As String
       Return FreeImage.GetVersion
   End Function

   ' <summary>
   ' Gets the image format of a image file.
   ' </summary>
   Shared Function Get_ImageFormat(ByVal File As String) As String
       Return FreeImage.GetFileType(File, 0).ToString.Substring(4)
   End Function

   ' <summary>
   ' Convert a Bitmap object between image formats and save it to disk.
   ' </summary>
   Shared Sub Convert(ByVal bmp As System.Drawing.Bitmap, _
                      ByVal Output As String, _
                      ByVal NewFormat As FREE_IMAGE_FORMAT, _
                      Optional ByVal SaveFlags As FREE_IMAGE_SAVE_FLAGS = FREE_IMAGE_SAVE_FLAGS.DEFAULT)

       Try
           FreeImage.SaveBitmap(bmp, Output, NewFormat, SaveFlags)
       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
       End Try

   End Sub

   ' <summary>
   ' Convert a image file between image formats and save it to disk.
   ' </summary>
   Shared Sub Convert(ByVal File As String, _
                      ByVal Output As String, _
                      ByVal NewFormat As FREE_IMAGE_FORMAT, _
                      Optional ByVal SaveFlags As FREE_IMAGE_SAVE_FLAGS = FREE_IMAGE_SAVE_FLAGS.DEFAULT)

       Try
           FreeImage.Save(NewFormat, FreeImage.LoadEx(File), Output, SaveFlags)
       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
       End Try

   End Sub

   ' <summary>
   ' GrayScales a Bitmap object.
   ' </summary>
   Shared Function GrayScale(ByVal bmp As System.Drawing.Bitmap) As System.Drawing.Bitmap

       Try

           Dim ImageStream As New System.IO.MemoryStream
           bmp.Save(ImageStream, bmp.RawFormat)

           Dim Image As FIBITMAP = FreeImage.LoadFromStream(ImageStream)
           ImageStream.Dispose()

           Return FreeImage.GetBitmap(FreeImage.ConvertToGreyscale(Image))

       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' GrayScales a image file.
   ' </summary>
   Shared Function GrayScale(ByVal File As String) As System.Drawing.Bitmap

       Try
           Return FreeImage.GetBitmap(FreeImage.ConvertToGreyscale(FreeImage.LoadEx(File)))
       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' Resizes a Bitmap object.
   ' </summary>
   Shared Function Resize(ByVal bmp As System.Drawing.Bitmap, _
                          ByVal X As Int32, _
                          ByVal Y As Int32, _
                          Optional ByVal Quality As FREE_IMAGE_FILTER = FREE_IMAGE_FILTER.FILTER_BILINEAR) As System.Drawing.Bitmap

       Try

           Dim ImageStream As New System.IO.MemoryStream
           bmp.Save(ImageStream, bmp.RawFormat)

           Dim Image As FIBITMAP = FreeImage.LoadFromStream(ImageStream)
           ImageStream.Dispose()

           Return FreeImage.GetBitmap(FreeImage.Rescale(Image, X, Y, Quality))

       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' Resizes a image file.
   ' </summary>
   Shared Function Resize(ByVal File As String, _
                          ByVal X As Int32, _
                          ByVal Y As Int32, _
                          Optional ByVal Quality As FREE_IMAGE_FILTER = FREE_IMAGE_FILTER.FILTER_BILINEAR) As System.Drawing.Bitmap

       Try

           Return FreeImage.GetBitmap(FreeImage.Rescale(FreeImage.LoadEx(File), X, Y, Quality))

       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' Rotates a Bitmap object.
   ' </summary>
   Shared Function Rotate(ByVal bmp As System.Drawing.Bitmap, _
                          ByVal Angle As Double) As System.Drawing.Bitmap

       Try

           Dim ImageStream As New System.IO.MemoryStream
           bmp.Save(ImageStream, bmp.RawFormat)

           Dim Image As FIBITMAP = FreeImage.LoadFromStream(ImageStream)
           ImageStream.Dispose()

           Return FreeImage.GetBitmap(FreeImage.Rotate(Image, Angle))

       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' Rotates a image file.
   ' </summary>
   Shared Function Rotate(ByVal File As String, _
                          ByVal Angle As Double) As System.Drawing.Bitmap

       Try

           Return FreeImage.GetBitmap(FreeImage.Rotate(FreeImage.LoadEx(File), Angle))

       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' Returns a Thumbnail of a Bitmap object.
   ' </summary>
   Shared Function Thumbnail(ByVal bmp As System.Drawing.Bitmap, _
                                  ByVal size As Int32, _
                                  ByVal convert As Boolean) As System.Drawing.Bitmap

       Try

           Dim ImageStream As New System.IO.MemoryStream
           bmp.Save(ImageStream, bmp.RawFormat)

           Dim Image As FIBITMAP = FreeImage.LoadFromStream(ImageStream)
           ImageStream.Dispose()

           Return FreeImage.GetBitmap(FreeImage.MakeThumbnail(Image, size, convert))

       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

   ' <summary>
   ' Returns a Thumbnail of a image file.
   ' </summary>
   Shared Function Thumbnail(ByVal File As String, _
                                  ByVal size As Int32, _
                                  ByVal convert As Boolean) As System.Drawing.Bitmap

       Try
           Return FreeImage.GetBitmap(FreeImage.MakeThumbnail(FreeImage.LoadEx(File), size, convert))
       Catch ex As Exception
           ' Throw New Exception(ex.Message)
           MsgBox(ex.Message)
           Return Nothing
       End Try

   End Function

End Class

#End Region







Informa a Windows de cambios en el sistema para refrescar el sistema.

Código (vbnet) [Seleccionar]
#Region " System Notifier "

' [ System Notifier ]
'
' Examples :
'
' SystemNotifier.Notify(SystemNotifier.EventID.FileAssociation_Changed, SystemNotifier.NotifyFlags.DWORD, IntPtr.Zero, IntPtr.Zero)

Public Class SystemNotifier

   <System.Runtime.InteropServices.DllImport("shell32.dll")> _
   Shared Sub SHChangeNotify( _
       ByVal wEventID As EventID, _
       ByVal uFlags As NotifyFlags, _
       ByVal dwItem1 As IntPtr, _
       ByVal dwItem2 As IntPtr)
   End Sub

   Shared Sub Notify(ByVal wEventID As EventID, ByVal uFlags As NotifyFlags, ByVal dwItem1 As IntPtr, ByVal dwItem2 As IntPtr)
       SHChangeNotify(wEventID, uFlags, dwItem1, dwItem2)
   End Sub

   <Flags()> _
   Public Enum NotifyFlags

       ' <summary>
       ' The <i>dwItem1</i> and <i>dwItem2</i> parameters are DWORD values.
       ' </summary>
       DWORD = &H3

       ' <summary>
       ' <i>dwItem1</i> and <i>dwItem2</i> are the addresses of ItemIDList structures,
       ' that represent the item(s) affected by the change.
       ' Each ItemIDList must be relative to the desktop folder.
       ' </summary>
       ItemIDList = &H0

       ' <summary>
       ' <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings,
       ' of maximum length MAX_PATH that contain the full path names of the items affected by the change.
       ' </summary>
       PathA = &H1

       ' <summary>
       ' <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings,
       ' of maximum length MAX_PATH that contain the full path names of the items affected by the change.
       ' </summary>
       PathW = &H5

       ' <summary>
       ' <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings,
       ' that represent the friendly names of the printer(s) affected by the change.
       ' </summary>
       PrinterA = &H2

       ' <summary>
       ' <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings,
       ' that represent the friendly names of the printer(s) affected by the change.
       ' </summary>
       PrinterW = &H6

       ' <summary>
       ' The function should not return until the notification has been delivered to all affected components.
       ' As this flag modifies other data-type flags it cannot by used by itself.
       ' </summary>
       Flush = &H1000

       ' <summary>
       ' The function should begin delivering notifications to all affected components,
       ' but should return as soon as the notification process has begun.
       ' As this flag modifies other data-type flags it cannot by used by itself.
       ' </summary>
       FlushNoWait = &H2000

   End Enum

   <Flags()> _
   Public Enum EventID

       ' <summary>
       ' All events have occurred.
       ' </summary>
       All_Events = &H7FFFFFFF

       ' <summary>
       ' A folder has been created.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the folder that was created.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Directory_Created = &H8

       ' <summary>
       ' A folder has been removed.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the folder that was removed.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Directory_Deleted = &H10

       ' <summary>
       ' The name of a folder has changed.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the previous pointer to an item identifier list (PIDL) or name of the folder.
       ' <i>dwItem2</i> contains the new PIDL or name of the folder.
       ' </summary>
       Directory_Renamed = &H20000

       ' <summary>
       ' A nonfolder item has been created.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the item that was created.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Item_Created = &H2

       ' <summary>
       ' A nonfolder item has been deleted.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the item that was deleted.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Item_Deleted = &H4

       ' <summary>
       ' The name of a nonfolder item has changed.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the previous PIDL or name of the item.
       ' <i>dwItem2</i> contains the new PIDL or name of the item.
       ' </summary>
       Item_Renamed = &H1

       ' <summary>
       ' A drive has been added.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the root of the drive that was added.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Drive_Added = &H100

       ' <summary>
       ' A drive has been added and the Shell should create a new window for the drive.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the root of the drive that was added.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Drive_Added_Shell = &H10000

       ' <summary>
       ' A drive has been removed. <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the root of the drive that was removed.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Drive_Removed = &H80

       ' <summary>
       ' Storage media has been inserted into a drive.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the root of the drive that contains the new media.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Media_Inserted = &H20

       ' <summary>
       ' Storage media has been removed from a drive.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the root of the drive from which the media was removed.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Media_Removed = &H40

       ' <summary>
       ' A folder on the local computer is being shared via the network.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the folder that is being shared.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Net_Shared = &H200

       ' <summary>
       ' A folder on the local computer is no longer being shared via the network.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the folder that is no longer being shared.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Net_Unshared = &H400

       ' <summary>
       ' The computer has disconnected from a server.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the server from which the computer was disconnected.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Server_Disconnected = &H4000

       ' <summary>
       ' The attributes of an item or folder have changed.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the item or folder that has changed.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Attributes_Changed = &H800

       ' <summary>
       ' A file type association has changed. <see cref="NotifyFlags.ItemIDList"/>
       ' must be specified in the <i>uFlags</i> parameter.
       ' <i>dwItem1</i> and <i>dwItem2</i> are not used and must be <see langword="null"/>.
       ' </summary>
       FileAssociation_Changed = &H8000000

       ' <summary>
       ' The amount of free space on a drive has changed.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the root of the drive on which the free space changed.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' </summary>
       Freespace_Changed = &H40000

       ' <summary>
       ' The contents of an existing folder have changed but the folder still exists and has not been renamed.
       ' <see cref="NotifyFlags.ItemIDList"/> or <see cref="NotifyFlags.PathA"/> must be specified in <i>uFlags</i>.
       ' <i>dwItem1</i> contains the folder that has changed.
       ' <i>dwItem2</i> is not used and should be <see langword="null"/>.
       ' If a folder has been created, deleted or renamed use Directory_Created, Directory_Removed or Directory_Renamed respectively instead.
       ' </summary>
       Update_Directory = &H1000

       ' <summary>
       ' An image in the system image list has changed.
       ' <see cref="NotifyFlags.DWORD"/> must be specified in <i>uFlags</i>.
       ' </summary>
       Update_Image = &H8000

   End Enum

End Class

#End Region