2008-09-25 9 views
5

Existe-t-il un moyen de réduire une application externe dont je n'ai pas le contrôle avec - dans mon application Delphi?Réduire une application externe avec Delphi

par exemple notepad.exe, sauf que l'application que je veux minimiser n'aura qu'une seule instance.

Répondre

8

Vous pouvez utiliser FindWindow pour trouver la poignée d'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; 
3

Je ne suis pas un expert Delphi, mais si vous pouvez appeler win32 apis, vous pouvez utiliser FindWindow et ShowWindow pour minimiser une fenêtre, même si elle n'appartient pas à votre application.

+0

J'ai voté pour vous, comme vous me mettez sur la bonne voie, mais à la fin j'ai utilisé le code de Neftali – Re0sless

2

Merci pour cela, à la fin j'ai utilisé une version modifyed code Neftali's, j'ai inclus ci-dessous dans le cas où quelqu'un d'autre a les mêmes problèmes à l'avenir.

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

était toujours 0 retournaient, donc tout en cherchant une raison pour laquelle j'ai trouvé this function qui trouverait le hwnd, et qui a travaillé un régal.

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

Notez que cela ne fonctionnera pas sur Windows Vista à moins que votre application fonctionne avec des privilèges élevés. –

0

Je suppose que FindWindow (PChar ('bloc-notes'), nul) devrait être FindWindow (néant, PChar ('bloc-notes')) pour trouver la fenêtre par titre.

Questions connexes