你好,我实现了你所要的功能。DLL的代码如下所示:
#include "stdafx.h"# define DLL_EXPORT
# include "32dll.h"#pragma data_seg("SharedData")
HHOOK hHook=NULL;
HWND glhTargetWnd = NULL;
HINSTANCE hInst=NULL;
#pragma data_seg()
#pragma comment(linker,"/section:SharedData,rws")
BOOL WINAPI DllMain( HINSTANCE hInstance,
DWORD dwReason,
LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if(dwReason == DLL_PROCESS_ATTACH)
hInst = hInstance;
return true;
}extern "C" MYAPI BOOL InstallHook()
{
hHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst, 0);
return !(hHook==NULL);
}LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook =
(MOUSEHOOKSTRUCT FAR *)lParam; if (nCode>=0)
{
switch (wParam)
{
case WM_RBUTTONDOWN:
{
// Set the target window!
glhTargetWnd = pMouseHook->hwnd;
SetWindowText(glhTargetWnd, (LPCTSTR)"Window has been hooked!");
return -1;
}
case WM_LBUTTONDOWN:
{
// Pay attention to this statement, or will crash!
if( glhTargetWnd && glhTargetWnd!=pMouseHook->hwnd )
{
::SendMessage(glhTargetWnd, WM_LBUTTONDOWN, (WPARAM)MK_SHIFT, MAKELPARAM(100, 100));
::SendMessage(glhTargetWnd, WM_LBUTTONUP, (WPARAM)MK_SHIFT, MAKELPARAM(100, 100));
// Prevent the original window from processing this message
return -1;
}
}
}
} return CallNextHookEx(hHook,nCode,wParam, lParam);
}extern "C" MYAPI BOOL UninstallHook()
{
return UnhookWindowsHookEx(hHook);
}如果你要完整的DLL和测试程序,写信给我吧!
#include "stdafx.h"# define DLL_EXPORT
# include "32dll.h"#pragma data_seg("SharedData")
HHOOK hHook=NULL;
HWND glhTargetWnd = NULL;
HINSTANCE hInst=NULL;
#pragma data_seg()
#pragma comment(linker,"/section:SharedData,rws")
BOOL WINAPI DllMain( HINSTANCE hInstance,
DWORD dwReason,
LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if(dwReason == DLL_PROCESS_ATTACH)
hInst = hInstance;
return true;
}extern "C" MYAPI BOOL InstallHook()
{
hHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst, 0);
return !(hHook==NULL);
}LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook =
(MOUSEHOOKSTRUCT FAR *)lParam; if (nCode>=0)
{
switch (wParam)
{
case WM_RBUTTONDOWN:
{
// Set the target window!
glhTargetWnd = pMouseHook->hwnd;
SetWindowText(glhTargetWnd, (LPCTSTR)"Window has been hooked!");
return -1;
}
case WM_LBUTTONDOWN:
{
// Pay attention to this statement, or will crash!
if( glhTargetWnd && glhTargetWnd!=pMouseHook->hwnd )
{
::SendMessage(glhTargetWnd, WM_LBUTTONDOWN, (WPARAM)MK_SHIFT, MAKELPARAM(100, 100));
::SendMessage(glhTargetWnd, WM_LBUTTONUP, (WPARAM)MK_SHIFT, MAKELPARAM(100, 100));
// Prevent the original window from processing this message
return -1;
}
}
}
} return CallNextHookEx(hHook,nCode,wParam, lParam);
}extern "C" MYAPI BOOL UninstallHook()
{
return UnhookWindowsHookEx(hHook);
}如果你要完整的DLL和测试程序,写信给我吧!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货