| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1017 人关注过本帖, 1 人收藏
标题:请教关于钩子的一个疑问
取消只看楼主 加入收藏
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
结帖率:50%
收藏(1)
已结贴  问题点数:10 回复次数:7 
请教关于钩子的一个疑问
1,setwindowshookex()  在dll中调用这个函数,我想作为指定进程挂钩。所以我findwindow后getwindowthreadprocessid获取指定进程的线程id。在setwindowshookex 中的第三个参数我指定为getmodluehandle(),第四个参数我指定为找到的那个进程的线程id。
测试可以响应。但是我在用工具查看链接库发现该进程没有这个库。库是在创建钩子的进程。为什么不是在目标进程呢?

我第四个参数设置0则所有dll都注入了其他进程。
2013-07-09 10:06
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
回复 2楼 yuccn
这是我dll中写的代码。 目的是想以全局的形式插入目标进程,在目标进程中捕获键盘消息。


LRESULT CALLBACK KeyboardProc(  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
  )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    if(((lParam&(1<<31))==1) && wParam==VK_F9)
    {
        AfxMessageBox("hello");
    }
    return CallNextHookEx(NULL,code,wParam,lParam);
}

__declspec (dllexport) void SetHook()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    HWND hwnd=::FindWindow(NULL,"MSDN Library - October 2001");
    if(!hwnd)
    {
        AfxMessageBox("FindWindow() error!");
        return;
    }
    DWORD tid,pid;
    tid=GetWindowThreadProcessId(hwnd,&pid);

    if(!dle)
    {
        AfxMessageBox("GetModuleHandle() error! %d",GetLastError());
        return;
    }
    SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("GlobalHook.dll"),tid);
}


2013-07-09 22:08
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
谢谢我试试。
2013-07-10 00:30
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
回复 4楼 yuccn
写dll DllMain中遇到一个问题。
HINSTANCE gInstance=NULL;

int WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,LPVOID pvReserved)
{
    gInstance=hInstance;
    return true;
}一开始写这个没问题,编译通过。但是随后我添加了
LRESULT CALLBACK KeyboardProc(  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
  )
{
    return CallNextHookEx(NULL,code,wParam,lParam);
}
后就报错。 错误如下:
Linking...
mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in mhxy_.obj
LINK : fatal error LNK1104: cannot open file "TEMPFILE"
LINK : fatal error LNK1141: failure during build of exports file
执行 link.exe 时出错.

我删除这个回调函数,只剩下全局变量和DllMain 函数  再次编译,还是报错。刚刚还不报错的。
2013-07-10 08:08
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
回复 8楼 yuccn
压缩包上传不了附件,给出链接,麻烦一下。
http://pan.baidu.com/share/link?shareid=1558034311&uk=371345678

我是用vc6.0 向导生成MFC DLL 的。在win7下编辑。
2013-07-10 08:47
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
回复 10楼 yuccn
谢谢,学习你的编写方法。稍后有问题再请教。谢谢
2013-07-10 22:39
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
回复 11楼 yuccn
对了,sdk编写的dll
在mfc中 怎么引用呢?  还是 __declspec (dllimport) void SetHook() #pragma comment(lib,"xx.lib") 呢?
我试过好像也报错。 抱歉,新手,很多不懂。

2013-07-10 23:09
emoly
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-10
收藏
得分:0 
回复 14楼 yuccn
在头文件extern "c" __declspec(dllexport) bool sethook()和在def文件导出效果相同的吗?
2013-07-11 08:52
快速回复:请教关于钩子的一个疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016986 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved