| Autor | Beitrag | 
| mambo 
          Beiträge: 76
 
 Win XP
 D6 Prof
 
 | 
Verfasst: Mi 25.09.02 08:33 
 
Hallo !
 Ich möchte mit Outlook von Delphi aus ein Mail verschicken. Dazu verwende ich folgende Prozedur:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 | varOutlook: OutlookApplication;
 NmSpace: NameSpace;
 MI: MailItem;
 
 begin
 
 Outlook := CoOutlookApplication.Create;
 NmSpace := Outlook.GetNamespace('MAPI');
 NmSpace.Logon('', '', False, False);
 
 MI := Outlook.CreateItem(olMailItem) as MailItem;
 MI.Recipients.Add('mambo@dnet.it');
 MI.Subject := 'Testmail';
 MI.Body := 'Hallo ! Das ist ein Testmail aus Delphi! ';
 MI.Display(0);
 end
 |  So weit so gut.
 Doch bevor ich Outlook öffne, möchte ich nachschauen, ob Outlook bereits offen ist, und wenn ja, das Mail von dem bereits geöffneten Outlook aus verschicken.
 Wie kann ich das machen ???
 Danke inzwischen
 (was würde ich bloß ohne Euch machen)
 Heinz | 
|  | 
| Andreas Pfau 
          Beiträge: 997
 
 
 
 
 | 
Verfasst: Di 01.10.02 08:13 
 
Versuchs mal mit FindWindow. Dazu brauchst Du allerdings den Klassennamnen von Outlook, such mal im Internet danach.
 - AP -
 | 
|  | 
| DeCodeGuru 
          Beiträge: 1333
 Erhaltene Danke: 1
 
 Arch Linux
 Eclipse
 
 | 
Verfasst: Di 01.10.02 08:25 
 
Hallo,
 der Klassenname von Outlook ist "rctrl_renwnd32". Wenn du also eine Überprüfung schreiben willst, könnte das so aussehen:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 
 | if FindWindow('rctrl_renwnd32',nil) <> 0 thenShowMessage('Outlook ist gestartet')
 else
 ShowMessage('Outlook ist nicht gestartet');
 |  Der Code müsste eigentlich funktionieren. Achja, FindWindow erwartet als ersten Parameter den Klassennamen und als zweiten den Fenstertitel. Nur zur Erklärung.
 @MathiasSimmack: Ich glaube, dass ein Auszug aus der PSDK nicht notwendig ist.  _________________ Viele Grüße
 Jakob
 | 
|  | 
| JacFab 
          Beiträge: 111
 
 
 
 
 | 
Verfasst: So 13.10.02 12:00 
 
was ist eigentlich genau der klassenname? | 
|  | 
| DeCodeGuru 
          Beiträge: 1333
 Erhaltene Danke: 1
 
 Arch Linux
 Eclipse
 
 | 
Verfasst: So 13.10.02 12:49 
 
Wenn du bei Delphi ein neues Projekt startest, dann heißt deine Form doch standardmäßig TForm1. So, das ist dann der Klassenname.
Wenn du einen Button namens Button1 hast, dann ist der Name TButton und nicht Button1, außer du hast in deinem Programm eine abgeleitete Klasse erstellt.
 
 Also, der Klassenname ist praktisch der Name der Komponente (z.B.: TButton, TListBox etc.)
 _________________ Viele Grüße
 Jakob
 | 
|  | 
| JacFab 
          Beiträge: 111
 
 
 
 
 | 
Verfasst: So 13.10.02 12:56 
 
danke, das war klar und verständlich! | 
|  | 
| DeCodeGuru 
          Beiträge: 1333
 Erhaltene Danke: 1
 
 Arch Linux
 Eclipse
 
 | 
Verfasst: So 13.10.02 14:04 
 
puh, Gott sei dank sonst hätte ich noch mehr ausführen müssen    _________________ Viele Grüße
 Jakob
 | 
|  | 
| JacFab 
          Beiträge: 111
 
 
 
 
 | 
Verfasst: So 13.10.02 15:37 
 
ich habe nun ein neues problem.
ich habe das jetzt mit findwindow gemacht. leider ist da ein nachteil:
 wenn das programm zum ersten mal geöffnet wird, zeigt es trotzdem an, dass es schon geöffnet wurde, weil es sich ja selbst erkennt!
 ich habe findwindow usw.  ins createform ereigniss gesteckt. gibt es irgentein ereigniss, dass ausgelöst wird, bevor windows registriert, dass das programm überhaupt gestartet ist?
 | 
|  | 
| DeCodeGuru 
          Beiträge: 1333
 Erhaltene Danke: 1
 
 Arch Linux
 Eclipse
 
 | 
Verfasst: So 13.10.02 15:40 
 
frag doch einfach ab, ob das gefundene Handle gleich dem Handle deines Programmes ist.  _________________ Viele Grüße
 Jakob
 | 
|  | 
| MathiasSimmack Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: So 13.10.02 17:02 
 
Ist es ein VCL-Programm, JacFab. Hm, wahrscheinlich ... Also stecke deine Prüfroutine in den DPR-Quelltext (Unit "Windows" nicht vergessen, evtl. noch "Messages", falls du die laufende Instanz aufrufen willst). Auf die Weise prüfst du, bevor dein Formular erzeugt wird! | 
|  | 
| DeCodeGuru 
          Beiträge: 1333
 Erhaltene Danke: 1
 
 Arch Linux
 Eclipse
 
 | 
Verfasst: So 13.10.02 18:05 
 
Hi,
 folgenden Code kannst du mal testen(habe ihn nicht getestet):
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 
 | varInstance: THandle;
 begin
 Instance := CreateMutex(nil,True,'Project1');
 if GetLastError = Error_Already_Exists then
 begin
 ShowMessage('Programm wurde schon gestartet');
 end
 else
 begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
 CloseHandle(Instance);
 end;
 end.
 |  Achja, Unit Windows und Dialogs müssten eingebunden werden._________________ Viele Grüße
 Jakob
 | 
|  | 
| MathiasSimmack Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: So 13.10.02 18:17 
 
Verbesserungsvorschlag:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | if GetLastError = Error_Already_Exists thenbegin
 SendMessage(findwindow('TForm1',nil),WM_SYSCOMMAND,SC_RESTORE,0);
 SetForegroundWindow(findwindow('TForm1',nil));
 end
 else
 begin
 ...
 end;
 
 ReleaseMutex(Instance);
 |  Damit kann die Unit "Dialogs" entfallen, stattdessen muss aber "Messages" rein.   | 
|  |