Pregunta

¿Hay alguna forma de minimizar una aplicación externa sobre la que no tengo control desde mi aplicación Delphi?

por ejemplo notepad.exe, excepto que la aplicación que quiero minimizar solo tendrá una instancia.

¿Fue útil?

Solución

Puede usar FindWindow para encontrar el identificador de la aplicación y ShowWindow para minimizarlo.

var  
  Indicador :Integer;
begin 
  // Find the window by Classname
  Indicador := FindWindow(PChar('notepad'), nil);
  // if finded
  if (Indicador <> 0) then begin
    // Minimize
    ShowWindow(Indicador,SW_MINIMIZE);
  end;
end;

Otros consejos

No soy un experto en Delphi, pero si puede invocar las API de win32, puede usar FindWindow y ShowWindow para minimizar una ventana, incluso si no pertenece a su aplicación.

Gracias por esto, al final utilicé una versión modificada de Neftali's code, lo he incluido a continuación en caso de que alguien más tenga los mismos problemas en el futuro.

FindWindow(PChar('notepad'), nil);

siempre devolvía 0, así que mientras buscaba una razón por la que encontré esto función que encontraría el hwnd, y que funcionó a gusto.

function FindWindowByTitle(WindowTitle: string): Hwnd;
    var
      NextHandle: Hwnd;
      NextTitle: array[0..260] of char;
begin
      // Get the first window
      NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
      while NextHandle > 0 do
      begin
        // retrieve its text
        GetWindowText(NextHandle, NextTitle, 255);
        if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
        begin
          Result := NextHandle;
          Exit;
        end
        else
          // Get the next window
          NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
      end;
      Result := 0;
end;

procedure hideExWindow()
var Indicador:Hwnd;
begin
    // Find the window by Classname
    Indicador := FindWindowByTitle('MyApp'); 
    // if finded
    if (Indicador <> 0) then
    begin
        // Minimize
        ShowWindow(Indicador,SW_HIDE); //SW_MINIMIZE
    end;
end;

Supongo que FindWindow (PChar ('notepad'), nil) debería ser FindWindow (nil, PChar ('notepad')) para encontrar la ventana por título.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top