Réduire une application externe avec Delphi
Question
Existe-t-il un moyen de minimiser une application externe sur laquelle je n'ai pas le contrôle depuis mon application Delphi?
Par exemple, notepad.exe, sauf que l'application que je souhaite minimiser n'aura jamais qu'une seule instance.
La solution
Vous pouvez utiliser FindWindow pour rechercher le descriptif de l'application et ShowWindow pour le réduire.
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;
Autres conseils
Je ne suis pas un expert de Delphi, mais si vous pouvez appeler un apis win32, vous pouvez utiliser FindWindow et ShowWindow pour réduire une fenêtre, même si elle n'appartient pas à votre application.
Merci pour cela, j'ai finalement utilisé une version modifiée de de Neftali code, je l’ai inclus ci-dessous au cas où un autre aurait les mêmes problèmes à l’avenir.
FindWindow(PChar('notepad'), nil);
renvoyait toujours 0, donc en cherchant une raison pour laquelle j'ai trouvé ceci fonction qui trouverait le mot de passe, et qui a fonctionné à merveille.
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;
Je suppose que FindWindow (PChar ("bloc-notes"), nil) devrait être FindWindow (nil, PChar ("bloc-notes")) pour rechercher la fenêtre par titre.