Newsgroup: it.comp.programmare.win32
Titolo: SetWindowsHookEx.... problemi!

Salve a tutti,
in VC++60 ho una dll con cui voglio iniettarmi nel processo di wordpad per
"spiare i msg".....
FILE myDll
{
....
BOOL WINAPI DllMain( HINSTANCE hInstDll, DWORD fdwReason, LPVOID fImpLoad)
{
  switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
          g_hinstDll = hInstDll;
.............................
}
LRESULT CALLBACK GetMsgProc (int nCode, WPARAM wParam, LPARAM lParam)
{
....
 }
REMOTEAPI BOOL WINAPI SetHook(DWORD dwThreadId)
{
....
g_hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hinstDll,
dwThreadId);
....
}
}
SORGENTE ESEGUIBILE
{
#include "mydll.h"
...
CreateProcess(wordpad,.....,&pi);
SetHook(pi.dwThreadId);
.................
}
il problema e' che quando viene eseguita la SetWindowHookEx ritorna un
valore di errore (87) che indica un parametro sbagliato! La dll e' linkata
implicitamente con l'inclusione del .h e l'indicazione del .lib al linker!
Dov'e' che sbaglio?
Grazie
Bye
Johnny

 }
A memoria, l'SDK mi sembra specifichi che:
1) se indichi il 4 parametro, l'hook sarà locale al processo - non
importa specificare il 3 parametro (che deve essere null);
2) se il 4 param e' zero, il 3 indica l'istanza della dll che contiene
l'hook (necessaria per mapparla in tutti i processi che lo
necessiteranno).
Aspe, controllo su Platform SDK on line:
HHOOK SetWindowsHookEx(
  int idHook,        // hook type
  HOOKPROC lpfn,     // hook procedure
  HINSTANCE hMod,    // handle to application instance
  DWORD dwThreadId   // thread identifier
);
...
hMod 
[in] Handle to the DLL containing the hook procedure pointed to by the
lpfn parameter. ->The hMod parameter must be set to NULL if the
dwThreadId parameter specifies a thread created by the current process
<- and if the hook procedure is within the code associated with the
current process.
dwThreadId 
[in] Specifies the identifier of the thread with which the hook
procedure is to be associated. If this parameter is zero, the hook
procedure is associated with all existing threads running in the same
desktop as the calling thre
Occhei, prova a mettere a zero il quarto parametro.
Ciao,
Zello

 wrote in message
news:46e25fda.01082...@posting.google.com...

Il problema e' che io NON voglio associare l'hook con tutti i threads
esistenti:
io voglio installare un hook nel processo di WordPad.... la SetWindowsHookEx
la faccio in un processo che si incarica di lanciare WordPad e appunto di
settare l'hook!
quindi secondo te come dovrei settare i parametri?
Bye
Johnny

 dwThreadId);
Prova a chiamare GetProcAddress() per trovare l'entry point "vero" di
GetMsgProc, anziche` passare direttamente il simbolo (che molte volte non
corrisponde allo stesso indirizzo).
--
Bye! Lorenzo Lutti
http://antani.virtualave.net/

 settare l'hook!
Non si può installare un hook in un thread di un processo diverso da
quello che chiama SetWindowsHookEx:
-------------
The hMod parameter must be set to NULL if the
dwThreadId parameter specifies a thread created by the current process
 and if the hook procedure is within the code associated with the
current process.
-------------
Quindi devi prima entrare nel processo di WordPad.
In pratica, ti consiglio di:
1) Installare un hook global di tipo WH_SHELL o WH_CBT;
2) Avviare WordPad con CreateProcess;
3) Intercettare l'avvio del processo di WordPad dall'hook globale;
4) da dentro l'hook globale, installare un hook locale per ogni thread
che trovi nel processo di WordPad, e disinstallare l'hook globale.
Ciao,
Zello