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.D'avance merci pour vos réponses !!!
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![]()
Partager