Sousclasser les fenetres d'1 autre app

Soyez le premier à donner votre avis sur cette source.

Vue 10 196 fois - Téléchargée 1 173 fois

Description

Permet de voir les evennements generer par une fenetre d'une autre application
(mouvement de la sourie, click, deplacement etc...)

C'est un projet en cours de devellopement donc pour le moment vous
pouvez uniquement visualiser les evenements puis agir en consequence

Pour celle et ceux et qui connaissent l'ENOOOOOOOORME dossier
du sous-classement avec ses avantages et ses difficultés seront
tout de meme apprecier ce bout de code...

voici un petit descriptif de la technique employé (sans rentrer dans les details) :

permierement l'appli verifie que le process proprietaire ne
soit pas le process courant puis il charge la dll de sous-classement
dans le process distant et demarre le moteur de communication
une fois le moteur demarrer l'appli communique avec le serveur
puis lui demande de sous classer la fenetre en question
si cela est possible il le fait et renvoi tout les messages
a notre appli

Source / Exemple :


'voir le zip
'Restrictions :
' - un seul hook par app
' - l'image des process doivent etre sur le meme disque
' - disposer d'une platform NT

Conclusion :


bon je sait ya encore bcp de boulot pour que ce soit vraiment exploitable
mais c'est un bon debut et j'espere que d'autre proger vb vont bucher la dessus...

/!\\\\ necessite une platform NT : winNT,win2K ou winXP

@+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
It crash because of the VBVM.
Ca pete a cause de la VBVM.
Messages postés
16
Date d'inscription
samedi 27 mars 2010
Statut
Membre
Dernière intervention
30 décembre 2012

Sorry for the confusion EB.

The Increment Function example I posted above ( with the added MsgBox ) is in the dll .

and the actual DLL function call that crashes VBA is as follows :

Public Declare Function Increment Lib _
"C:\Documents and Settings\Jaafar\Bureau\MyDLL\mathlib.dll" ( _
value As Integer) As Integer

Private Sub cmdIncrement_Click()
Range("a10") = Increment(1)
End Sub
Messages postés
16
Date d'inscription
samedi 27 mars 2010
Statut
Membre
Dernière intervention
30 décembre 2012

Hi EB again.

As a matter of curiosity, did you try the trick for making standard dlls from ActiveX dlls like explained in the above link?

I did follow the steps and managed to make it work but when I add a small change to the exported functions (see below) and run the dll from Excel-VBA the excel application crashes !

1 -Original code ( + a simple MsgBox )that works when ran from a VB Standard VB : No crashing.

Public Declare Function Increment Lib _
"C:\Documents and Settings\Jaafar\Bureau\MyDLL\mathlib.dll" ( _
value As Integer) As Integer

Public Function Increment(var As Integer) As Integer
If Not IsNumeric(var) Then Err.Raise 5
MsgBox var
Increment = var + 1
End Function

2 -Code ran from excel VBA that CRASHES when the MsgBox is added :

Public Function Increment(var As Integer) As Integer
If Not IsNumeric(var) Then Err.Raise 5
MsgBox var
Increment = var + 1
End Function

In fact, except wotking with variables, the exported Functions will always crash if another COM function or even another API function is called but only when the client is VBA not VB !

I would appreciate if you could share your knowledge of this kind of stuff and shade some light on this to see if/how this could be worked around.

Regards.
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
If you add a DllMain function using this trick you will bypass the VBVM initialization resulting in a very instable state of your dll. But... it could work if you avoid any VBVM call. For example manipulating string in the DllMain will cause a seg fault because VB need to initialize the VM before doing any other things.

Si tu utilises une fonction DllMain avec cette astuce tu vas faire sauter l'initialisation de la VBVM ce qui va rendre ton programme très instable. Cela pourrait tout de même marcher si tu évite tout appel a la VM. Par exemple si tu manipule une chaîne de caractère tu vas avoir droit a un beau seg fault car VB doit initialiser la VM avant de faire quoi que ce soit d'autre.
Messages postés
16
Date d'inscription
samedi 27 mars 2010
Statut
Membre
Dernière intervention
30 décembre 2012

Here is the page link : http://oreilly.com/pub/a/windows/2005/04/26/create_dll.html?page=1

Check the 3 pages.
Afficher les 48 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.