S
solova
Устанавливаю хук "InstallHook(...., this->m_hWnd)" и передаю HWND окна запустившего его.
В Длл есть фунька InstallHook , так вот hPwnd и hProg имеют значение только в этой функции(проверено), а в КАЛБАК-е hPwnd = 0
как исправить?<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">.h</div></div><div class="sp-body"><div class="sp-content">
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">.cpp</div></div><div class="sp-body"><div class="sp-content">
как засветить эту переменную везде и будет ли она видна в DllMain, чтоб в место МессаджБокса СендМессадж послать
В Длл есть фунька InstallHook , так вот hPwnd и hProg имеют значение только в этой функции(проверено), а в КАЛБАК-е hPwnd = 0
как исправить?<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">.h</div></div><div class="sp-body"><div class="sp-content">
C++:
#ifdef HOOK_EXPORTS
#define HOOK_API __declspec(dllexport)
#else
#define HOOK_API __declspec(dllimport)
#endif
static HHOOK hHook = NULL;
static HANDLE hDll = NULL;
static DWORD dwThread = NULL;
static HWND hPwnd = NULL; //!!!!!!!!!!!!!!!!!вот она переменная!!!!!!!!!
HOOK_API BOOL InstallHook(DWORD dwThrd,HWND hProg);
HOOK_API BOOL RemoveHook(void);
LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam);
C++:
#include "stdafx.h"
#include "hook.h"
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID /*lpReserved*/ )
{
switch ( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:hDll = hModule;
break;
case DLL_PROCESS_DETACH:MessageBox(0, L"PROCESS_DETACH", L"Target close" ,0);
break;
}
return TRUE;
}
HOOK_API BOOL RemoveHook(void){
UnhookWindowsHookEx(hHook);
return TRUE;}
//HWND hPwnd; //!!!!!!!!!так тоже пробовал- не помогает!!!!!!!!!!!
HOOK_API BOOL InstallHook(DWORD dwThrd,HWND hProg){
hPwnd=hProg;
SendMessage(hPwnd,WM_USER+23,0,0); //Месадж посылается , hPwnd != NULL
hHook = SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,(HINSTANCE)hDll,dwThrd);
return TRUE;}
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode >= 0) //HC_ACTION
{
CWPSTRUCT *cwp=(CWPSTRUCT*)lParam;
if(cwp->message==WM_COMMAND)
SendMessage(hPwnd,WM_USER+23,0,0); //Месадж не шлётся , hPwnd == NULL
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}