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.
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.