2009-02-13 8 views
1

J'ai une application VB6 dans laquelle je n'ai pas de code source. Cette application utilise des contrôles ActiveX tiers. Je veux automatiser ces contrôles ActiveX. Est-il possible d'obtenir les références IUnknowns ou Object? Pour certains d'entre eux, je peux obtenir les HWND sous-jacents, mais d'après ce que je peux dire, il n'y a pas de façon générique de convertir ces HWND au contrôle ActiveX.Automatisation de l'application VB6 avec des contrôles ActiveX

Certains logiciels de test vous permettent de programmer des applications VB6 avec des contrôles ActiveX. Comment font-ils?

+0

Etes-vous en train d'essayer d'automatiser l'application VB6, ou essayez-vous simplement d'accéder à la Contrôles ActiveX et exécutez-les à partir de votre programme? – jdigital

Répondre

0

Vous pouvez utiliser DLL injection via la bibliothèque Microsoft Research Detours. Fondamentalement, vous voudriez accrocher le cocreate pour ces contrôles spécifiques. Vous devrez faire preuve d'une extrême prudence, en particulier si vous faites quelque chose d'inter-thread/cross-process (les règles de threading COM sont d'une importance vitale).

Dans l'ensemble Detours est facile à utiliser ... mais je ne l'ai jamais essayé avec des routines COM. Vous pourriez vouloir regarder une solution différente.

Notez également que Detours a certaines restrictions de licence qui peuvent affecter votre capacité à le distribuer.

Le logiciel de test peut tout simplement envoyer les messages WM_XXX appropriés aux fenêtres particulières en question (par exemple, WM_MOUSEMOVE).

+0

J'utilise actuellement des messages WM_XXX, mais il y a une limite à ce que vous pouvez faire avec eux. Je vais essayer la route d'injection DLL. Merci. –

0

Désolé de le dire, mais le VB6 EXE ne contient pas les manifestes nécessaires pour extraire les objets COM qu'il utilise. Le mieux est d'essayer quelques-unes des suggestions de rbobby, en particulier pour envoyer des messages WM_XXX.

1

Ces contrôles ActiveX sont-ils dans une DLL distincte? Si oui, vous pouvez utiliser OLE View (un outil VS 6.0) pour ouvrir la DLL et afficher toutes les interfaces, coclasse et etc

Questions connexes