Bonjour,

Lorsqu'on clique sur un lien mailto: dans une page web, ça ouvre mon logiciel. Ce logiciel ne peut être ouvert qu'une fois, c'est à dire que si il est déjà ouvert et qu'on clique sur un lien mailto:, ça remet le logiciel en avant plan.

La première fois qu'on lance le logiciel, je récupère les informations dans le ParamStr(2).

Le problème est qu'après lorsque je clique sur un autre mailto:, ça ne fait pas changer le ParamStr(2) ... Donc je ne peux pas récupérer la nouvelle adresse e-mail ...

Voici le code source du logiciel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry, ShellAPI, StrUtils, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  a : String;
 
implementation
 
{$R *.dfm}
 
Procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  with TRegistry.Create do
  begin
    try
      RootKey := HKEY_CLASSES_ROOT;
      DeleteKey('\Software\nom_de_la_clé'); //On supprime la clé à la fermeture du programme
    finally
      Free;
      CanClose := True;
    end;
  end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  b : String;
 
begin
  b := AnsiReplaceText(ParamStr(2),'mailto:','');
  label2.Caption := b;
 
  If a <> b Then
    begin
      a := b;
      Memo1.Lines.Add(b);
      label1.Caption := a;
    end;
  label3.Caption := IntToStr(StrToInt(Label3.Caption) + 1);
end;
 
end.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
program Project1;
 
uses
  Windows, // API Windows
  Registry, // Pour utiliser la base de resitre
  Dialogs, // Pour les messages d'erreur
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
 
var
  FirstApplicationHandle, FirstFormHandle: HWND; // Déclaration de 2 variables pour les handles
                                                 // de la première instance de l'application
  Registre: TRegistry; // TRegistry est une enveloppe de bas niveau
                       // pour le registre système  et les fonctions qui manipulent ce registre.
 
{$R *.res}
 
begin
  SetLastError(NO_ERROR); // On initialise la dernière erreur
  CreateMutex (nil, true, 'nom_du_mutex'); // On crée du mutex
  if GetLastError = ERROR_ALREADY_EXISTS then // On test de si une erreur s'est produite lors de la création du mutex
    begin
      Registre := TRegistry.Create; // On crée d'un objet pour l'interface avec la base de registre
      try
        Registre.RootKey:=HKEY_CLASSES_ROOT;
        Registre.OpenKey('\Software\nom_de_la_clé', True); // On ouvre la clé dans la base de registre
        firstApplicationHandle := Registre.ReadInteger('FirstApplicationHandle'); //On lit la valeur de FirstApplicationHandle dans la clé courante
        firstFormHandle := Registre.ReadInteger('FirstFormHandle'); //On lit la valeur de FirstFormHandle dans la clé courante
        ShowWindow(FirstApplicationHandle, SW_NORMAL); // On donne le focus a la première instance de l'application
        SetForegroundWindow(FirstFormHandle); // On active le fiche principal de la première instance de l'application
        Registre.CloseKey; // On ferme la clé du registre
        Registre.Free; // On detruit l'objet et libère la mémoire
      except
        MessageDlg('Une erreur est survenue lors de la lecture dans la base de registre.', mterror, [mbok], 0);
        Registre.Free; // On detruit l'objet et libère la mémoire en cas d'erreur
      end;
      Exit;
    end;
 
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
 
  Registre := TRegistry.Create; //On crée d'un objet pour l'interface avec la base de registre
  try
    Registre.RootKey := HKEY_CLASSES_ROOT;
    Registre.OpenKey('\Software\nom_de_la_clé', True); // On ouvre la clé dans la base de registre
    Registre.WriteInteger('FirstApplicationHandle', Application.Handle); //On écrit la valeur de FirstApplicationHandle dans la clé courante
    Registre.WriteInteger('FirstFormHandle', Form1.Handle); //On écrit la valeur de FirstFormHandle dans la clé courante
    Registre.CloseKey; // On ferme la clé du registre
    Registre.Free; // On detruit l'objet et libère la mémoire
  except
    MessageDlg('Une erreur est survenue lors de l''écriture dans la base de registre.', mterror, [mbok], 0);
    Registre.Free; // On detruit l'objet et libère la mémoire
  end;
 
  Application.Run;
 
end.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
object Form1: TForm1
  Left = 219
  Top = 86
  Caption = 'Form1'
  ClientHeight = 624
  ClientWidth = 944
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 120
  TextHeight = 16
  object Label1: TLabel
    Left = 8
    Top = 8
    Width = 37
    Height = 16
    Caption = 'Label1'
  end
  object Label2: TLabel
    Left = 448
    Top = 8
    Width = 37
    Height = 16
    Caption = 'Label2'
  end
  object Label3: TLabel
    Left = 888
    Top = 8
    Width = 7
    Height = 16
    Caption = '0'
  end
  object Memo1: TMemo
    Left = 8
    Top = 48
    Width = 921
    Height = 568
    ScrollBars = ssVertical
    TabOrder = 0
  end
  object Timer1: TTimer
    OnTimer = Timer1Timer
    Left = 912
    Top = 8
  end
end
D'avance merci pour vos réponses !!!