Quel est d'après vous le meilleur moyen de tester l'existence de WORD et/OU
EXCEL sur le pc
je fais ceci pour word, est-ce correct? quelque soit la version installée?
merci d'avance
Pascal
On Error Resume Next
' récupération de l'erreur
Set wd = GetObject(, "Word.Application")
If Err.Number <> 0 Then
'Word existe
Set wd = CreateObject("Word.Application")
End If
Sur le principe très bien, mais une chose m'intrigue : il me semble que je n'obtiens quelque chose dans l'objet qu'une fois que la session Word est ouverte, ce qui n'est pas instantané.
C'est exact.
[...]
Arghh !!! doublé de 20 seconde :-D
-- Cordialement,
Jacques.
Bonjour Jean-Marc,
Jean-marc a écrit :
Gloops wrote:
Bonjour,
Sur le principe très bien, mais une chose m'intrigue : il me semble
que je n'obtiens quelque chose dans l'objet qu'une fois que la
session Word est ouverte, ce qui n'est pas instantané.
Sur le principe très bien, mais une chose m'intrigue : il me semble que je n'obtiens quelque chose dans l'objet qu'une fois que la session Word est ouverte, ce qui n'est pas instantané.
C'est exact.
[...]
Arghh !!! doublé de 20 seconde :-D
-- Cordialement,
Jacques.
François Picalausa
On Nov 2, 1:52 pm, Jacques93 wrote:
Oui, car je pense qu'une des première chose que fait CreateObject est de vérifier la présence du la clé "Word.Application" et de sa sous-cl é CLSID dans HKCR, ce qui est pratiquement instantanée.
Hello,
C'est le cas. En fait, CreateObject effectue les opérations suivantes (cf http://support.microsoft.com/kb/122288): CLSIDFromProgID : Récupère le CLSID à partir du ProgID renseigné CoCreateInstance(clsid ...) : Demande un pointeur vers IUnknown de l'objet de question punk->QueryInterface(IID_IDispatch ...) : Demande un pointeur vers IDispatch qui est l'interface permettant le late binding punk->Release : Détruit la référence au IUnknown
<OT> Il est à remarquer que ça signifie qu'on donc peut aller légèrement plus vite - en renvoyant l'instance créée lors du test d'existence (puisqu'elle sera probablement utilisée par la suite dans le programme), ce qui évite de Release l'IDispatch pour ensuite le recréer - en appelant directement CLSIDFromProgID et CoCreateInstance, et en oubliant le passage par QueryInterface. </OT>
François
On Nov 2, 1:52 pm, Jacques93 <jacques@Nospam> wrote:
Oui, car je pense qu'une des première chose que fait CreateObject est de
vérifier la présence du la clé "Word.Application" et de sa sous-cl é
CLSID dans HKCR, ce qui est pratiquement instantanée.
Hello,
C'est le cas. En fait, CreateObject effectue les opérations suivantes
(cf http://support.microsoft.com/kb/122288):
CLSIDFromProgID : Récupère le CLSID à partir du ProgID renseigné
CoCreateInstance(clsid ...) : Demande un pointeur vers IUnknown de
l'objet de question
punk->QueryInterface(IID_IDispatch ...) : Demande un pointeur vers
IDispatch qui est l'interface permettant le late binding
punk->Release : Détruit la référence au IUnknown
<OT>
Il est à remarquer que ça signifie qu'on donc peut aller légèrement
plus vite
- en renvoyant l'instance créée lors du test d'existence (puisqu'elle
sera probablement utilisée par la suite dans le programme), ce qui
évite de Release l'IDispatch pour ensuite le recréer
- en appelant directement CLSIDFromProgID et CoCreateInstance, et en
oubliant le passage par QueryInterface.
</OT>
Oui, car je pense qu'une des première chose que fait CreateObject est de vérifier la présence du la clé "Word.Application" et de sa sous-cl é CLSID dans HKCR, ce qui est pratiquement instantanée.
Hello,
C'est le cas. En fait, CreateObject effectue les opérations suivantes (cf http://support.microsoft.com/kb/122288): CLSIDFromProgID : Récupère le CLSID à partir du ProgID renseigné CoCreateInstance(clsid ...) : Demande un pointeur vers IUnknown de l'objet de question punk->QueryInterface(IID_IDispatch ...) : Demande un pointeur vers IDispatch qui est l'interface permettant le late binding punk->Release : Détruit la référence au IUnknown
<OT> Il est à remarquer que ça signifie qu'on donc peut aller légèrement plus vite - en renvoyant l'instance créée lors du test d'existence (puisqu'elle sera probablement utilisée par la suite dans le programme), ce qui évite de Release l'IDispatch pour ensuite le recréer - en appelant directement CLSIDFromProgID et CoCreateInstance, et en oubliant le passage par QueryInterface. </OT>
François
Jean-marc
Jacques93 wrote:
Bonjour Jean-Marc, Jean-marc a écrit :
Gloops wrote:
Bonjour,
Sur le principe très bien, mais une chose m'intrigue : il me semble que je n'obtiens quelque chose dans l'objet qu'une fois que la session Word est ouverte, ce qui n'est pas instantané.
Sur le principe très bien, mais une chose m'intrigue : il me semble
que je n'obtiens quelque chose dans l'objet qu'une fois que la
session Word est ouverte, ce qui n'est pas instantané.
Sur le principe très bien, mais une chose m'intrigue : il me semble que je n'obtiens quelque chose dans l'objet qu'une fois que la session Word est ouverte, ce qui n'est pas instantané.
Bonjour François Picalausa, François Picalausa a écrit :
On Nov 2, 1:52 pm, Jacques93 wrote:
Oui, car je pense qu'une des première chose que fait CreateObject est de vérifier la présence du la clé "Word.Application" et de sa sous-clé CLSID dans HKCR, ce qui est pratiquement instantanée.
Hello,
C'est le cas. En fait, CreateObject effectue les opérations suivantes (cf http://support.microsoft.com/kb/122288): CLSIDFromProgID : Récupère le CLSID à partir du ProgID renseigné CoCreateInstance(clsid ...) : Demande un pointeur vers IUnknown de l'objet de question punk->QueryInterface(IID_IDispatch ...) : Demande un pointeur vers IDispatch qui est l'interface permettant le late binding punk->Release : Détruit la référence au IUnknown
<OT> Il est à remarquer que ça signifie qu'on donc peut aller légèrement plus vite - en renvoyant l'instance créée lors du test d'existence (puisqu'elle sera probablement utilisée par la suite dans le programme), ce qui évite de Release l'IDispatch pour ensuite le recréer - en appelant directement CLSIDFromProgID et CoCreateInstance, et en oubliant le passage par QueryInterface. </OT>
François
Merci de ces précisions :-)
-- Cordialement,
Jacques.
Bonjour François Picalausa,
François Picalausa a écrit :
On Nov 2, 1:52 pm, Jacques93 <jacques@Nospam> wrote:
Oui, car je pense qu'une des première chose que fait CreateObject est de
vérifier la présence du la clé "Word.Application" et de sa sous-clé
CLSID dans HKCR, ce qui est pratiquement instantanée.
Hello,
C'est le cas. En fait, CreateObject effectue les opérations suivantes
(cf http://support.microsoft.com/kb/122288):
CLSIDFromProgID : Récupère le CLSID à partir du ProgID renseigné
CoCreateInstance(clsid ...) : Demande un pointeur vers IUnknown de
l'objet de question
punk->QueryInterface(IID_IDispatch ...) : Demande un pointeur vers
IDispatch qui est l'interface permettant le late binding
punk->Release : Détruit la référence au IUnknown
<OT>
Il est à remarquer que ça signifie qu'on donc peut aller légèrement
plus vite
- en renvoyant l'instance créée lors du test d'existence (puisqu'elle
sera probablement utilisée par la suite dans le programme), ce qui
évite de Release l'IDispatch pour ensuite le recréer
- en appelant directement CLSIDFromProgID et CoCreateInstance, et en
oubliant le passage par QueryInterface.
</OT>
Bonjour François Picalausa, François Picalausa a écrit :
On Nov 2, 1:52 pm, Jacques93 wrote:
Oui, car je pense qu'une des première chose que fait CreateObject est de vérifier la présence du la clé "Word.Application" et de sa sous-clé CLSID dans HKCR, ce qui est pratiquement instantanée.
Hello,
C'est le cas. En fait, CreateObject effectue les opérations suivantes (cf http://support.microsoft.com/kb/122288): CLSIDFromProgID : Récupère le CLSID à partir du ProgID renseigné CoCreateInstance(clsid ...) : Demande un pointeur vers IUnknown de l'objet de question punk->QueryInterface(IID_IDispatch ...) : Demande un pointeur vers IDispatch qui est l'interface permettant le late binding punk->Release : Détruit la référence au IUnknown
<OT> Il est à remarquer que ça signifie qu'on donc peut aller légèrement plus vite - en renvoyant l'instance créée lors du test d'existence (puisqu'elle sera probablement utilisée par la suite dans le programme), ce qui évite de Release l'IDispatch pour ensuite le recréer - en appelant directement CLSIDFromProgID et CoCreateInstance, et en oubliant le passage par QueryInterface. </OT>