Application Windows en arrière plan

cs_dOCiOn Messages postés 2 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 19 juillet 2003 - 18 juil. 2003 à 19:10
cs_dOCiOn Messages postés 2 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 19 juillet 2003 - 19 juil. 2003 à 00:30
Bonjour,

Je souhaiterais développer un petit utilitaire en delphi permettant de minimiser automatiquement chaque application Windows passée en arrière plan.

Je m'explique, j'ai remarqué, sous Windows 2000, qu'une application minimisée utilisait nettement moins de mémoire qu'une application laissée en arrière plan, c'est pourquoi, je souhaite développer un utilitaire permettant de minimiser automatiquement une application passée en arrière plan, dans le but d'optimiser la gestion de la mémoire.

Merci de me proposer différentes idées si le coeur vous en dit :) , et de me proposer des codes, car la je suis carrément bloqué depuis 0. Il faut dire que je ne suis pas très bon développeur.

A bon entendeur . . .

- ÐøC-|llµs|Øn -

2 réponses

cs_lugdanum Messages postés 58 Date d'inscription samedi 23 novembre 2002 Statut Membre Dernière intervention 12 décembre 2006
19 juil. 2003 à 00:11
Tu récupère le handle de la fenetre active, puis toutes les autres et tu minimizes. voici quelque morceau de code:

var
Form1: TForm1;

// cette fonction sera appelée pour chaque lorsque l'on appelera l'API EnumWindows
function EnumWindowsCallback(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;

implementation

{$R *.DFM}

function EnumWindowsCallback(hWnd: HWND; lParam: LPARAM): BOOL;
begin
if isWindowVisible(hWnd) then postmessage(hWnd,WM_SYSCOMMAND,SC_MINIMIZE,0);
result:=true;// pour que l'énumération ne s'arrète pas; pour que EnumWindows continue à appeler EnumWindowsCallback pour les autres fenêtres
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsCallback,0);// EnumWindows va appeler EnumWindowsCallback pour chaque fenetre présente
end;

ou:

h:=application.handle;
while h > 0 do
begin
if isWindowVisible(h) then
postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
h:=getnextwindow(h,GW_HWNDNEXT);
end;

enfin de compte passe par les handles...

-
L'ame est imortelle, et sans un corps le temps lui semble long, très long... %-6
cs_dOCiOn Messages postés 2 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 19 juillet 2003
19 juil. 2003 à 00:30
oui, il est vrai que la solution d'utiliser les handles est bonne. Par contre, je pensais plus faire un truc utilsant des évènements.
Par exemple, "onUnselect" (je sais pas si cet event existe, c'est un nom qui me parait bien clair ;p) telle application, elle est minimisée (et non pas passer toutes les applis une par une pour les minimiser, car la fenetre en cours d'ouverture, il faut bien qu'elle reste ouverte).

donc si quelqu'un a une astuce utilisant les events, je suis tout ouïe.

On pourrait imaginer le "onUnselect" pour détecter l'application, et utiliser le postmessage pour minimiser l'appli.

- ÐøC-|llµs|Øn -
Rejoignez-nous