Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 04-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pues la verdad, hacerlo como pretende es escabroso, pero yo creo que ya es una cuestión de curiosidad, a ver si le sale, más que por una cuestión práctica, y como él dice:
Cita:
Empezado por Negriz Ver Mensaje
de todas manreas voy a prbar algunas cosas, dependiendo lo que pase lo posteo, muchas rgacias por ayudarme, no saben cuanto he aprendido con esta discusion,
muchas gracias.
Negriz, prueba ese último código, puede funcionar, aunque no "al pié de la letra" según lo has citado. Experimenta. En una ocasión yo hice un programa para hacer una broma a un compañero de trabajo. Consistía en localizar cuando estaba jugando, para lo que utilizaba FindWindow y WindowFromPoint. Localizada la ventana del juego y conociendo que estaba en primer plano y con actividad (movimiento de ratón), esperaba 10 segundos y le minimizaba la ventana.....Fue divertido y aprendí mucho.
Responder Con Cita
  #22  
Antiguo 07-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Talking

Cita:
Empezado por keyboy Ver Mensaje
Disculpen esta breve interrupción.

Me gustaría preguntarle a Negriz cuál es la necesidad de actualizar la ventana del explorador. Lo pregunto porque la API de Windows cuenta con la función ShChangeNotify, que hasta donde entiendo, sirve para notificar al shell acerca de cambios que una aplicación puede hacer que lo afecten. Eso incluye agregar o borrar archivos y directorios. Si la necesidad de actualizar la ventana del explorador viene de algo por este estilo, quizá le sea más conveniente usar la función referida y no depender así de cosas como el título de la ventana, que, como ya comentó escafandra, es poco fiable.

Bye
Lo que pasa es, supongamos que se hace un cambio en el desktop.ini de una carpeta para poner una imagen de fondo en ella; la idea es que apenas este cambio dse haga, dicha carpeta se actulize para que se vea la img.
Otro ejemplo es cuando cambias un icono con TuneUP o algun otro programa cuando aceptas los cambios, los iconos se refrescan.
algo asi mas o menos es lo que se desea hacer.

Cita:
Empezado por escafandra Ver Mensaje
Pues la verdad, hacerlo como pretende es escabroso, pero yo creo que ya es una cuestión de curiosidad, a ver si le sale, más que por una cuestión práctica.

En una ocasión yo hice un programa para hacer una broma a un compañero de trabajo. Consistía en localizar cuando estaba jugando, para lo que utilizaba FindWindow y WindowFromPoint. Localizada la ventana del juego y conociendo que estaba en primer plano y con actividad (movimiento de ratón), esperaba 10 segundos y le minimizaba la ventana.....Fue divertido y aprendí mucho.

Muchas gracias a todos por sus comentarios.
La verdad... eso es verdad, valga la redundancia.
yo quiero aprender y este tema me ha ayudad mucho.

saludos desde colombia.

keyboy voy a mirar la funcion. gracias.

Última edición por Negriz fecha: 07-04-2008 a las 19:30:12.
Responder Con Cita
  #23  
Antiguo 09-04-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por Negriz Ver Mensaje
Hola de nuevo mi pregunta es que si puedo hacer que mi aplicacion al salir (onClose event) refresque el explorer, es decir como si se presionara F5 o click derecho actualizar.

muchas gracias.
Código:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
}
PD: solo para nutrir un poco el hilo

Saludos
Responder Con Cita
  #24  
Antiguo 11-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
Código:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
}
PD: solo para nutrir un poco el hilo

Saludos
Eso es lo que deseo hacer pero un poco mas especifico como haz podido leer, pero no es mala la idea, el codigo que colocaste funciona? porque la verdad no habia pensado en eso, cunado se cierre el programa que actualize.

Última edición por Negriz fecha: 11-04-2008 a las 16:15:11.
Responder Con Cita
  #25  
Antiguo 14-04-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por Negriz Ver Mensaje
...el codigo que colocaste funciona?
Dimelo tú

Última edición por cHackAll fecha: 14-04-2008 a las 03:40:30.
Responder Con Cita
  #26  
Antiguo 21-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
Dimelo tú
Si... Tienes razon...
aunque lo prbe pero lo probe y no se adapta a lo que neceisto...

ShChangeNotify... como es la sintaxis??? que pena pero mis conocimientos no son muy grandes...
Saludos y gracias.

Última edición por Negriz fecha: 21-04-2008 a las 03:14:43.
Responder Con Cita
  #27  
Antiguo 21-04-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Si, también funciona;

Código:
SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 SHChangeNotify(0x8000000L/*SHCNE_ASSOCCHANGED*/, 0/*SHCNF_IDLIST*/, NULL, NULL);
}
ó

Código Delphi [-]
uses ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

Saludos

Última edición por cHackAll fecha: 21-04-2008 a las 16:30:25.
Responder Con Cita
  #28  
Antiguo 30-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
Si, también funciona;

Código:
SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 SHChangeNotify(0x8000000L/*SHCNE_ASSOCCHANGED*/, 0/*SHCNF_IDLIST*/, NULL, NULL);
}
ó

Código Delphi [-]
uses ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

Saludos
hola como estan...me disculpo por no haber dejado una respuesta en tanto tiempo.. pero es que estado un poco ocupado.

voy a probar.

Gracias
Responder Con Cita
  #29  
Antiguo 07-05-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Nop, ya probe y no hace lo que esperaba.... aunque es muy util, ya que si cambio el autorun de la usb para darle un nuevo icono
esta funcion lo acutaliza (aveces) sin necesidad de sacarla y meterla de nuevo.

con respecto al explorer... no pasa nada.

no se si conocen el Desktop.ini
bueno un amigo me pidio que le hiziera algo donde el seleccionara la imagen y el programa le creara el desktop y le actualizara la imagen al salir....

ese es mi objetivo y por eso hize esta pregunta???

de todas maneras muchas gracias.... la verdad com dijo el amigo escafandra la verdad no esperaba averiguar tanto aca....

gracias.
Responder Con Cita
  #30  
Antiguo 09-05-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Este es un exelente foro....
es uno de los emjores.

Grcias.

El Negriz.
Responder Con Cita
  #31  
Antiguo 12-05-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
hola...

Alguna otra sugerencia para actualizar el Desktop???

Grcias.
Responder Con Cita
  #32  
Antiguo 26-05-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
hola, gracias a todos por la ayuda.

he probado con la funcion SHChangeNotify... ahun si exito, pero creo que la solucion esta alli...

Gracias a todos...
Se acepatan sugerencias...

Saludos. El Negriz
Responder Con Cita
  #33  
Antiguo 09-10-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Me gustaría resucitar este hilo para aportar un detalle útil en este tema, al menos para mi.

Código:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
Que propuso cHackAll funciona muy bien, pero al actualizar el explorador, borra los ListView y los reescribe, con lo que el efecto visual de "apagón" o "parpadeo" no es muy elegante en máquinas lentas, aunque muy efectivo.

He traceado los mensajes del explorador y he visto dos cosas interesantes:
1º Al pulsar F5 se genera un mensaje WM_COMMAND LPARAM 0x1A220 LPARAM 0

2º Al elegir la opción de menú ver \ actualizar, se genera un mensaje WM_COMMAND LPARAM 0x0A220 LPARAM 0

Así que:
Código:
  PostMessage(HWND_BROADCAST, WM_COMMAND, 0x0A220, 0);
Actualiza inmediatamente el explorador de archivos sin parpadeo, como si lo hiciésemos desde menú o pulsando F5

La pega está en que este sistema es muy dependiente del software del explorador actual y si Microsoft lo cambia dejará de funcionar, así como no funcionará, muy posiblemente, en otros exploradores.

Como curiosidad, me ha parecido interesante publicarlo.

Saludos.
Responder Con Cita
  #34  
Antiguo 10-10-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, he de hacer una aclaración a mi post anterior.

El sistema funciona tal cual, pero SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); envía a "todas" las ventanas top-level. He comprobado que algunos elementos del Microsoft Office reaccionan mal a ese mensaje y se cuelgan.

Como la idea me sigue pareciendo buena, he creado un código para enviar el mensaje a todas las ventanas de una determinada clase (ClassName) con lo que el "bug" queda solucionado. Publico el código, considero que puede ser interesante para otras utilidades también.

Código:
// Estructura con los datos del mensaje a enviar y el nombre de la clase de ventana
struct TClassMsg{
   UINT   Msg;
   WPARAM wParam;
   LPARAM lParam;
   char*  ClassName;
};

BOOL CALLBACK EnumWindowsProc(HANDLE Handle, LPARAM lParam)
{
   int SizeBuffer = 256;
   char* Buffer = new char[SizeBuffer+1];
    TClassMsg *ClassMsg =  (TClassMsg*)lParam;
   int S = GetClassName(Handle, Buffer, SizeBuffer);
   if(S)
   if(stricmp(Buffer, ClassMsg->ClassName)==0){
      // Si coincide el ClasName con el deseado, se envía el mensaje
      PostMessage(Handle, ClassMsg->Msg, ClassMsg->wParam, ClassMsg->lParam);
   }

   delete Buffer;
   return true;
}

typedef BOOL (__stdcall *TP)();
void PostMessageToWindowClass(char *ClassName, UINT Msg, WPARAM wParam, LPARAM lParam)
{
  TClassMsg ClassMsg;

  ClassMsg.Msg = Msg;
  ClassMsg.wParam = wParam;
  ClassMsg.lParam = lParam;
  ClassMsg.ClassName = ClassName;
  
  // Enumero las ventanas
  EnumWindows((TP)EnumWindowsProc, LPARAM(&ClassMsg));
}
Y para usarlo con los fines que propongo:
Código:
PostMessageToWindowClass("CabinetWClass", WM_COMMAND, 0x0A220, 0);
Por supuesto que puede ser mejorado y si alguien lo hace incluso lo agradezco.

Saludos.

Última edición por escafandra fecha: 10-10-2008 a las 21:34:20.
Responder Con Cita
  #35  
Antiguo 15-10-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
pues la verdad si estab un poco muerto, voy a mirar gracias.
Responder Con Cita
  #36  
Antiguo 07-11-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
pues va de maravilla, muchas gracias...
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tab en el Explorador de Windows vtdeleon Noticias 2 16-05-2007 00:14:09
FlashMemory no se ve en Explorador Deiv Windows 5 16-02-2007 00:28:58
Ejecutar un PHP sin explorador majaco Internet 1 24-04-2006 17:24:34
Problemas con el Explorador con las PC en Red santi33a Windows 0 20-12-2005 17:16:46
Explorador de directorios. zugazua2001 Varios 1 08-06-2005 17:48:54


La franja horaria es GMT +2. Ahora son las 09:54:15.


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