HOOK DLL - LE HOOK FACILE (POUR VB6)

Signaler
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41774-hook-dll-le-hook-facile-pour-vb6

Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
[Où est la DLL dans le zip ?]
Bonjour, il y a quelques années j'avais testé ta DLL. Mais aujourd'hui, la DLL est absente de ton projet ici publié. Pourrais tu re-fournir ta DLL stp, ou un lien permettant de récupérer ta DLL stp ? Merci d'avance !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
Même soucis que toi, FREMYCOMPANY, sous C#.
Le hhok ne peut etre lancé depuis une appli .Net, apparement...

du coup, suffit de se faire un Launcher ; une appli qui lancera le hook a ta place :

(C++)

#include <windows.h>

inline __declspec(naked) unsigned int __fastcall bnatoui(char *szsrc) { // Merci à BruNews
__asm {
xor edx, edx
xor eax, eax
nbrLoop:
mov dl, [ecx]
cmp dl, '0'
jb short nbrStop
cmp dl, '9'
ja short nbrStop
lea eax, [eax+eax*4]
sub dl, '0'
add eax, eax
inc ecx
add eax, edx
jmp short nbrLoop
nbrStop:
ret 0
}
}

typedef int __stdcall Initialize(unsigned int, int);
typedef void __stdcall Terminate(int);

#pragma comment(linker, "/entry:main")
void main() {
char* command = GetCommandLineA();
char* c = command + strlen(command);
while(*(--c)!=' ');
c++;
unsigned int hWnd = bnatoui(c);
if (hWnd) {
HMODULE hLib = LoadLibraryA("I:\\Papyrus-Intranet\\Core\\HookLib.dll");
if (hLib) {
int h = ((Initialize*)GetProcAddress(hLib, "Initialize"))(hWnd, WH_CBT);
MSG msg;
while(1)
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
((Terminate*)GetProcAddress(hLib, "Terminate"))(h);
}
}
}

Ici, je me suis fait un truc taillé pour mon besoin : un hook CBT...
on lance l'appli en donnant le Handle de la fenetre de retour (.Net) en parametre.

_Spy = Process.Start(@"E:\LaunchHook.exe", Handle.ToString());
Messages postés
278
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
22 décembre 2008

Je suis actuellement en train de faire une application VB.NET qui doit hooker sur la création de fenêtre.

Seulement voila je n'y arrives pas à le faire (en DotNet, impossible de récupérer le "hMod" car DotNet ne load pas une DLL, vu qu'il est compilé "Just-In-Time".

Je dois donc me tourner vers une DLL externe, comme la tienne.
Seulement, je ne sais pas comment la compiler.

Pourrais-tu m'expliquer comment faire ou m'envoyer la DLL complié via mail (f r e m y c o m p a n y (A) y a h o o . f r) ?

Et, tant que j'y suis, peux-tu me confirmer la marche à suivre ?
> Déclarer mes fonctions avec Declare Sub/Function
> Appeler Initialize avec le Handle de ma window
> Recevoir les appels WndProc sur ma window et soustraire WM_USER pour obtenir le type de hook (si c'est un hook)
> Appeler Terminate sur le FormClosing de ma window

Merci d'avance,
Fremy
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
celui de la fenetre que tu subclasses
c'est elle qui sera avertie des hooks
Afficher les 18 commentaires