怎么全局HOOK剪切板?

clinton81 2007-03-15 08:48:26
我最近要做此功能. 我猜测要HOOK掉 SetClipboardData 函数(MSDN上关于剪切板操作提到此函数).
   
然后我做了个函数去HOOK它, 只HOOK当前模块( 用 ::GetModuleHandle (NULL) 函数获取当前模块). 并把这个DLL注到所有进程. 结果是, UltraEdit 的复制操作可以被Hook, 但是记事本、word、explorer 等进程都Hook不到复制、剪切操作。
   
然后我用《windows程序设计》(王艳平)的例子,对进程下面所有模块做遍历,每个模块都去HOOK一把 SetClipboardData 函数,结果,不论什么程序(word、UltraEdit、explorer 等都是一复制就崩溃)。
   
我要怎么才能监控得到这个函数呢?
   
请高手指点。万分感谢。
...全文
740 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyhm 2007-06-28
  • 打赏
  • 举报
回复
请问GetClipboardOwner函数在某些进程(比如在记事本、UltraEdit)复制操作时返回NULL的问题是如何解决的?
谢谢!
clinton81 2007-03-17
  • 打赏
  • 举报
回复
唉,要自己做钩子做到完美实在太难了。现在改用微软detour2.X来做,不到10分钟就做到完美了。
还是用detour算了。
结贴。谢谢各位。
clinton81 2007-03-16
  • 打赏
  • 举报
回复
没有高手顶?
我想用jmp方法HOOK API.但我有一个地方没有搞清楚: 我要做的是全局HOOK, 我把SetClipboardData 函数入口跳转到我自己的函数, 但问题是, 我自己的函数对于某个进程 地址是可见的, 但对其它进程他们却操作不到这个地址(进程间地址相互独立). 怎么才能解决这个问题?
clinton81 2007-03-16
  • 打赏
  • 举报
回复
请问 winnuke(x86) 的blog在哪里??
winnuke 2007-03-16
  • 打赏
  • 举报
回复
看我的blog。
你需要释放你的Hook函数到你要hook的进程空间。
有一些细节需要注意,很容易导致进程崩溃的。
clinton81 2007-03-15
  • 打赏
  • 举报
回复
我试了, GetClipboardOwner 函数不一定取得到窗体. 比如在记事本、UltraEdit 里面做复制,可以得到消息剪切板有变化( 用SetClipboardViewer 函数做简单挂钩),但是此时调用 GetClipboardOwner 函数返回的结果就是NULL——什么窗口句柄都得不到。
clinton81 2007-03-15
  • 打赏
  • 举报
回复
to WingForce。非常感谢提醒。
如你所说,可以得到剪切板内容来源。那么剪切板粘贴到哪儿去如何获取?请继续提示。
WingForce 2007-03-15
  • 打赏
  • 举报
回复
This function retrieves the window handle to the current owner of the clipboard.

HWND GetClipboardOwner(void);
clinton81 2007-03-15
  • 打赏
  • 举报
回复
我需要得知是哪个进程做了剪切操作,然后到哪个进程去做粘贴操作。所以仅仅监控剪贴板内容达不到这个要求。
yjgx007 2007-03-15
  • 打赏
  • 举报
回复
可以监控剪帖板消息,然后处理

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧