首页
社区
课程
招聘
[求助]
发表于: 2008-8-24 13:22 3875

[求助]

2008-8-24 13:22
3875
#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的这个进程关联的窗口上,才会显示坐标。头都大了

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
怎么没人啦11
2008-8-24 17:00
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
恩。、没有热心人了。我也帮不聊你。
2008-8-24 18:32
0
雪    币: 4833
活跃值: (2218)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
前面的HOOK过程貌似正确。
是不是你的回调函数设置有问题?
里面的printf是不是应该传递到一个进程句柄上进行显示?

/***回调过程**/
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);

}
2008-8-24 19:03
0
游客
登录 | 注册 方可回帖
返回
//