2010-11-30 35 views
3

J'ai une fonction qui lance le programme de messagerie par défaut d'un utilisateur via MAPI. Le programme de messagerie se lance généralement sur mon application, mais parfois non. parfois, mon application reste sur l'écran du bureau. Y a-t-il un moyen de s'assurer que le programme de messagerie de l'utilisateur sera lancé sur le bureau, et non pas caché derrière d'autres applications ouvertes?Comment puis-je m'assurer que le client MAPI reçoit le focus lorsque je le lance?

+1

Comment le lancez-vous? 'ShellExecute' avec un argument' mailto: '? Quel drapeau utilisez-vous? 'SW_SHOWNORMAL'? –

+1

J'utilise en fait la classe de courrier MAPI simple de la bibliothèque JCL, en appelant simplement sa fonction Send. –

+0

pouvez-vous minimiser les fenêtres de l'application appelante afin qu'il ne puisse pas masquer le client de messagerie? – mjn

Répondre

-1

vous devez trouver la fenêtre wich vous voulez être sur le dessus en utilisant un api FindWindow puis appelez SetForegroundWindow api

+0

'SetForegroundWindow' ne peut être appelé que dans des circonstances spéciales. Et votre programme d'appel pourrait ne pas les remplir. En particulier, il peut appeler SetForegroundWindow s'il s'agit du processus actif lui-même, mais il ne le peut généralement pas si une troisième application est active. http://msdn.microsoft.com/en-us/library/ms633539(VS.85).aspx – CodesInChaos

+2

Mon programme ne doit-il pas connaître le titre/la légende du client de messagerie d'un utilisateur (MAPI par défaut)? capable de faire cela? –

+0

@codeinchaos: il peut être facilement résolu en appelant createremotethread et en exécutant setforegroundwindow api dans le processus @Al C bien sûr mais c'est facile à trouver – opc0de

-1

Je pense que ShellExecute avec SW_SHOWNORMAL ou drapeau SW_SHOW est la meilleure solution que vous pouvez faire. En combinaison avec mailto: argument, il sera quelque chose comme ça:

ShellExecute(Self.Handle, nil, '"mailto:[email protected]?subject=This is ' + 
    'the subject&body=The message''s first paragraph.%0ASecond paragraph.%0AThird ' + 
    'Paragraph."', nil, nil, SW_SHOWNORMAL); 

Bien sûr, cette méthode peut être utilisée que pour créer des messages simples.

+0

Il n'y a rien de tel dans 'MAPISendMail'. –

+0

Je voulais dire mailto: argument, comme Andreas Rejbrand l'a déjà mentionné. Ce sera suffisant si Al C n'a besoin que de messages simples. – Torbins