Autor |
Beitrag |
mambo
      
Beiträge: 76
Win XP
D6 Prof
|
Verfasst: Mi 25.09.02 09: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:
| var Outlook: 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 09: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 09: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 then ShowMessage('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 13:00
was ist eigentlich genau der klassenname?
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: So 13.10.02 13: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 13:56
danke, das war klar und verständlich!
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: So 13.10.02 15: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 16: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 16: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 18: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 19: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:
| var Instance: 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 19:17
Verbesserungsvorschlag:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| if GetLastError = Error_Already_Exists then begin 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. 
|
|