2008-09-25 20 views
5

¿Hay alguna manera de minimizar una aplicación externa que no tengo control desde dentro de mi aplicación Delphi?Minimice una aplicación externa con Delphi

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

Respuesta

8

Puede usar FindWindow para encontrar el controlador 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; 
3

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

+0

Lo voté, ya que me puso en el camino correcto, pero al final usé el código de Neftali – Re0sless

2

Gracias a este, al final he usado una versión modifyed de Neftali's código, lo he incluido a continuación en caso de que una persona tiene los mismos problemas en el futuro.

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

siempre regresaba 0, por lo que en la búsqueda de una razón por la que encontré this function que encontrar el hwnd, y que funcionaba de maravilla.

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; 
+1

Tenga en cuenta que esto no funcionará en Windows Vista a menos que su aplicación se ejecute con privilegios elevados. –

0

supongo FindWindow (PChar ('libreta'), nulo) FindWindow (nula, PChar ('libreta')) para encontrar la ventana de título.

Cuestiones relacionadas