Minimiza una aplicación externa con Delphi.
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.
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.