OVH Cloud OVH Cloud

[HS] (un peu ?) API : FindWindow

12 réponses
Avatar
papou
Bonjour à toutes et à tous
Et meilleurs voeux pour la nouvelle année 2005.
Dans le cadre d'un petit développement (en VBA), j'utilise la fonction API
FindWindow puis SetActiveWindow.
Le but est de m'assurer que la fenêtre d'un message Outlook est
effectivement active avant que je n'effectue un coller de quelques lignes
issues d'un document Word (pour l'instant je n'ai pas trouvé de solution
alternative à ce collage).

Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à fait
comme je le souhaite (aléatoirement ou pas du tout pour le collage) :
(La méthode Display appartient à l'objet OLE Outlook Mailitem déclaré plus
haut dans mon code)
MessageOutlk.Display
'On recherche la fenêtre Outlook
Dim LaFen As Long
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
Message")
'On la défini comme étant celle active...
SetActiveWindow (LaFen)
'...avant de coller
SendKeys "^v", True

Mon soucis est que ne sachant pas ce que je dois renseigner au niveau du
premier argument (ByVal lpClassName As String), j'utilise VbNullString, mais
je me demande si effectivement ce n'est pas là l'origine de mon problème ?
J'ai essayé pour cet argument "Outlook.Application" mais ça ne fonctionne
pas mieux.
Si quelqu'un avait une piste ?

Merci d'avance
Cordialement
Pascal

10 réponses

1 2
Avatar
Alain CROS
Bonjour

Si "Programme COMET : votre planning - Message" est le titre de la fenêtre à activer, la ligne
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning - Message") est correcte.
C'est la fonction suivante qui n'est pas la bonne, il faut utiliser :
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
SetForegroundWindow LaFen

Alain CROS

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de news:
Bonjour à toutes et à tous
Et meilleurs voeux pour la nouvelle année 2005.
Dans le cadre d'un petit développement (en VBA), j'utilise la fonction API
FindWindow puis SetActiveWindow.
Le but est de m'assurer que la fenêtre d'un message Outlook est
effectivement active avant que je n'effectue un coller de quelques lignes
issues d'un document Word (pour l'instant je n'ai pas trouvé de solution
alternative à ce collage).

Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à fait
comme je le souhaite (aléatoirement ou pas du tout pour le collage) :
(La méthode Display appartient à l'objet OLE Outlook Mailitem déclaré plus
haut dans mon code)
MessageOutlk.Display
'On recherche la fenêtre Outlook
Dim LaFen As Long
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
Message")
'On la défini comme étant celle active...
SetActiveWindow (LaFen)
'...avant de coller
SendKeys "^v", True

Mon soucis est que ne sachant pas ce que je dois renseigner au niveau du
premier argument (ByVal lpClassName As String), j'utilise VbNullString, mais
je me demande si effectivement ce n'est pas là l'origine de mon problème ?
J'ai essayé pour cet argument "Outlook.Application" mais ça ne fonctionne
pas mieux.
Si quelqu'un avait une piste ?

Merci d'avance
Cordialement
Pascal




Avatar
papou
Bonsoir Alain
Merci beaucoup pour cette info que je vais tester demain matin.
Cordialement
Pascal

"Alain CROS" a écrit dans le message de news:
uC$
Bonjour

Si "Programme COMET : votre planning - Message" est le titre de la fenêtre
à activer, la ligne
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
Message") est correcte.
C'est la fonction suivante qui n'est pas la bonne, il faut utiliser :
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd
As Long) As Long
SetForegroundWindow LaFen

Alain CROS

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de news:

Bonjour à toutes et à tous
Et meilleurs voeux pour la nouvelle année 2005.
Dans le cadre d'un petit développement (en VBA), j'utilise la fonction
API
FindWindow puis SetActiveWindow.
Le but est de m'assurer que la fenêtre d'un message Outlook est
effectivement active avant que je n'effectue un coller de quelques lignes
issues d'un document Word (pour l'instant je n'ai pas trouvé de solution
alternative à ce collage).

Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à fait
comme je le souhaite (aléatoirement ou pas du tout pour le collage) :
(La méthode Display appartient à l'objet OLE Outlook Mailitem déclaré
plus
haut dans mon code)
MessageOutlk.Display
'On recherche la fenêtre Outlook
Dim LaFen As Long
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
Message")
'On la défini comme étant celle active...
SetActiveWindow (LaFen)
'...avant de coller
SendKeys "^v", True

Mon soucis est que ne sachant pas ce que je dois renseigner au niveau du
premier argument (ByVal lpClassName As String), j'utilise VbNullString,
mais
je me demande si effectivement ce n'est pas là l'origine de mon problème
?
J'ai essayé pour cet argument "Outlook.Application" mais ça ne fonctionne
pas mieux.
Si quelqu'un avait une piste ?

Merci d'avance
Cordialement
Pascal








Avatar
papou
Bonjour
Après test sur un groupe de destinataires ça marche.
Mais après test sur un autre groupe de destinataires, j'ai subitement un
nouveau message d'avertissement de sécurtié ActiveX d'Outlook et du coup le
collage des données ne se fait pas si je n'interviens pas sur ledit message
pour le valider.
Il faut donc que j'intercepte cette nouvelle fenêtre si elle apparaît (avec
une gestion d'erreur) et que j'envoie un sendkeys "~" (entrée)
Comment puis-je faire ?
Merci
Cordialement
Pascal

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de
news:
Bonsoir Alain
Merci beaucoup pour cette info que je vais tester demain matin.
Cordialement
Pascal

"Alain CROS" a écrit dans le message de news:
uC$
> Bonjour
>
> Si "Programme COMET : votre planning - Message" est le titre de la


fenêtre
> à activer, la ligne
> LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
> Message") est correcte.
> C'est la fonction suivante qui n'est pas la bonne, il faut utiliser :
> Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal


hwnd
> As Long) As Long
> SetForegroundWindow LaFen
>
> Alain CROS
>
> "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de news:
>
>> Bonjour à toutes et à tous
>> Et meilleurs voeux pour la nouvelle année 2005.
>> Dans le cadre d'un petit développement (en VBA), j'utilise la fonction
>> API
>> FindWindow puis SetActiveWindow.
>> Le but est de m'assurer que la fenêtre d'un message Outlook est
>> effectivement active avant que je n'effectue un coller de quelques


lignes
>> issues d'un document Word (pour l'instant je n'ai pas trouvé de


solution
>> alternative à ce collage).
>>
>> Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à


fait
>> comme je le souhaite (aléatoirement ou pas du tout pour le collage) :
>> (La méthode Display appartient à l'objet OLE Outlook Mailitem déclaré
>> plus
>> haut dans mon code)
>> MessageOutlk.Display
>> 'On recherche la fenêtre Outlook
>> Dim LaFen As Long
>> LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
>> Message")
>> 'On la défini comme étant celle active...
>> SetActiveWindow (LaFen)
>> '...avant de coller
>> SendKeys "^v", True
>>
>> Mon soucis est que ne sachant pas ce que je dois renseigner au niveau


du
>> premier argument (ByVal lpClassName As String), j'utilise VbNullString,
>> mais
>> je me demande si effectivement ce n'est pas là l'origine de mon


problème
>> ?
>> J'ai essayé pour cet argument "Outlook.Application" mais ça ne


fonctionne
>> pas mieux.
>> Si quelqu'un avait une piste ?
>>
>> Merci d'avance
>> Cordialement
>> Pascal
>>
>>
>
>




Avatar
Zoury
Salut Papou! :O)

J'aurais peut-être une solution plus propre à te proposer..

Comme tu le sais, l'API FindWindow() te permet de récupèrer le handle d'une
fenêtre principale (top-level). Une autre fonction nommé FindWindowEx() peut
être utiliser afin de rechercher le handle de tous les fenêtres filles d'une
autre fenêtre.

En combinant les deux, tu pourrais *peut-être* mettre la main sur le handle
de la fenêtre dans laquelle tu veux "coller" ton texte. À partir de là tu
pourrais employer SendMessage() ou Get/SetWindowText() pour envoyé le texte
directement à la fenêtre sans passer par SendKeys(). Note que j'ai dis
*peut-être*. Car même si, visuellement parlant, un contrôle de type textbox
par exemple, peut sembler situer sur une fenêtre, il se peut en fait qu'il
soit encapsuler dans un autre contrôle et que l'accès à ce dernier soit
impossible.


Voici les étapes à suivre :

1. Cibler la fenêtre dans laquelle tu veux envoyé ton texte et déterminer la
hierarchie de fenêtre par rapport à la fenêtre principale.
Un outil nommé Spy++, fournit avec Visual Studio, devrait t'aider
magnifiquement dans cette tâche.
- Ouvre ton Outlook
- Ouvre la fenêtre que tu cherches
- Démarre Spy++ (Menu Démarrer/Programmes/Microsoft Visual Studio
6.0/Outils Visual Studio 6.0/Spy++)
- Pour retrouver les informations de ta fenêtre (qui est
ouverte), appuie sur Ctrl-F dans Spy++.
- Une fenêtre apparait, clique sur la clible (à côté de Finder
Tool:) et "drag" la sur ta fenêtre..

2. Employer FindWindow() et FindWindowEx() pour retrouver cette fenêtre. il
y a pleins d'exemple sur le net, viens nous voir si tu as des questions ;O)

3. Envoyer le texte à la fenêtre. Il nous faudra plus de précision sur ton
besoin exact, afin de t'offrir la meilleure méthode possible.

--
Cordialement
Yanick
MVP pour Visual Basic
"papou" a écrit dans le message de
news:
Bonjour
Après test sur un groupe de destinataires ça marche.
Mais après test sur un autre groupe de destinataires, j'ai subitement un
nouveau message d'avertissement de sécurtié ActiveX d'Outlook et du coup


le
collage des données ne se fait pas si je n'interviens pas sur ledit


message
pour le valider.
Il faut donc que j'intercepte cette nouvelle fenêtre si elle apparaît


(avec
une gestion d'erreur) et que j'envoie un sendkeys "~" (entrée)
Comment puis-je faire ?
Merci
Cordialement
Pascal

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de
news:
> Bonsoir Alain
> Merci beaucoup pour cette info que je vais tester demain matin.
> Cordialement
> Pascal
>
> "Alain CROS" a écrit dans le message de news:
> uC$
> > Bonjour
> >
> > Si "Programme COMET : votre planning - Message" est le titre de la
fenêtre
> > à activer, la ligne
> > LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
> > Message") est correcte.
> > C'est la fonction suivante qui n'est pas la bonne, il faut utiliser :
> > Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal
hwnd
> > As Long) As Long
> > SetForegroundWindow LaFen
> >
> > Alain CROS
> >
> > "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de news:
> >
> >> Bonjour à toutes et à tous
> >> Et meilleurs voeux pour la nouvelle année 2005.
> >> Dans le cadre d'un petit développement (en VBA), j'utilise la


fonction
> >> API
> >> FindWindow puis SetActiveWindow.
> >> Le but est de m'assurer que la fenêtre d'un message Outlook est
> >> effectivement active avant que je n'effectue un coller de quelques
lignes
> >> issues d'un document Word (pour l'instant je n'ai pas trouvé de
solution
> >> alternative à ce collage).
> >>
> >> Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à
fait
> >> comme je le souhaite (aléatoirement ou pas du tout pour le collage) :
> >> (La méthode Display appartient à l'objet OLE Outlook Mailitem déclaré
> >> plus
> >> haut dans mon code)
> >> MessageOutlk.Display
> >> 'On recherche la fenêtre Outlook
> >> Dim LaFen As Long
> >> LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
> >> Message")
> >> 'On la défini comme étant celle active...
> >> SetActiveWindow (LaFen)
> >> '...avant de coller
> >> SendKeys "^v", True
> >>
> >> Mon soucis est que ne sachant pas ce que je dois renseigner au niveau
du
> >> premier argument (ByVal lpClassName As String), j'utilise


VbNullString,
> >> mais
> >> je me demande si effectivement ce n'est pas là l'origine de mon
problème
> >> ?
> >> J'ai essayé pour cet argument "Outlook.Application" mais ça ne
fonctionne
> >> pas mieux.
> >> Si quelqu'un avait une piste ?
> >>
> >> Merci d'avance
> >> Cordialement
> >> Pascal
> >>
> >>
> >
> >
>
>




Avatar
papou
Bonjour Zoury
Merci pour ta réponse et ta proposition.
Je retiens cette possibilité de faire, mais je ne peux que la tester chez
moi où je possède VB.
En revanche, je recherche encore le moyen de pouvoir gérer une fenêtre
intempestive dont le titre est Microsoft Internet Explorer et qui me dit que
les paramètres de sécurité ne me permettent pas d'exécuter les contrôles
ActiveX.
Cette fenêtre intervient aussitôt après avoir effectué mon SendKeys "^v",
True, et si je la valide, le collage se fait correctement dans mon message
Outlook
Etant donné que la stratégie du poste utilisé ne me permet pas de modifier
les paramètres dans IE.
Je recherche donc un moyen de valider automatiquement cette fenêtre.
Voici ce que j'ai mis en place mais qui ne fonctionne pas correctement (j'ai
aussi essayé sans succès un If Err <> 0 Then SendKeys"~") :
PS : désolé pour les gros mots qui reflètent mon état d'esprit actuel ;-)

SendKeys "^v", True
'Au cas où le #?=*- de message d'IE "Les paramètres de sécurité
actuels....."
'...apparaît, on l'intercepte avec la gestion d'erreur
On Error GoTo PdeMessageAlaC

PdeMessageAlaC:
'trouver la fenêtre IE
FenErrActX = FindWindow(vbNullString, "Microsoft Internet Explorer")
If FenErrActX <> 0 Then
''on active le message d'erreur
SetForegroundWindow FenErrActX
SendKeys "~"
'on redéfini la fenêtre du mail active
LaFen = FindWindow("", "Programme COMET : Votre Planning - Message
(HTML)")
SetForegroundWindow LaFen
MessageOutlk.Send
End If
Resume Next

Cordialement
Pascal


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:efUtqq$
Salut Papou! :O)

J'aurais peut-être une solution plus propre à te proposer..

Comme tu le sais, l'API FindWindow() te permet de récupèrer le handle


d'une
fenêtre principale (top-level). Une autre fonction nommé FindWindowEx()


peut
être utiliser afin de rechercher le handle de tous les fenêtres filles


d'une
autre fenêtre.

En combinant les deux, tu pourrais *peut-être* mettre la main sur le


handle
de la fenêtre dans laquelle tu veux "coller" ton texte. À partir de là tu
pourrais employer SendMessage() ou Get/SetWindowText() pour envoyé le


texte
directement à la fenêtre sans passer par SendKeys(). Note que j'ai dis
*peut-être*. Car même si, visuellement parlant, un contrôle de type


textbox
par exemple, peut sembler situer sur une fenêtre, il se peut en fait qu'il
soit encapsuler dans un autre contrôle et que l'accès à ce dernier soit
impossible.


Voici les étapes à suivre :

1. Cibler la fenêtre dans laquelle tu veux envoyé ton texte et déterminer


la
hierarchie de fenêtre par rapport à la fenêtre principale.
Un outil nommé Spy++, fournit avec Visual Studio, devrait t'aider
magnifiquement dans cette tâche.
- Ouvre ton Outlook
- Ouvre la fenêtre que tu cherches
- Démarre Spy++ (Menu Démarrer/Programmes/Microsoft Visual Studio
6.0/Outils Visual Studio 6.0/Spy++)
- Pour retrouver les informations de ta fenêtre (qui est
ouverte), appuie sur Ctrl-F dans Spy++.
- Une fenêtre apparait, clique sur la clible (à côté de Finder
Tool:) et "drag" la sur ta fenêtre..

2. Employer FindWindow() et FindWindowEx() pour retrouver cette fenêtre.


il
y a pleins d'exemple sur le net, viens nous voir si tu as des questions


;O)

3. Envoyer le texte à la fenêtre. Il nous faudra plus de précision sur ton
besoin exact, afin de t'offrir la meilleure méthode possible.

--
Cordialement
Yanick
MVP pour Visual Basic
"papou" a écrit dans le message de
news:
> Bonjour
> Après test sur un groupe de destinataires ça marche.
> Mais après test sur un autre groupe de destinataires, j'ai subitement un
> nouveau message d'avertissement de sécurtié ActiveX d'Outlook et du coup
le
> collage des données ne se fait pas si je n'interviens pas sur ledit
message
> pour le valider.
> Il faut donc que j'intercepte cette nouvelle fenêtre si elle apparaît
(avec
> une gestion d'erreur) et que j'envoie un sendkeys "~" (entrée)
> Comment puis-je faire ?
> Merci
> Cordialement
> Pascal
>
> "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de
> news:
> > Bonsoir Alain
> > Merci beaucoup pour cette info que je vais tester demain matin.
> > Cordialement
> > Pascal
> >
> > "Alain CROS" a écrit dans le message de news:
> > uC$
> > > Bonjour
> > >
> > > Si "Programme COMET : votre planning - Message" est le titre de la
> fenêtre
> > > à activer, la ligne
> > > LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
> > > Message") est correcte.
> > > C'est la fonction suivante qui n'est pas la bonne, il faut utiliser


:
> > > Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal
> hwnd
> > > As Long) As Long
> > > SetForegroundWindow LaFen
> > >
> > > Alain CROS
> > >
> > > "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message de news:
> > >
> > >> Bonjour à toutes et à tous
> > >> Et meilleurs voeux pour la nouvelle année 2005.
> > >> Dans le cadre d'un petit développement (en VBA), j'utilise la
fonction
> > >> API
> > >> FindWindow puis SetActiveWindow.
> > >> Le but est de m'assurer que la fenêtre d'un message Outlook est
> > >> effectivement active avant que je n'effectue un coller de quelques
> lignes
> > >> issues d'un document Word (pour l'instant je n'ai pas trouvé de
> solution
> > >> alternative à ce collage).
> > >>
> > >> Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à
> fait
> > >> comme je le souhaite (aléatoirement ou pas du tout pour le collage)


:
> > >> (La méthode Display appartient à l'objet OLE Outlook Mailitem


déclaré
> > >> plus
> > >> haut dans mon code)
> > >> MessageOutlk.Display
> > >> 'On recherche la fenêtre Outlook
> > >> Dim LaFen As Long
> > >> LaFen = FindWindow(vbNullString, "Programme COMET : votre


planning -
> > >> Message")
> > >> 'On la défini comme étant celle active...
> > >> SetActiveWindow (LaFen)
> > >> '...avant de coller
> > >> SendKeys "^v", True
> > >>
> > >> Mon soucis est que ne sachant pas ce que je dois renseigner au


niveau
> du
> > >> premier argument (ByVal lpClassName As String), j'utilise
VbNullString,
> > >> mais
> > >> je me demande si effectivement ce n'est pas là l'origine de mon
> problème
> > >> ?
> > >> J'ai essayé pour cet argument "Outlook.Application" mais ça ne
> fonctionne
> > >> pas mieux.
> > >> Si quelqu'un avait une piste ?
> > >>
> > >> Merci d'avance
> > >> Cordialement
> > >> Pascal
> > >>
> > >>
> > >
> > >
> >
> >
>
>




Avatar
ng
Pourquoi ne pas envoyer le message toi même, sans passer par outlook ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
Bonjour à toutes et à tous
Et meilleurs voeux pour la nouvelle année 2005.
Dans le cadre d'un petit développement (en VBA), j'utilise la
fonction API FindWindow puis SetActiveWindow.
Le but est de m'assurer que la fenêtre d'un message Outlook est
effectivement active avant que je n'effectue un coller de quelques
lignes issues d'un document Word (pour l'instant je n'ai pas trouvé
de solution alternative à ce collage).

Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à
fait comme je le souhaite (aléatoirement ou pas du tout pour le
collage) : (La méthode Display appartient à l'objet OLE Outlook
Mailitem déclaré plus haut dans mon code)
MessageOutlk.Display
'On recherche la fenêtre Outlook
Dim LaFen As Long
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
Message")
'On la défini comme étant celle active...
SetActiveWindow (LaFen)
'...avant de coller
SendKeys "^v", True

Mon soucis est que ne sachant pas ce que je dois renseigner au niveau
du premier argument (ByVal lpClassName As String), j'utilise
VbNullString, mais je me demande si effectivement ce n'est pas là
l'origine de mon problème ? J'ai essayé pour cet argument
"Outlook.Application" mais ça ne fonctionne pas mieux.
Si quelqu'un avait une piste ?

Merci d'avance
Cordialement
Pascal


Avatar
papou
Bonjour
Excuse moi mais je ne comprend pas ta proposition ?
Cordialement
Pascal

"ng" a écrit dans le message de
news:%
Pourquoi ne pas envoyer le message toi même, sans passer par outlook ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
> Bonjour à toutes et à tous
> Et meilleurs voeux pour la nouvelle année 2005.
> Dans le cadre d'un petit développement (en VBA), j'utilise la
> fonction API FindWindow puis SetActiveWindow.
> Le but est de m'assurer que la fenêtre d'un message Outlook est
> effectivement active avant que je n'effectue un coller de quelques
> lignes issues d'un document Word (pour l'instant je n'ai pas trouvé
> de solution alternative à ce collage).
>
> Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à
> fait comme je le souhaite (aléatoirement ou pas du tout pour le
> collage) : (La méthode Display appartient à l'objet OLE Outlook
> Mailitem déclaré plus haut dans mon code)
> MessageOutlk.Display
> 'On recherche la fenêtre Outlook
> Dim LaFen As Long
> LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
> Message")
> 'On la défini comme étant celle active...
> SetActiveWindow (LaFen)
> '...avant de coller
> SendKeys "^v", True
>
> Mon soucis est que ne sachant pas ce que je dois renseigner au niveau
> du premier argument (ByVal lpClassName As String), j'utilise
> VbNullString, mais je me demande si effectivement ce n'est pas là
> l'origine de mon problème ? J'ai essayé pour cet argument
> "Outlook.Application" mais ça ne fonctionne pas mieux.
> Si quelqu'un avait une piste ?
>
> Merci d'avance
> Cordialement
> Pascal




Avatar
ng
Ton objectif est bien d'envoyer en email ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
Bonjour
Excuse moi mais je ne comprend pas ta proposition ?
Cordialement
Pascal

"ng" a écrit dans le message de
news:%
Pourquoi ne pas envoyer le message toi même, sans passer par outlook
?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
Bonjour à toutes et à tous
Et meilleurs voeux pour la nouvelle année 2005.
Dans le cadre d'un petit développement (en VBA), j'utilise la
fonction API FindWindow puis SetActiveWindow.
Le but est de m'assurer que la fenêtre d'un message Outlook est
effectivement active avant que je n'effectue un coller de quelques
lignes issues d'un document Word (pour l'instant je n'ai pas trouvé
de solution alternative à ce collage).

Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à
fait comme je le souhaite (aléatoirement ou pas du tout pour le
collage) : (La méthode Display appartient à l'objet OLE Outlook
Mailitem déclaré plus haut dans mon code)
MessageOutlk.Display
'On recherche la fenêtre Outlook
Dim LaFen As Long
LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
Message")
'On la défini comme étant celle active...
SetActiveWindow (LaFen)
'...avant de coller
SendKeys "^v", True

Mon soucis est que ne sachant pas ce que je dois renseigner au
niveau du premier argument (ByVal lpClassName As String), j'utilise
VbNullString, mais je me demande si effectivement ce n'est pas là
l'origine de mon problème ? J'ai essayé pour cet argument
"Outlook.Application" mais ça ne fonctionne pas mieux.
Si quelqu'un avait une piste ?

Merci d'avance
Cordialement
Pascal






Avatar
papou
Oui
L'une des particularités est que chaque mail à envoyer se trouve dans une
section d'un document Word issu d'un publipostage et que je dois y ajouter
des pièces jointes.
Cordialement
Pascal


"ng" a écrit dans le message de
news:%
Ton objectif est bien d'envoyer en email ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
> Bonjour
> Excuse moi mais je ne comprend pas ta proposition ?
> Cordialement
> Pascal
>
> "ng" a écrit dans le message de
> news:%
>> Pourquoi ne pas envoyer le message toi même, sans passer par outlook
>> ?
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> papou wrote:
>>> Bonjour à toutes et à tous
>>> Et meilleurs voeux pour la nouvelle année 2005.
>>> Dans le cadre d'un petit développement (en VBA), j'utilise la
>>> fonction API FindWindow puis SetActiveWindow.
>>> Le but est de m'assurer que la fenêtre d'un message Outlook est
>>> effectivement active avant que je n'effectue un coller de quelques
>>> lignes issues d'un document Word (pour l'instant je n'ai pas trouvé
>>> de solution alternative à ce collage).
>>>
>>> Voici ce que j'utilise actuellement et qui ne fonctionne pas tout à
>>> fait comme je le souhaite (aléatoirement ou pas du tout pour le
>>> collage) : (La méthode Display appartient à l'objet OLE Outlook
>>> Mailitem déclaré plus haut dans mon code)
>>> MessageOutlk.Display
>>> 'On recherche la fenêtre Outlook
>>> Dim LaFen As Long
>>> LaFen = FindWindow(vbNullString, "Programme COMET : votre planning -
>>> Message")
>>> 'On la défini comme étant celle active...
>>> SetActiveWindow (LaFen)
>>> '...avant de coller
>>> SendKeys "^v", True
>>>
>>> Mon soucis est que ne sachant pas ce que je dois renseigner au
>>> niveau du premier argument (ByVal lpClassName As String), j'utilise
>>> VbNullString, mais je me demande si effectivement ce n'est pas là
>>> l'origine de mon problème ? J'ai essayé pour cet argument
>>> "Outlook.Application" mais ça ne fonctionne pas mieux.
>>> Si quelqu'un avait une piste ?
>>>
>>> Merci d'avance
>>> Cordialement
>>> Pascal




Avatar
ng
Alors une solution serait de les envoyer toi même via winsock.
Si tu ne l'as jamais fait c'est un peu compliqué (il faut maitrisé le
standard MIME pour l'encodage).

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
Oui
L'une des particularités est que chaque mail à envoyer se trouve dans
une section d'un document Word issu d'un publipostage et que je dois
y ajouter des pièces jointes.
Cordialement
Pascal


"ng" a écrit dans le message de
news:%
Ton objectif est bien d'envoyer en email ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
Bonjour
Excuse moi mais je ne comprend pas ta proposition ?
Cordialement
Pascal

"ng" a écrit dans le message de
news:%
Pourquoi ne pas envoyer le message toi même, sans passer par
outlook ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

papou wrote:
Bonjour à toutes et à tous
Et meilleurs voeux pour la nouvelle année 2005.
Dans le cadre d'un petit développement (en VBA), j'utilise la
fonction API FindWindow puis SetActiveWindow.
Le but est de m'assurer que la fenêtre d'un message Outlook est
effectivement active avant que je n'effectue un coller de quelques
lignes issues d'un document Word (pour l'instant je n'ai pas
trouvé de solution alternative à ce collage).

Voici ce que j'utilise actuellement et qui ne fonctionne pas tout
à fait comme je le souhaite (aléatoirement ou pas du tout pour le
collage) : (La méthode Display appartient à l'objet OLE Outlook
Mailitem déclaré plus haut dans mon code)
MessageOutlk.Display
'On recherche la fenêtre Outlook
Dim LaFen As Long
LaFen = FindWindow(vbNullString, "Programme COMET : votre
planning - Message")
'On la défini comme étant celle active...
SetActiveWindow (LaFen)
'...avant de coller
SendKeys "^v", True

Mon soucis est que ne sachant pas ce que je dois renseigner au
niveau du premier argument (ByVal lpClassName As String),
j'utilise VbNullString, mais je me demande si effectivement ce
n'est pas là l'origine de mon problème ? J'ai essayé pour cet
argument "Outlook.Application" mais ça ne fonctionne pas mieux.
Si quelqu'un avait une piste ?

Merci d'avance
Cordialement
Pascal










1 2