#include<Windows.h>
#include "ShellClient.h"
#include<stddef.h>
#pragma comment( lib,"User32.lib")
typedef struct _MYHOOKDATA
{
int nType;
HOOKPROC hkprc;
HHOOK hhook;
} MYHOOKDATA;
#pragma data_seg (".shareddata")
JNIEnv *env=(JNIEnv *)NULL;
jobject obj=(jobject)NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:.shareddata,RWS")
#define DllExport __declspec(dllimport);
DllExport LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
/***开始鼠标HOOK****/
MYHOOKDATA myhookdata={NULL,NULL,NULL};
HINSTANCE hInstance=NULL;
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason,
LPVOID lpvReserved)
{
hInstance = hModule;
return TRUE;
}
JNIEXPORT void JNICALL
Java_ShellClient_hook(JNIEnv *_env, jobject _obj)
{
env=_env;
obj=_obj;
myhookdata.nType = WH_MOUSE;
myhookdata.hkprc = MouseProc;
myhookdata.hhook = SetWindowsHookEx(
myhookdata.nType,
myhookdata.hkprc,
hInstance,//(HINSTANCE)GetModuleHandle("mousehook")
0);
}
/***回调过程**/
DllExport LRESULT CALLBACK
MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook =
(MOUSEHOOKSTRUCT FAR *) lParam;
printf("x: %d , y: %d ",pMouseHook->pt.x,pMouseHook->pt.y);
return CallNextHookEx(myhookdata.hhook, nCode, wParam,lParam);
}
JNIEXPORT void JNICALL
Remove(JNIEnv *_env, jobject _obj)
{
UnhookWindowsHookEx(myhookdata.hhook);
}
//这个全局DLL是用在JAVA的JNI上面,可不只怎么搞的,只有把鼠标移动到载入DLL的这个进程关联的窗口上,才会显示坐标。头都大了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课