FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Como actualizar el explorador
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. |
#2
|
||||
|
||||
Bueno, esto que voy a decir puede funcionar o no...
La cosa sería encontrar la ventana del explorador. Eso se hace con la función de la API llamada FindWindow. Después uno le pasaría un mensaje con la función PostMessage pasándole la tecla F5 y el mensaje WM_KEYDOWN. Todo esto suena muy lindo, pero el problema es encontrar la ventana con FindWindow. Esta función necesita saber, o bien el título de la ventana o la clase de la ventana. La primera es imposible de saber, y la segunda... bueno, también Quizás tengas que explorar estos dos conceptos y ver qué pasa. Saludos y suerte. |
#3
|
||||
|
||||
Cita:
pido disculpas por no haber formulado bien la pregunat, cuando me referia al explorador no queria decir "Internet explorer" o software similar.... solo pregunatava como hacer que se actaulizara "Mi Pc" por ejemplo o culaquier otra carpeta de windows. muchas gracias "Lord Delfos" por tu respuesta y con respecto a la misma... No me queda muy claro: 1) FindWindow se usa cuando no conozco la carpeta sierto... pero si ya se que carpeta es; por ejemlo la carpeta donde se esta ejecutando el programa o le solicito el directorio a la persona que usa el progrma... sirve? es decir le puedo dar estos datos a FindWindow. (Me podria dar la sitaxis). 2) la verdad no entiendo la forma de usar PostMessage. muchas gracias por tu respuesta de verdad me ha sido de mucha ayuda... por lo menos ya tengo por donde empezar... Gracias |
#4
|
||||
|
||||
aquí tienes las respuestas:
http://msdn2.microsoft.com/en-us/library/ms633499.aspx http://msdn2.microsoft.com/en-us/library/ms644944(VS.85).aspx Saludos. |
#5
|
||||
|
||||
No me queda muy claro
He leido lo que me diste escafandra, pero no me queda muy claro como usarlo en c++ builder.
no es por que este en ingles, sino porque como no tengo un ejemplo ni la sintaxis adecuada para poder utilizarlo. Alguno deustedes me podria ayudar con esto. Muchas gracias por sus comentarios han sido de verdad de mucha ayuda. Gracias. |
#6
|
||||
|
||||
Código:
char* Nombre_de_la_clase[] = "TApplication"; // o Nulo char* Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar HWND H = FindWindow(Nombre_de_la_clase, Nombre_de_ventana); // Handle de la ventana buscada PostMessage es una API y tambien una función del propio Builder. Revisa el concepto de mensage. Revisa en la ayuda de Builer los tipos de mensaje. Busca WM_..... Saludos. |
#7
|
||||
|
||||
Muchas Gracias
Cita:
Muchas Gracias voy a provar. |
#8
|
||||
|
||||
disculpa escafandra, en la primera linea para que me sirve el nombre de la clase y que siginifica el ""TApplication";
char* Nombre_de_la_clase[] = "TApplication"; // o Nulo gracias. |
#9
|
|||
|
|||
De la ayuda de C++ Builder:
Cita:
|
#10
|
||||
|
||||
Cita:
Para el uso de la API, necesitas el nombre de la clase en una cadena de caracteres, es decir "TApplication" que es un char* Código:
char* Nombre_de_la_clase[] = "TApplication"; Saludos. |
#11
|
||||
|
||||
Osea que:
HWND H = FindWindow(Nombre_de_la_clase, Nombre_de_ventana); // Handle de la ventana buscada me almacena en la variavle HWND H la ventana que queria actualizar y ahora solo tengo que usar PostMessage... el problema es: BOOL PostMessage( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); lo que conozco es: HWND hwnd, es la H en donde se guardo lo de FindWindow. UINT Msg, es el mensage que quiero mostrar mos o msenos mi idea. pero la verdad no tengo conocimiento de los datos que siguien... Gracias por su ayuda, pido discupas por las molestias, pero una cosa mas... que son esos datos de postmensage. Gracias. Saludos. |
#12
|
||||
|
||||
Para enviar el mensaje de presionar una tecla (F5):
Código:
PostMessage(H, WM_KEYDOWN, VK_F5, 1); // Presionar PostMessage(H, WM_KEYUP, VK_F5, 1); // Soltar |
#13
|
||||
|
||||
entonces mi ocdigo terminaria asi:
char* Nombre_de_la_clase[] = "TApplication"; // o Nulo // esto no se cambia char* Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar // ¿aqui puedo poner el ombre de la ventana si ya la conozoco?... es decir, la ventana que deseo actualizar es donde esta el ejecutable. //¿Pero pongo el nombre de la carpeta o la ruta a la carpeta? //...continua el codigo HWND H = FindWindow(Nombre_de_la_clase, Nombre_de_ventana); // Handle de la ventana buscada //y luego le mando el mensage tal y como está? osea: PostMessage(H, WM_KEYDOWN, VK_F5, 1); // Presionar PostMessage(H, WM_KEYUP, VK_F5, 1); // Soltar una ultima pregunta... ¿que bibliotecas tengo que declarar? muchas gracias. |
#14
|
||||
|
||||
Código:
char* Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar Así que no tienes que poner ningún nombre de ruta.... Si tu código, donde usas esa API, esta definido en el archivo de un formulario, donde se definen los archivos.h para el uso de las VCL, entonces no tienes que incluir nada más, por defecto ya esta incluido. Si no es así: Código:
#include <winuser.h> |
#15
|
||||
|
||||
Cita:
mira, lo probe de la sigt manera: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { char* Nombre_de_la_clase[] = "TApplication"; // o Nulo char* Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar HWND H = FindWindow(Nombre_de_la_clase, Nombre_de_ventana); // Handle de la ventana buscada. PostMessage(K, WM_KEYDOWN, VK_F5, 1); // Presionar PostMessage(K, WM_KEYUP, VK_F5, 1); // Soltar } y en la otra donde llamo FindWindow, me salia "no se puede convertir *char en **char" pero luego lo puse asi: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString s = Application->ExeName; AnsiString ExePath = ExtractFilePath(s); char Nombre_de_la_clase[] = "TApplication"; // o Nulo//quito el * HWND K = FindWindow( Nombre_de_la_clase, ExePath.c_str() );// Handle de la ventana buscada PostMessage(K, WM_KEYDOWN, VK_F5, 1); // Presionar PostMessage(K, WM_KEYUP, VK_F5, 1); // Soltar } Aclaro que las modificaciones que hize no son basadas en experiencia, solo estaba probando. Gracias por su ayuda. saludos. |
#16
|
||||
|
||||
Tienes razón en una cosa, equivoqué una parte del código. Debe ser así:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { char Nombre_de_la_clase[] = "TApplication"; // o Nulo char Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar HWND H = FindWindow(Nombre_de_la_clase, Nombre_de_ventana);// Handle de la ventana buscada. //Si falla (H == NULL), por lo que no tiene sentido seguir... if(H){ ::SendMessage(H, WM_KEYDOWN, VK_F5, 1); // Presionar ::SendMessage(H, WM_KEYUP, VK_F5, 1); // Soltar } } Sigues cometiendo el error de confundir el caption de la ventana con la ruta Path o el nombre del ejecutable. Haz lo siguiente: Abre una ventana del explorador, abre una carpeta (el caption puede variar al cambiar la carpeta visualizada) mira el caption y colocalo en tu código. FindWindow te devuelve un HANDLE a esa ventana, si es nulo quiere decir que no la ha localizado, en caso contrario te vale, de forma que la simulación de presionar un botón esta condicionada a que el HANDLE no sea nulo. |
#17
|
||||
|
||||
hola, gracias por tu respuesta, mi pregunta es esta:
¿la caption de la ventana es el nombre de la carpeta? si es asi: ¿no se supone que en la ruta esta el nombre de la carpeta? ¿y si saco solo el nombre de la carpteta de la ruta?¿funcionaria? 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. saludos desde Colombia. |
#18
|
||||
|
||||
Pues es posible que en el explorador el Caption sea el nombre de la carpeta, el problema es que no puedes estar seguro de esto no va a cambiar de una maquina a otra o de un Sistema Operativo a otro (versiones nuevas de Windows), o con una opción de configuración nueva... Pero si estás seguro de que siempre va a corresponder el Caption del explorador con el nombre de la carpeta, pues adelante.
Otra cosa, no pongas Nombre_de_Clase "TApplication", eso es para aplicaiones delphi o builder, coloca en su lugar NULL: Código:
HWND H = FindWindow(0, Nombre_de_ventana); Puedes experimentar también con otra API: WindowFromPoint. Te permite localizar la ventana que contiene un punto, que puede ser por ejemplo el cursor del ratón... Código:
TPoint Point; ::GetCursorPos(&Point); HWND h = WindowFromPoint(Point); Última edición por escafandra fecha: 04-04-2008 a las 19:40:35. Razón: Aclaración |
#19
|
||||
|
||||
¿estamos hablando de la barra de titulo?
si es asi en windows he visto que en la caption hay dos posibilidades: que solo se muestre el nombre de la carpeta o que se muestre toda la ruta en el titulo, si comparo is esta toda o solo la carpeta, es decir. Cita:
El problema es que este no es mi PC y tengo que ver el code e ir a mi casa aprobar. Saludos |
#20
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|