15,471
社区成员
发帖
与我相关
我的任务
分享
LRESULT CALLBACK MouseHookProc(
int code,
WPARAM wParam,
MSLLHOOKSTRUCT*lParam
)
{
static INPUT Input={INPUT_MOUSE};
if(code<0||lParam->flags&LLMHF_INJECTED)return CallNextHookEx(0,code,wParam,(LPARAM)lParam);
switch(wParam)
{
case WM_LBUTTONDOWN:
Input.mi.dx=lParam->pt.x;
Input.mi.dy=lParam->pt.y;
Input.mi.mouseData=lParam->mouseData;
Input.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN;
Input.mi.time=lParam->time;
Input.mi.dwExtraInfo=lParam->dwExtraInfo;
SendInput(1,&Input,sizeof(INPUT));
return 1;
case WM_LBUTTONUP:
Input.mi.dx=lParam->pt.x;
Input.mi.dy=lParam->pt.y;
Input.mi.mouseData=lParam->mouseData;
Input.mi.dwFlags=MOUSEEVENTF_RIGHTUP;
Input.mi.time=lParam->time;
Input.mi.dwExtraInfo=lParam->dwExtraInfo;
SendInput(1,&Input,sizeof(INPUT));
return 1;
case WM_RBUTTONDOWN:
Input.mi.dx=lParam->pt.x;
Input.mi.dy=lParam->pt.y;
Input.mi.mouseData=lParam->mouseData;
Input.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
Input.mi.time=lParam->time;
Input.mi.dwExtraInfo=lParam->dwExtraInfo;
SendInput(1,&Input,sizeof(INPUT));
return 1;
case WM_RBUTTONUP:
Input.mi.dx=lParam->pt.x;
Input.mi.dy=lParam->pt.y;
Input.mi.mouseData=lParam->mouseData;
Input.mi.dwFlags=MOUSEEVENTF_LEFTUP;
Input.mi.time=lParam->time;
Input.mi.dwExtraInfo=lParam->dwExtraInfo;
SendInput(1,&Input,sizeof(INPUT));
return 1;
}
return CallNextHookEx(0,code,wParam,(LPARAM)lParam);
}
int wmain()
{
HHOOK hHook;MSG msg;
hHook=SetWindowsHookExW(WH_MOUSE_LL,(HOOKPROC)MouseHookProc,GetModuleHandleW(0),0);
while (GetMessageW(&msg, 0, 0, 0)!=-1);
}
#include "windows.h"
#include "hookdll.h" //键盘按键值定义
#include "string.h"
#include "stdio.h"
#include <iostream.h>
//#include <afx.h>
#pragma data_seg("hookdata")//参数导出
char command[90];
HHOOK oldkeyhook=NULL;
HHOOK oldmousehook=NULL;
HWND hwnd=NULL;
HANDLE com;
HINSTANCE hInst=NULL;
bool doSend=false;
OVERLAPPED wOverLaped1 = {0}; //写操作使用的OVERLAPPED结构
#pragma data_seg()
#pragma comment(linker,"/SECTION:hookdata,RWS")//导出全局数据
#define DllExport extern "C"__declspec(dllexport)
DllExport LRESULT WINAPI CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam );//钩子函数导出
DllExport LRESULT WINAPI CALLBACK MouseProc(int nCode,WPARAM wParam, LPARAM lParam );//钩子函数导出
DllExport void InstallHook(HINSTANCE hInstance);//安装钩子函数导出
DllExport void EndHook();//卸载钩子函数导出
DllExport void setSend(bool Send);//
DllExport void setCom(HANDLE Com);//
DWORD send(HANDLE hCom,LPCVOID lpBuffer,DWORD nNumber);
/*动态库入口函数*/
BOOL WINAPI DllMain(HINSTANCE hInstance,ULONG What,LPVOID NotUsed)
{
switch(What)
{
case DLL_PROCESS_ATTACH://在进程加载时安装
// hInst = hInstance;
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return 1;
}
/*安装键盘钩子函数*/
void InstallHook(HINSTANCE hInstance)
{
oldmousehook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,hInstance,0);
oldkeyhook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyBoardProc,hInstance,0);
}
/*键盘钩子函数回调函数*/
LRESULT WINAPI CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam )
{
return CallNextHookEx(oldkeyhook,nCode,wParam,lParam);
}
LRESULT WINAPI CALLBACK MouseProc(int nCode,WPARAM wParam, LPARAM lParam )
{
return CallNextHookEx( oldmousehook,nCode,wParam,lParam);
}
void EndHook()
{
UnhookWindowsHookEx(oldmousehook);
UnhookWindowsHookEx(oldkeyhook);
}