Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: okik en 2 Abril 2015, 12:44 pm



Título: Carpeta personalizada
Publicado por: okik en 2 Abril 2015, 12:44 pm
Hola

Quiero desde VB (net o 6) crear una carpeta personalizada. Esto es, una carpeta que contiene un archivo INI, el cual indica el icono que ha de usar la carpeta y la imagen de fondo que ha de mostrar.

Lo del archivo INI ya se como va. El caso es que se hacerlo manualmente, pero no se si habrá alguna API o Script para crearla directamente desde una apliación y luego desde el programa modificar el archivo INI.

He probado de usar un código CLSID, nombrando la carpeta:

Nombre.{450d8fba-ad25-11d0-98a8-0800361b1103}

Entonces, en este caso, la carpeta se convierte en una carpeta "MyDocuments", pero no se crea el archivo "Desktop.ini"

Gracias



Título: Re: Carpeta personalizada
Publicado por: okik en 7 Abril 2015, 11:28 am
Hola,

Gracias a todos por las respuestas (ironía) ;-)

Pues no entiendo como nadie ha respondido, pues no era muy difícil. Quizás no me expliqué bien...

Finalmente encontré la respuesta y hay tres formas de crear la carpetas personalizada:

1ra. Usando el comando de consola attrib. Donde +s convierte la carpeta en carpeta del sistema y -s la deshabilita como tal y  +h convierte una carpeta o archivo en 'oculto'. -h la convierte en carpeta o archivo visible.

Código
  1. Shell "cmd /r attrib +s """ & strFolder & """"
  2. Shell "cmd /r attrib +h """ & strFolder & "\Desktop.ini"""
  3.  


2da. Utilizando la declaración API SetFileAttributes y el atributo FILE_ATTRIBUTE_SYSTEM del kernel32.dll
Al usarse attrib.exe deduje que era cuestión de cambiar el atributo a "system". Además importé las declaraciones API de attrib.exe a ver que usaba y vi que usaba SetFileAttributes para cambiar el atributo.

Código
  1. Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" _
  2. (ByVal lpFileName As String, _
  3. ByVal dwFileAttributes As Long) As Long
  4. Private Const FILE_ATTRIBUTE_SYSTEM = &H4
  5.  



3ra. Utilizando la declaración API PathMakeSystemFolder que se encuentra en shlwapi.dll
Esta forma quizás no es tan conocida. Lo econtré en una página china http://tech.sina.com.cn/s/2005-02-25/0927535579.shtml (http://tech.sina.com.cn/s/2005-02-25/0927535579.shtml) Convierte directamente la carpeta en carpeta del sistema.

Código
  1. Private Declare Function PathMakeSystemFolder Lib "shlwapi.dll" _
  2. Alias "PathMakeSystemFolderA" _
  3. (ByVal pszPath As String) As Long
  4.  

Tras convertir la carpeta a "carpeta del sistema", se puede crear un archivo Desktop.ini en su interior y ahora sí este archivo ini es permitido (o leído) y se puede establecer la personalización de la carpeta.