Autor Beitrag
mambo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Mi 25.09.02 09:33 
Hallo !

Ich möchte mit Outlook von Delphi aus ein Mail verschicken. Dazu verwende ich folgende Prozedur:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: So 13.10.02 13:00 
was ist eigentlich genau der klassenname?
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: So 13.10.02 13:56 
danke, das war klar und verständlich!
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 13.10.02 15:04 
puh, Gott sei dank sonst hätte ich noch mehr ausführen müssen :mrgreen:
:wink:

_________________
Viele Grüße
Jakob
JacFab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 13.10.02 19:05 
Hi,

folgenden Code kannst du mal testen(habe ihn nicht getestet):

ausblenden 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



BeitragVerfasst: So 13.10.02 19:17 
Verbesserungsvorschlag:
ausblenden 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. :)