Fermer groupe de programme avec une touche

Soyez le premier à donner votre avis sur cette source.

Vue 7 677 fois - Téléchargée 1 177 fois

Description

Pour des raisons pratiques dans certains cas...
Voici un petit programme qui permet de killer un ensemble de programme par l'appui d'une touche que vous pouvez configurer.

C'est beaucoup plus rapide de fermer IE en appuyant sur une touche que d'attraper sa souris pour viser la petite croix.

Par défaut :
Appuyez 3 fois sur * (pavé numérique) pour lancer la config du programme
Appuyez 2 fois sur - pour killer Internet Explorer

Modifier NbAppuis et NbAppuisConfig pour choisir combien de fois appuyer pour lancer l'action

Source / Exemple :


unit Unit1;

  {Par défaut :                                   
   Appuyez 3 fois sur * (pavé numérique) pour lancer la config du programme
   Appuyez 2 fois sur - pour killer Internet Explorer
   Modifier NbAppuis et NbAppuisConfig pour choisir combien de fois appuyer pour lancer l'action }

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, TlHelp32, ButtonWST ;

const
  NbAppuis = 2;
  NbAppuisConfig = 3;

type

  TForm1 = class(TForm)
    TimRazTouches: TTimer;
    TimDetectTouches: TTimer;
    Label1: TLabel;
    ediProcessus1: TEdit;
    Label2: TLabel;
    ediTouche: TEdit;
    ediProcessus2: TEdit;
    ediProcessus3: TEdit;
    ediProcessus4: TEdit;
    ediProcessus5: TEdit;                               
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    procedure TimRazTouchesTimer(Sender: TObject);
    procedure TimDetectTouchesTimer(Sender: TObject);
    procedure ediToucheKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SpeedButton2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Déclarations privées }
    Touches : array [1..NbAppuis * 2] of Integer;
    TouchesConfig : array [1..NbAppuisConfig * 2] of Integer;
    Touche: Integer;

    procedure AjouterTouche(const Valeur: Integer; var TouchesLoc : array of Integer);
  public
    { Déclarations publiques }
  end;                        

var
  Form1: TForm1;
  PasEncoreCachee: Boolean = True;

implementation

{$R *.dfm}
procedure TForm1.AjouterTouche(const Valeur: Integer; var TouchesLoc : array of Integer);
var i: Integer;
begin
  for i:= 0 to High(TouchesLoc) do
  begin
    if (TouchesLoc[i] = 0) then
    begin
      if (i = 0) or (TouchesLoc[i - 1] <> Valeur) then
      begin
        TouchesLoc[i]:= Valeur;
        TimRazTouches.Enabled:= False;
        TimRazTouches.Enabled:= True;
      end;
      Break;
    end;
  end;
end;

procedure TForm1.TimRazTouchesTimer(Sender: TObject);
begin
  FillChar(Touches, SizeOf(Touches), 0);
  FillChar(TouchesConfig, SizeOf(TouchesConfig), 0);
end;

function KillProcess(const ProcessName : string) : boolean;
var ProcessEntry32 : TProcessEntry32;
    HSnapShot : THandle;
    HProcess : THandle;
begin
  Result := False;
  HSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if HSnapShot = 0 then Exit;
  ProcessEntry32.dwSize := sizeof(ProcessEntry32);
  if Process32First(HSnapShot, ProcessEntry32) then
  repeat
    if CompareText(ProcessEntry32.szExeFile, ProcessName) = 0 then
    begin
      HProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry32.th32ProcessID);
      if HProcess <> 0 then
      begin
        Result := TerminateProcess(HProcess, 0);
        CloseHandle(HProcess);
      end;
      Break;
    end;
  until not Process32Next(HSnapShot, ProcessEntry32);
  CloseHandle(HSnapshot);
end;

procedure TForm1.TimDetectTouchesTimer(Sender: TObject);
begin
  if PasEncoreCachee then
    Visible:= False; //ShowWindow(Form1.Handle ,SW_HIDE);

  PasEncoreCachee:= False;
  if (GetKeyState(Touche) <> 0) and (GetKeyState(Touche) <> 1) then
  begin
    AjouterTouche(1, Touches);
    if Touches[High(Touches)] <> 0 then
    begin
      FillChar(Touches, SizeOf(Touches), 0);
      if ediProcessus1.Text <> '' then
        KillProcess(ediProcessus1.Text);
      if ediProcessus2.Text <> '' then
        KillProcess(ediProcessus2.Text);
      if ediProcessus3.Text <> '' then
        KillProcess(ediProcessus3.Text);
      if ediProcessus4.Text <> '' then
        KillProcess(ediProcessus4.Text);
      if ediProcessus5.Text <> '' then
        KillProcess(ediProcessus5.Text);
    end;
  end
  else
    AjouterTouche(2, Touches);

  if (GetKeyState(VK_MULTIPLY) <> 0) and (GetKeyState(VK_MULTIPLY) <> 1) then
  begin
    AjouterTouche(1, TouchesConfig);
    if TouchesConfig[High(TouchesConfig)] <> 0 then
    begin
      FillChar(TouchesConfig, SizeOf(TouchesConfig), 0);
      Visible:= True;
    end;
  end
  else
    AjouterTouche(2, TouchesConfig);
end;

procedure TForm1.ediToucheKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ediTouche.Text:= IntToStr(Key);
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  Visible:= False;
  Touche:= StrToInt(ediTouche.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Touche:= 109;
  ediTouche.Text:= IntToStr(Touche);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MessageDlg('Hugo Bulthé : hugo.bulthe@free.fr'+#13#10#13#10+'Pour être tranquille au bureau :-)'+#13#10#13#10+'Renseignez le nom des processus à killer.'+#13#10+'Pour changer la touche qui lance l''action, placez-vous dans la zone code touche et appuyez sur une touche.'+#13#10#13#10+'Pour killer tous les processus renseignés, appuyez plusieurs fois sur la touche configurée.', mtInformation, [mbOK], 0);
end;

end.

Conclusion :


Le code n'est pas super optimisé mais bon ça suffit amplement.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

John Dogget
Messages postés
390
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Bon code :)
Cela dit attention aux processus à tuer, parce que c'est une methode assez "bourrin" ...
Suivant les processus, ça peut passer outre des liberations de mémoire, l'enregistrement de certains fichiers de config etc.
Huugooo
Messages postés
122
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
2 juillet 2014
-
Oui oui, jme doute. Mais bon avec IE ont est plus à ça prêt =)
John Dogget
Messages postés
390
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Et sinon, ça te sers à quoi de masquer la fenetre du programme ??
C'est pas terrible comme idée ...

On risque de lancer dix fois le truc alors qu'il est déjà en cours.
Vu le code, on le lance, et il se passe ... rien !
Huugooo
Messages postés
122
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
2 juillet 2014
-
Oui il se passe rien et c'est le but justement. En tout cas il servira plus qu'un crackeur de score au pinball...
Il sert déja à mes collègues.
nethacker
Messages postés
293
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011
-
Counter Strike :p merci pour cette source en tout cas ! je l'ai trouvé tres utile ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.