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

我第四个参数设置0则所有dll都注入了其他进程。
2013-07-09 10:06
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
你确认你的那个dll已经加载了的把
getmodluehande 出来的结是不是null? 这个问题最好就单步调试一下,至少把代码发出来人家才可以给你看的,这样说,谁知道你的是为什么?
再每一步可能失败的地方 加个GetLastError 看下错误码。你自己就知道为什么了

http://msdn.(v=vs.85).aspx

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-09 10:39
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
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
在dllmain中,
int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)

用个全局变量保存一下hInstance

g_hInstance = hInstance;

之后

SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInstance,tid);

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-09 23:32
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
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
你的这个dll是用纯sdk写的还是基于mfc建立起来的?
如果是基于mfc建立起来的,那么就很可能有问题了。因为mfc的,已经对DllMain 进行了封装了的,
开始时候编译通过只是你没有完全编译。

我很少用MFC的,一般写dll都是用纯sdk的。。


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-10 08:19
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
或者把你的工程贴出来?我帮你看下

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-10 08:20
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
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 9楼 emoly
Hook.rar (7.84 KB)
这个是不行。你那个是被封装了的。
不要用mfc建立的,直接sdk也很方便

我送一个样本给你把,我本机测试通过了的,希望对你有点用



我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-10 10:55
快速回复:请教关于钩子的一个疑问
数据加载中...
 
   



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

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