Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Avisar a Windows que los archivos cambiaron

Hola,

Estoy copiando archivos de un directorio a otro con Delphi y la carpeta destino no me muestra los nuevos archivos sino hasta que oprimo F5. Creo recordar que existe una forma de avisarle a Windows por código que hubo cambios en el sistema de archivos para actualice el shell.

¿Saben algo de esto?

// Gracias
Responder Con Cita
  #2  
Antiguo 21-04-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
SHChangeNotify ??
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 21-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Gracias, justo andaba ahorita probando

ShChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH, PChar(Folder), nil);

donde Folder es un string con el nombre de la carpeta destino pero no se entera (Windows).

Aclaro un poco, lo que realmente estoy haciendo es cambiar a minúsculas los nombres de todos los archivos de un directorio con RenameFile. Quizá deba mejor usar ShFileOperation aunque pienso que debería funcionar así.

// Saludos
Responder Con Cita
  #4  
Antiguo 22-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, pues aún no encuentro qué es lo que falla en la llamada a ShChangeNotify pero por mientras veo que

ShChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);

sí funciona aunque no se supone que esté cambiando ninguna asociación de archivos (SHCNE_ASSOCCHANGED) y tiene le defecto de actualizar todo el shell y no sólo el folder deseado.

// Saludosmil
Responder Con Cita
  #5  
Antiguo 22-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hola.
  • Has probado con folder incluyendo y no incluendo el último slash (\)
  • enviar el path en ambos parámetros
  • solo en el segundo parámetro (no suena lógico.. pero parece que estamos en prueba y error, no?
y como la documentación no es muy clara al respecto...

me pareció interesante también este que encontré en la msdn, pero que no está en mi ayuda del sdk...
Cita:
SHCNE_RENAMEITEM
The name of a nonfolder item has changed. SHCNF_IDLIST or SHCNF_PATH must be specified in uFlags. dwItem1 contains the previous PIDL or name of the item. dwItem2 contains the new PIDL or name of the item.
Lo siento, pero es lo único que se me ocurre...

Hasta luego.



pd. felicidades por los dos mil mensajes!!
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 22-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
ups... por si no lo tenias, aqui está la referencia a la msdn sobre esta función...

http://msdn.microsoft.com/library/de...angenotify.asp

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 22-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Gracias jachguate.

De hecho tengo el msdn instalado en mi pc pero por alguna razón no me está funcionado como pensaba.

// Saludos
Responder Con Cita
  #8  
Antiguo 22-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ups, me estaba saltando este mensaje.


Cita:
Empezado por jachguate
Hola.
  • Has probado con folder incluyendo y no incluendo el último slash (\)
  • enviar el path en ambos parámetros
  • solo en el segundo parámetro (no suena lógico.. pero parece que estamos en prueba y error, no?
y como la documentación no es muy clara al respecto...

me pareció interesante también este que encontré en la msdn, pero que no está en mi ayuda del sdk...
Probé ya lo de slash pero no lo del segundo parámetro. Al rato pruebo porque ahora mismo mi estomago está protestando. Lo del SHCNE_RENAMEITEM ya lo había visto pero tampoco me funcionó. Intenté usarlo en cada renombrado.

Seguiré intentando. Tengo la sospecha de que funcionaría si en lugar de usar paths uso idlists pero se me complica la cosa para obtener el idlist del folder (se me hace demasiado para este 'caprichito' mio). Según el msdn existe la función SHILCreateFromPath para obtener el idlist a partir del nombre pero no he encontrado esta función en Delphi ni con un FindInFiles.

Muchas gracias por el interés y por las felicitaciones.

// Saludos
Responder Con Cita
  #9  
Antiguo 22-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Angry

Debí haberlo supuesto

El primer intento con

ShChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH, PChar(Folder), nil);

era correcto...

siempre y cuando no estemos trabajando en PlayStation, perdón, quize decir Windows XP.

Ahora a buscar cómo se hace en XP

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:36:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi