Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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
Saludos.
Responder Con Cita
  #2  
Antiguo 01-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 19
Negriz Va por buen camino
Talking

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.
Responder Con Cita
  #3  
Antiguo 03-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código:
 char* Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar
Significa lo que dice, no es el nombre del fichero ejecutable, sino el caption, el texto que aparece escrito encima de la ventana. Es el nombre por el que la reconoce esa API, y que tienes que conocer, de ahí la dificultad que plantea en diferentes máquinas. Por ejemplo, los caption pueden cambiar según el idioma...

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>
Responder Con Cita
  #4  
Antiguo 03-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 19
Negriz Va por buen camino
Lightbulb

Cita:
Empezado por escafandra Ver Mensaje
Código:
 char* Nombre_de_ventana[] = "Nombre"; // Caption de la ventana a buscar
Significa lo que dice, no es el nombre del fichero ejecutable, sino el caption, el texto que aparece escrito encima de la ventana. Es el nombre por el que la reconoce esa API, y que tienes que conocer, de ahí la dificultad que plantea en diferentes máquinas. Por ejemplo, los caption pueden cambiar según el idioma...

Así que no tienes que poner ningún nombre de ruta....
aaa, gran problema y si le pido al usuario el nombre de su ventana?

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
}
pero me decia en la linea char* Nombre_de_la_clase[] = "TApplication"; // o Nulo me salia un error que decia "wanted (o algo asi: need o wait) *char got **char"; la idea es que esperaba algo y recivio otro.
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
}
y compila, pero cuando presiono el boton no pasa nada, y la ventan donde esta el ejecuable no se actualiza...
Aclaro que las modificaciones que hize no son basadas en experiencia, solo estaba probando.

Gracias por su ayuda.
saludos.
Responder Con Cita
  #5  
Antiguo 04-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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
  }
}
El error estaba en definir un puntero a un puntero char* P[]. Cuando lo que quería definir es un puntero a una cadena, es decir o simplemente char* P ó char P[].

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.
Responder Con Cita
  #6  
Antiguo 04-04-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 19
Negriz Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 04-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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);
La mejor forma de experimentar con FindWindow es colocar el caption que tu veas en la ventana que quieres localizar.



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);
Saludos.

Última edición por escafandra fecha: 04-04-2008 a las 19:40:35. Razón: Aclaración
Responder Con Cita
  #8  
Antiguo 04-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 02:07:28.


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