2009-11-01 4 views
1

Est-il possible d'ajouter un composant graphique à une application déjà en cours d'exécution?Ajout de composants graphiques à une application précompilée

C.-À Ajouter un onglet supplémentaire dans une interface graphique tierce partie?

J'ai une application tierce où je dois ajouter un onglet supplémentaire dans l'interface à onglets (ou même un bouton pour créer un lien vers une nouvelle forme).

Je peux voir les composants de l'interface utilisateur dans UISpy et Spy ++, mais ne peut pas voir un moyen de modifier ou de les ajouter ...

Toutes les idées? Peut-être modifier la mémoire?

Mise à jour:
L'application que j'ai créé pour envelopper autour de l'application tierce est .NET mais l'application tierce partie est écrit en VB6

+0

Juste pour clarifier: Vous parlez d'une application qui n'a pas été conçu pour supporter cela, correct? –

+0

Oui l'application est écrite par une source externe, et en tant que tel, je n'ai pas accès à le faire par programmation. L'application a une interface à onglets, et a été écrit pre-.NET dans VB6. – Darbio

+0

Mon conseil est de ne pas le faire, car toute solution que vous trouvez est susceptible d'être extrêmement floconneuse et provoquer des plantages occasionnels dans l'application tierce.Pouvez-vous contacter les auteurs de l'application tierce et discuter des solutions? – MarkJ

Répondre

2

Je suppose qu'il est tout à fait possible avec la réflexion, à l'aide de Reflector, en supposant qu'il n'a pas été obscurci. Explorez autour de la source réfléchie jusqu'à ce que vous trouviez la classe du formulaire, et l'instance du formulaire que vous voulez modifier, puis vous pouvez appeler la méthode Controls.Add, ou toute autre chose dont vous avez besoin, avec la réflexion. Mais à moins que vous sachiez exactement ce que vous faites, vous pourriez rencontrer un comportement inattendu de l'application.

1

Je suppose que c'est une application WinForm .NET. Si vous n'avez pas les fichiers sources et que l'application n'est pas trop grande, vous pouvez essayer de la décompiler et ajouter votre code pour en faire une nouvelle application.

Je suis un grand fan de réflecteur de Lutz Roeder qui génèrent le code de la base de code CLR. Voici un lien vers ses outils. http://www.lutzroeder.com/dotnet/

Mise à jour:

darkassassin93 est juste, je l'espère l'application n'est pas brouillées :)

+0

L'application que j'ai créée pour envelopper l'application tierce est .NET mais l'application tierce est écrite en VB6, donc le compilateur ne fonctionnera pas trop bien mais je vais chercher intérêts intérêt :) – Darbio

+0

@JD: Je vois, j'ai mis à jour votre question avec votre commentaire et ajouté tag 'VB6'. –

2

Vous pouvez utiliser ResHacker.

http://www.angusj.com/resourcehacker/

Fondamentalement, chaque forme de GUI est enregistré comme une ressource à l'intérieur d'un exécutable Windows particulier. ResHacker dispose d'un éditeur graphique intégré pour l'édition de "dialogues" (comme ils sont mentionnés dans ResHacker).

+0

J'ai ouvert le fichier exe (et quelques fichiers dll dans le même répertoire) et aucun arbre DIALOG dans res hacker. Une boîte de dialogue peut-elle être conservée dans un autre fichier (par exemple dll) dans VB6? – Darbio

+0

Oui, les ressources peuvent également être enregistrées dans des fichiers DLL. Si j'étais vous, je rechercherais tous les fichiers DLL/EXE/OCX dans le répertoire à la recherche de la boîte de dialogue. –

+1

VB6 n'utilise pas de ressource pour les dialogues donc cela ne fonctionnera pas dans son cas – wqw

1

Vous devriez avoir de bonnes raisons de le faire.

Je pense que vous pouvez commencer par Add Tab using pure WinAPI et TabCtrl_InsertItem Macro

Si vous avez HWND de TabControl vous pouvez essayer d'ajouter votre propre onglet. avec TabCtrl_InsertItem. Bien que je ne pense pas qu'il soit possible de le faire d'un autre processus. Mais tu devrais essayer.

+0

Je vais essayer ceci - J'ai démarré le processus en utilisant mon programme wrapper alors j'ai le handle de la fenêtre, et je peux facilement trouver le contrôle hwnd du tab. Rendra compte. – Darbio

+0

Cela peut provoquer des problèmes dans le code de l'application tierce. Par exemple, ils peuvent gérer l'événement tab-click ou lire la propriété pour le nombre d'onglets (assez raisonnablement en supposant que seulement * leurs * onglets seraient présents). Personnellement, je vous conseille fortement de ne pas utiliser cette approche. – MarkJ

Questions connexes