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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top