你好,我实现了你所要的功能。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和测试程序,写信给我吧!