Shell - sendkeys - Appactivate

Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 31 juil. 2011 à 12:23
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 3 août 2011 à 08:58
Bonjour,

Je souhaiterais à partir d'un projet appeler Outlook Express ou Winmail ou ..., et lancer un sendkeys pour, dans le cas d'Outlook Express créer un nouveau mail. J'ai cherché en vain
mais je n'ai rien trouvé.

Exemple de ce que je souhaiterais faire:
CodRet = Shell("C:\Program Files\Outlook Express\msimn.exe", vbNormalFocus)
AppActivate CodRet '<-- ?......Il y en à qui dise de donner le nom du projet ?
Call Pause(3) '<-- J'ai fais une pause de 3 secondes pour les essais
SendKeys "^N" '<-- Afficher la page "Créer" (ctrl + N)


On trouve beaucoup d'exemples avec BlocNote ou avec la calculatrice mais aucun ne fonctionne pour ce que je souhaiterais faire.

Je pense que le problème se situe au niveau de l'appactivate qui ne fonctionne que pour les logiciels Windows. Beaucoup de questions identiques dans les forums.

Impossible dans mon cas,de donner le focus à l'application appelée avant de lancer le sendKeys


Alors, si vous avez un exemple concret....

Par avance Merci.

14 réponses

NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
31 juil. 2011 à 19:06
Bonjour,

Si tu as besoin de Outlook, normalement, tu peux directement l'automatiser via COM, voir les sujets sur le net.

Après, pour activer une fenêtre, voir peut être ces liens :
http://www.vb6.us/tutorials/activate-window-api
http://www.freevbcode.com/ShowCode.asp?ID=526

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
1 août 2011 à 09:51
Bonjour

Si Outlook express ou winmail sont respectivement les gestionnaires de messagerie par défaut sous WinXp et Win7 (ou vista).

Je me demande si le besoin, n'est pas simplement de créer un mail soit un objet "nouveau message" type "MAPI" . donc le problème des sendkeys tombe à l'eau
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
1 août 2011 à 10:20
Bonjour,

J'ai écrit un projet qui génère une signature Html avec image et texte. l'outil présente pour
sa construction le fichier html dans un composant WebBrowser.

Pour l'utilisateur, je souhaiterais lui ouvrir Outlook (Pas de Problème) et lui présenter
sa signature. Pour cela, je dois lui créer un mail Vide en simulant un click sur le bouton "Créer". C'est la qu'intervient le SendKeys.

De plus, je souhaiterais faire marcher ce Sendkeys.

Alors, si vous pouviez me corriger le morceau de source qui figure dans ma question, ce serait
bien pour moi et pour ceux qui ont essayé d'utiliser cette commande.

Merci à vous deux.

Par avance Merci.
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
1 août 2011 à 11:15
Bonjour

Ce que je voulais dire c est que je ne suis pas sur que la correction du code soit possible

SendKeys ne fonctionne pas avec tous les programmes et perso j evite

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
1 août 2011 à 11:27
Re,

Je suis certain que Sendkeys fonctionne avec tous les programmes.
Le problème se situe au niveau de l'AppActivate qui ne fonctionne que sur des logiciels Windows. (Si j'ai bien compris ? ).
Les exemples que j'ai vu fonctionne correctement avec BlocNote, Calculatrice.... Exemples qui utilisent AppActivate et Sendkeys.

Si mon code ne marche pas cela vient de l'AppActivate qui ne donne pas le focus à Outlook express.


A+
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
1 août 2011 à 22:55
Bonjour,

Les liens que j'ai donnés précédemment ne t'ont pas aidés ?
Je t'en rajoute 1 :
http://www.xtremevbtalk.com/archive/index.php/t-185385.html

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
2 août 2011 à 11:02
Bonjour,

J'ai consulté le site que tu m'as donné et refais des essais. L'exemple qui est donné concerne
encore un Programme Windows Notepad.

Je vois que tu passes beaucoup de temps pour essayer de me dépanner. C'est très gentil de ta part.

Si tu as du temps de libre, tu peux toujours essayer de corriger ces quelques lignes ?
en ce qui me concerne, j'abandonne, mais si tu trouves, je referais des essais.

CodRet = Shell("C:\Program Files\Outlook Express\msimn.exe", vbNormalFocus)
AppActivate CodRet '<-- ?......Il y en à qui dise de donner le nom du projet ?
Call Pause(3) '<-- J'ai fais une pause de 3 secondes pour les essais
SendKeys "^N" '<-- Afficher la page "Créer" (ctrl + N)


Encore merci pour ton support.


Ps. Le shell affiche Outlook au premier Plan et après les 3 secondes d'attente, le Sendkeys
redonne le Focus au projet et Outlook repasse en second Plan. Toujours un problème de Focus.

Merci encore.
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
2 août 2011 à 11:30
Bonjour,

Question bête, et en faisant une pause entre le Shell et le AppActivate ?

Sur cette page :
http://www.xtremevbtalk.com/archive/index.php/t-185385.html
As-tu testé la proposition de Ej12N du 08-25-2004, 05:49 PM ?

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
2 août 2011 à 11:57
Re,

Je l'ai certainement fais !. Le problème c'est l'Appactivate ne semble marcher que pour des applications Windows ?....

A+
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
2 août 2011 à 12:41
Bonjour,

Je ne te parles pas de AppActivate, mais de ce message :
for over 3 hours trying to get that working i end up with nothing thats works..

i cant find how that findwindow api and setforegroundwindow works..

can somebody help me with this ?
*useable example of some kind maby ???*

Thanx Daniel
:)
make a project...add this code
open notepad take the focus off
run program...
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
lHandle = FindWindow("Notepad", vbNullString)
'Set this window to the foreground
lHandle = SetForegroundWindow(lHandle)
End Sub


Explanation of FindWindow...
FindWindow(ClassName,Title Of App)
so this with notepad will work with notepad as classname or "untitled - notepad" which is default title notepad has when first opened... in your case i dont know if "NSVCAP" is the title or classname but prolly is title so instead of
lHandle = FindWindow("Notepad", vbNullString)
use
lHandle = FindWindow(vbNullString, "NSVCAP")

OR use Spy++ to get NSVCAP program classname and put it where i put notepad in example...
hope that helps and i havent confuse you :p


---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
2 août 2011 à 13:02
J'ai fais également un essai avec SetForground.
Tu remarqueras, dans tous les essais qui sont présentés, il utilisent toujours la calculatrice ou Notepad et là, pas de problème ça marche.


Je constate à nouveau que tu essais de me rendre service. Je te remercie encore pour tes recherches.

En ce qui me concerne. J'abandonne.

Fais un essai avec les quelques lignes de code.

Merci encore
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
2 août 2011 à 21:38
Bonjour,

Tu ne m'as toujours pas dit si tu faisait une pause juste après ton Shell ?

Car contrairement à Notepad ou Calc, WinWord, outlook, et autre mettent plus de temps à se charger.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Utilisateur anonyme
2 août 2011 à 21:54
Petite remarque toute bête :
lHandle = FindWindow("Texte exact de la barre de titre de la fenetre à chercher (respecter la casse)", vbNullString)
lHandle = SetForegroundWindow(lHandle)

Bonne soirée.
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
3 août 2011 à 08:58
Bonjour,

- Tu ne m'as toujours pas dit si tu faisait une pause juste après ton Shell ----> Réponse: Oui

- J'ai fais également un essai avec SetForground.

En ce qui me concerne, j'abandonne la recherche.

Merci encore pour votre aide.
Rejoignez-nous