15,471
社区成员
发帖
与我相关
我的任务
分享
#ifdef MYHOOK_EXPORTS
#define MYHOOK_API __declspec(dllexport)
#else
#define MYHOOK_API __declspec(dllimport)
#endif
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam);
bool MYHOOK_API WINAPI StartHook(HINSTANCE hInst,HWND hWnd);
bool MYHOOK_API WINAPI StopHook();
// myhook.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "myhook.h"
HINSTANCE hInstance = NULL;
HHOOK hHook = NULL;
HWND hWndServer = NULL;
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *) lParam;
if (nCode>=0)
{
if (wParam==WM_MOUSEMOVE)
{
if( hWndServer != NULL )
{
POINT pt = pMouseHook->pt;
::MoveWindow(hWndServer,pt.x,pt.y,100,100,true);
return false;
}
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
bool WINAPI StartHook(HINSTANCE hInst,HWND hWnd)
{
if (hHook != NULL) return false;
hInstance = hInst;
hWndServer = hWnd;
hHook = SetWindowsHookEx(WH_MOUSE, MouseHookProc, hInstance, NULL);
if (hHook == NULL) return false;
return true;
}
bool WINAPI StopHook()
{
if (UnhookWindowsHookEx(hHook) == 0) return false;
hInstance = NULL;
hWndServer = NULL;
hHook = NULL;
return true;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
if (hHook != NULL) UnhookWindowsHookEx(hHook);
break;
}
return TRUE;
}