Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Mandar teclas a otra aplicación de windows (https://www.clubdelphi.com/foros/showthread.php?t=79644)

juank1971 25-07-2012 18:31:34

Mandar teclas a otra aplicación de windows
 
Saludos esto usando esta función:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  hwndotrapp: THandle;
begin
  hwndotrapp := Windows.FindWindow(nil,'index.html - Google Chrome');
  if hwndotrapp > 0 then
  begin
    SetForegroundWindow(hwndotrapp); // Cambia el foco
    keybd_event(VK_F5, 0, 0, 0);

  //  SetForegroundWindow(Handle); // Cambia el foco

  end;

end;

Para mandar a refrescar el navegador cuando lo necesite y lo realiza sin problemas pero con la linia SetForegroundWindow(Handle); comentada, cuando la descomento me retorna el foco sin problemas a mi aplicaion pero no realiza el envío de la tecla, cuando comento esa linea me realiza sin problemas lo que necesito en el navegador que esta en la otra ventana pero no me rotorna el foco a mi aplicacion como es logico.

alguna idea???

Lo que estoy haciendo es un editor visual de HTML5 y CSS, he tratado de usar el webbrowser pero el internet explorer esta muy atrás con referencia a otros navegadores , he probado con el Chrome Frame y mejora un poco el TWebBrowser, pero no es suficiente para todo lo necesario del html5.

Entonces me fui por la via de hacer los cambios necesarios y mandar a refrescar el navegador desde delphi y me sucede ese problema.

Gracias
salud y pesetas Juank
Uso delphi XE con windows seven

juank1971 25-07-2012 18:33:49

probe de esta otra manera que vi tambien en estos foros pero me hace lo mismo

cuando le pongo la funcion que retorna el foco no ejecuta la tecla enviada

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var hw:integer;
begin
hw:=findwindow(nil,'t.html - Google Chrome');
if hw>0 then
  postmessage(hw,VK_F5,97,0);

 //  SetForegroundWindow(hw); // Cambia el foco
end;

roman 25-07-2012 19:07:22

Intenta poner un Application.ProcessMessages antes del segundo SetForegroundWindow.

// Saludos

roman 25-07-2012 19:21:13

Cita:

Empezado por juank1971 (Mensaje 438191)
Lo que estoy haciendo es un editor visual de HTML5 y CSS, he tratado de usar el webbrowser pero el internet explorer esta muy atrás con referencia a otros navegadores , he probado con el Chrome Frame y mejora un poco el TWebBrowser, pero no es suficiente para todo lo necesario del html5.

Hay un webbrowser basado en google chromium con soporte para delphi. En el hilo Usar chromium dentro del aplicativo se habla del componente y como instalarlo.

// Saludos

juank1971 25-07-2012 20:21:13

ya funciona
 
Gracias roman:

Pero no me funciona con el proccessmasage.
sin embargo probe los dos procedimientos juntos y si funciona, el diablo son las cosas.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var hw:thandle;
  hwndotrapp: integer;
begin
  hwndotrapp := Windows.FindWindow(nil,'index.html - Google Chrome');
  if hwndotrapp > 0 then
  begin
    SetForegroundWindow(hwndotrapp); // Cambia el foco
    keybd_event(VK_F5, 0, 0, 0);

   SetForegroundWindow(Handle); // Cambia el foco
  end;

  hw:=findwindow(nil,'index.html - Google Chrome');
if hw>0 then
 // postmessage(hw,VK_F5,97,0);
 PostMessage(hw, WM_KEYDOWN, VK_F5, 0);
memo1.setfocus;
end;

con esto edito y el navegador se refresca cuando deceo y me devuelve el cursor al editor de nuevo.

Gracias por la respuesta, lo que me comentas en el lugar donde me encuentro ahora no puedo hacer el download en ese lugar de google.

Lo del chromium, no lo he probado, pero pienso que debe tener lo mismo que chrome frame que mejora considerablemente el twebbrowser pero no llega a tener todo lo necesario para html5 como el mismo chrome.
Fíjate le puse el ie la ultima versión de Chrome Frame y no llega a verse el sitio en html5 en IE igual que en el google chrome verdadero.
la versión de Chrome Frame es la misma 20 y el google chrome también es la 20.

Gracias muchas si alguno quiere usar lo antes comentado como mejor me resulto fue poniendo los dos procedimientos.

salud y pesetas

ecfisa 25-07-2012 20:58:50

Cita:

Para mandar a refrescar el navegador cuando lo necesite y lo realiza sin problemas pero con la linia SetForegroundWindow(Handle); comentada, cuando la descomento me retorna el foco sin problemas a mi aplicaion pero no realiza el envío de la tecla, cuando comento esa linea me realiza sin problemas lo que necesito en el navegador que esta en la otra ventana pero no me rotorna el foco a mi aplicacion como es logico.
Hola juank1971.

Intenta de este modo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  H: HWND;
begin
  H := FindWindow(nil, 'Club Delphi - Mozilla Firefox');
  if H <> 0 then
  begin
    SetForegroundWindow(H);
    EnableWindow(H, False);
    keybd_event(VK_F5, 0, WM_KEYDOWN, 0);
    EnableWindow(H, True);
    SetForegroundWindow(Handle);
  end;
end;

Saludos.

roman 25-07-2012 21:12:55

Cita:

Empezado por juank1971 (Mensaje 438201)
Lo del chromium, no lo he probado, pero pienso que debe tener lo mismo que chrome frame que mejora considerablemente el twebbrowser pero no llega a tener todo lo necesario para html5 como el mismo chrome.

El sitio del chromium embedded dice:

Cita:

The host application can optionally control resource loading, navigation, context menus, printing and more, while taking advantage of the same performance and HTML5 technologies available in the Google Chrome Web browser.
O sea, que debe funcionar igual que el navegador. ¿Puedes poner la dirección de alguna página que se vea bien en el navegador Chrome y no en IE con el Chome Frame?

// Saludos

juank1971 28-07-2012 15:26:49

Gracias a todos
 
ecfisa, mis saludos si, lo que me madaste si funciona, yo tenia mal algunas cosas , y román no había probado lo del chromium, lo que había probado era lo del chrome frame y ese es el que me dio diferente, al igual que el componente Motzilla controls con el ActiveX para Motzilla,ese también me da muy diferente al navegador Motzilla que tengo instalado.

Pero ya baje lo de Chromium y el componente para delphi y estas en lo cierto román , ese si funciona perfectamente bien.

muchas gracias por el aporte .

salud y pesetas para todos

Juank


La franja horaria es GMT +2. Ahora son las 09:17:40.

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