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)
-   -   Restaurar otra aplicacion y no morir en el intento (https://www.clubdelphi.com/foros/showthread.php?t=54400)

Edgtho 17-03-2008 21:02:38

Restaurar otra aplicacion y no morir en el intento
 
Recupero el hilo iniciado hace ya dos años aqui
http://www.clubdelphi.com/foros/show...ght=sw_restore


Por que me encuentro en la misma tesitura. Cuando ejecutas

ShowWindow(hApp, SW_RESTORE);


donde hApp es el handle de la otra aplicacion, parece que funciona pero el boton minimizar se queda muerto total.

Aqui os dejo tooodas las combinaciones posibles que he intentado rebuscando entre foros

Código:

var
    hApp: Cardinal;
  FgThreadId  : DWORD;
  AppThreadId : DWORD;
begin
    hApp := fmMain.FindWindowByTitle([titulo aplicacion]);

//    SendMessage(hApp,CM_RESTORE,0,0);
//    ShowWindow(hApp, SW_SHOW); //despues la aplicacion no puede minimizarse;
//    ShowWindow(hApp, SW_SHOWNORMAL); //despues la aplicacion no puede minimizarse;

  FgThreadId  := GetWindowThreadProcessId(GetForegroundWindow, nil);
  AppThreadId := GetWindowThreadProcessId(hApp, nil);
  AttachThreadInput(AppThreadId, FgThreadId, true);

  ShowWindow(hApp, SW_RESTORE); // despues la aplicacion no puede minimizarse;
  SetForegroundWindow(hApp);
  AttachThreadInput(AppThreadId, FgThreadId, false);

    //SetForeGroundWindow(hApp);
//    PostMessage(hApp,CM_RESTORE,0,0);
//    SendMessage(hApp,WM_ACTIVATE,0,0);
//    SendMessage(hApp,SW_RESTORE,0,0);
//    SendMessage(hApp,CM_RESTORE,0,0);
    //Application.ProcessMessages;


Si es que no puede ser tan dificil pero no hay manera de encontrarlo, solo fijaros en lo extravagante de mi ultimo intento (lineas no comentadas). Si me podeis ayudar os lo agradecere un webo y parte del otro.

un saludo

cHackAll 17-03-2008 21:31:28

Código Delphi [-]
 SendMessage(FindWindow(nil, 'Untitled - Notepad'), WM_SYSCOMMAND, SC_RESTORE, 0);

keyboy 17-03-2008 21:50:07

Yo probaría esta función:

Código Delphi [-]
procedure ActivarAplicacion(Handle: HWnd);
var
  FgThreadId  : DWORD;
  AppThreadId : DWORD;

begin
  if IsIconic(Handle) then
    ShowWindow(Handle, SW_RESTORE)
  else
  begin
    FgThreadId  := GetWindowThreadProcessId(GetForegroundWindow, nil);
    AppThreadId := GetWindowThreadProcessId(Handle, nil);

    AttachThreadInput(AppThreadId, FgThreadId, true);
    SetForegroundWindow(Handle);
    AttachThreadInput(AppThreadId, FgThreadId, false);
  end;
end;

Handle debe ser el handle de la aplicación y no de la ventana principal.

Bye

Edgtho 18-03-2008 08:40:46

KeyBoy lo que habias puesto era lo mismo que tenia yo, jejeje. La respuesta me la ha dado chackall, enviandole el comando SC_RESTORES justo antes del ShowWindow ha funcionado sin problemas.

Código:


  hApp := fmMain.FindWindowByTitle([titulo aplicacion]);
  SendMessage(hApp, WM_SYSCOMMAND, SC_RESTORE, 0);
  ShowWindow(hApp, SW_RESTORE);

Mil gracias

keyboy 19-03-2008 06:34:20

Curioso, porque yo hago esa misma pueba y no funciona. En fin, cada Windows es un mundo.

Bye


La franja horaria es GMT +2. Ahora son las 07:17:25.

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