| |  |  | Miembros: Mensajes: Temas: Online: Ultimo Miembro: | | |  | | | 
| 
11-07-2005, 16:18:34
| | Buena Participación en el Foro | | Registrado: feb 2004 Posts: 80
| | Acceso a archivos Hola a todos los del foro
Me explico un poco intento crear un programa que cuando se abra una carpeta o archivo determinado desde el s.o se ejecute el programa en cuestión supongo que será algo parecido al autorun.inf de los cds pero no se por donde empezar si alguien pudiera arrojar algo de luz a este tema le estaría agradecido
Por que la evolución solo existe si el conocimiento esta al alcance de todos
NOTA.- Corregido el error por el que pides disculpas en el siguiente post... | 
11-07-2005, 16:32:33
| | Buena Participación en el Foro | | Registrado: feb 2004 Posts: 80
| | Pido perdón por la grañidísima metedura de pata en el titulo Pido perdón por la grañidísima metedura de pata en el titulo no se lo que me ha pasado | 
14-07-2005, 12:29:01
| | Buena Participación en el Foro | | Registrado: feb 2004 Posts: 80
| | no entiendo muy bien el funcionamiento Hola Alcanto
Quería hacerte una pregunta tiene que esta el programa en ejecución para que funcione. Aun así te ruego evalúes el código que dejo a continuación a ver si interpreto bien el ejemplo, que seguro que no porque no consigo hacerle funcionar
'Crea una entrada llamada `MyApp`.
sKeyName = App.Path ('"MyApp")
sKeyValue = App.Path & "\Proyecto1.exe" '"My Application"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
'Asocia la extensión .BAR a "MyApp".
sKeyName = ".jpg" (.BAR)
sKeyValue = App.Path ( "MyApp")
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
'Establece la ruta de "MyApp".
sKeyName = App.Path (' "MyApp")
sKeyValue = "\padre" ( "c:\mydir\padre %1")
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
Lo que esta entre paréntesis es el código que tenia puesto antes de modificarlo yo
Porque la evolución solo existe si el conocimiento esta al alcance de todos | 
14-07-2005, 12:33:36
| | Buena Participación en el Foro | | Registrado: feb 2004 Posts: 80
| | Perdón Acalanto, lo siento últimamente ando algo despistado siento las molestias causadas | 
14-07-2005, 13:11:47
| | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.266
| | Más o menos sería de esta forma. Código: `Crea una entrada llamada Proyecto1.
sKeyName = "Proyecto1
sKeyValue = "Aplicación para abrir Jpg"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, ``, REG_SZ, sKeyValue, 0&)
`Asocia la extensión .JPG a Proyecto1.exe
sKeyName = ".JPG"
sKeyValue = "Proyecto1"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
`Establece la ruta de Proyecto1.exe.
sKeyName = "Proyecto1"
sKeyValue = "c:\archivos de programa\Proyecto1\Proyecto1.exe"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, `shell\open\command`, REG_SZ, sKeyValue, MAX_PATH)
o de esta otra si lo creas desde el propio ejecutable de Proyecto1 Código: `Crea una entrada llamada Proyecto1.
sKeyName = App.Title
sKeyValue = App.Title
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, ``, REG_SZ, sKeyValue, 0&)
`Asocia la extensión .JPG a Proyecto1.exe
sKeyName = ".JPG"
sKeyValue = App.Title
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
`Establece la ruta de Proyecto1.exe.
sKeyName = App.title
sKeyValue = App.Path+"\"+app.exename+".exe"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, `shell\open\command`, REG_SZ, sKeyValue, MAX_PATH)
De todas formas he de decirte que poner en el sistema una aplicación que gestiones imágenes JPG y que además se llama Proyecto1.exe, como mínimo parece un despropósito que creo deberías valorar adecuadamente. Además estoy seguro que el sistema dispone de un editor de imágenes propio de Microsoft que evidentemente, y sin tratar de menospreciar tu aplicación, estará mucho más probado y contendrá muchos más servicios y utilidades.
No sé, piénsatelo un poco antes de hacer algo así. | 
14-07-2005, 15:51:02
| | Buena Participación en el Foro | | Registrado: feb 2004 Posts: 80
| | Buenas tardes
Bueno acalanto lo primero que haré será explicarme un poco ya que creo que hablamos de cosas distintas, no busco crear un programa de edición de imágenes sino de protección de archivos de mi programa, en el cual tiene una carpeta donde guarda imágenes necesarias para su funcionamiento y que cambian constantemente según su necesidad, es decir supongamos que tengo un programa que almacena imágenes, estas imágenes las guarda en una carpeta del programa, directamente no son visibles pero si el usuario hace una búsqueda por ejemplo con el explorador de Windows y encuentra estas imágenes y sin darse cuenta que son del programa que esta utilizando las elimina el programa fallaría, o no daría los resultados buscados. No se si me explico bien, bueno la idea es proteger estos archivos de alguna manera y mi idea era que cuando intentase abrir, eliminar o modificar el archivo un mensajito por ejemplo este archivo en concreto se esta utilizando en el programa de procesado de archivos por ejemplo no se si me he explicado con claridad de todas formas muchas gracias por tu atención y espero me puedas ayudar a resolver este pequeño problema que tengo entre manos
Nota: pueden ser imágenes, documentos de texto, etc.
Porque la evolución solo existe si el conocimiento esta al alcance de todos | 
14-07-2005, 16:28:34
| | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.266
| | Pues si que te has explicado mal o yo lo he comprendido peor todavía. Me imaginaba que lo que necesitabas era asociar una aplicación a una extensión determinada de archivo y de ahi el contenido de mi respuesta.
Lo que necesitas es más sencillo (aparentemente). Carga la librería Scriplet que te permite manejar el entorno FileSystemObject y con sus métodos puedes cambiar los atributos de los ficheros de esa carpeta.
Si los pones como 'ocultos' y de 'sistema' el propio explorador advertirá que esos ficheros no se deben eliminar.
Si lo que deseas es garantizar que absolutamente nadie pueda eliminarlos, lo mejor es crear una pequeña aplicación que se cargue al inicio de windows y que mantenga todos los ficheros de la carpeta abiertos (En modo shared), de esta forma el explorador se negará a borrarlos porque recibira una excepción de 'violación de acceso compartido'.
No sé si me he explicado | 
15-07-2005, 10:20:50
| | Buena Participación en el Foro | | Registrado: feb 2004 Posts: 80
| | Es que me explico como un libro cerrado, en fin muchas gracias esto si me sirve pero ¿podrías extenderte en la explicación de modo shared y esto para que pueda empezar a trastear con ello?¿ tienes algún ejemplo que me pueda interesar? el tema de que se ejecute cuando se inicia lo conozco pero la librería que indicas o el modo shared no se como hacerlo, y ¿de hacerlo en el modo shared me daría algún problema si mi programa las eliminase o modificase? en fin, me aclaras bastante el problema pero ahora me inundo de dudas ya que no estoy familiarizado con la librería que debo utilizar ni como hacerlo
Atentamente un saludo Acalanto
Porque la evolución solo existe si el conocimiento esta al alcance de todos | 
17-07-2005, 11:12:40
| | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.266
| | Vamos por partes:
La idea de proteger ficheros para que nadie pueda eliminarlos/modificarlos me resulto atractiva desde el punto de vista de incluirlo en mis aplicaciones.
Inicialmente generé un pequeño proyecto que modificaba los atributos de los ficheros de una determinada carpeta a (Oculto+Sytem), además está aplicación genera un nuevo registo en RUN con lo que garantizo que arranca automáticamente con el Sistema operativo.
A pesar de que lo hace correctísimamente bien, no impide que el usuario pueda visualizar ficheros ocultos (Con el explorador). Al estar marcados como ficheros de sistema, si el usuario (los visualiza) ordena eliminar un fichero, el explorador le advierte que es un fichero de sistema y no debería borralo, pero no se lo impide..... ??.
La siguiente idea pasa por abrir los ficheros para que nadie pueda eliminar/borrar. Como es lógico nuestras aplicaciones deberían tener que acceder al contenido por lo que su apertura debería ser en 'modo compartido' <Open [nombrefichero] for binary SHARED as #fhandle>. Todo esto es correcto sino fuese porque el sistema operativo también permite que un fichero abierto en modo shared, sea eliminado.
La solución final es abrirlos en modo exclusivo pero esto impide que nuestra propia aplicación tenga acceso a esos datos. Para tratar de solucionar este 'escollo' he tratado de diseñar una arquitectura en la que la aplicación que bloquea actúe al tiempo como proveedor/manipulador de estos ficheros mediante comandos enviados por sockets (Como si de un servidor FTP se tratara.).
Además sería necesario implementar un mecanismo que impida que la aplicación /servicio se descargue con el administrador de tareas.
En definitiva se trata de posicionarse por encima del propio sistema operativo y 'darle la vuelta' más o menos como hacen los desarrolladores de virus e infecciones para evitar que sus aplicaciones sean borradas/desinstaladas.
No es imposible (y si quieres te adjunto el proyecto -inacabado-), pero he llegado a la conclusión de que si para evitar que un usuario BORRE Microsoft Office con el explorador, hemos de rediseñar el sistema operativo, estamos perdiendo el enfoque y sacamos las cosas de contexto.
En definitiva creo que l mejor es que optes por la solución más lógica que es modificar los atributos y si un usaurio modifica o elimina unos ficheros de sistema, pues allá él; tendrá que reinstalar e incluso se le podrán dar un par de collejas correctivas.
Para ello debes declarar en el proyecto la referencia Microsoft Scripting Runtime y escribir algo parecido a ésto Código: Public Sub LockFiles(folder as string)
Dim fd As folder, fc As File, fs As Files
Dim fso as new FileSystemObject
On Local Error Resume Next
'Solicitamos los ficheros de toda la carpeta
Set fd = fso.GetFolder(folder)
Set fs = fd.Files
'Rastreamos el contenido de la carpeta solicitada
For Each fc In fs
'Declaramos el fichero como Oculto, solo lectura y de sistema
fc.Attributes = (Hidden + System)
Next fc
End Sub
Intentar cualquier otra cosa me parece que va a hacer más costoso el envoltorio que el propio caramelo.
Espero que este rollo te resulte útil. | | Herramientas | | | | Desplegado | Mode Lineal |
Normas de Publicación
| no Puedes crear nuevos temas no Puedes responder a temas no Puedes adjuntar archivos no Puedes editar tus mensajes Código [IMG] está habilitado Código HTML está deshabilitado | | | La franja horaria es GMT. Ahora son las 22:25:01.
Powered by vBulletin® Version 3.6.8 Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design
|  |