关于DIPS的DLL注入(第22章)

本文介绍了一种利用DLL注入技术保存桌面图标位置的方法,确保桌面分辨率变化后图标布局不变。通过SetWindowsHookEx函数将DLL加载到目标进程中,创建隐藏对话框维持消息循环,并通过WM_APP消息控制DLL行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对应于《window核心编程》第五版的576页。

这个例子主要通过SetWindowsHookEx函数来将一个指定的DLL加载进目标进程,进而到达一些特殊的处理目的。DIPS这个例子实现的功能是保存桌面上所有图标的位置,使桌面的分辨率发生改变后仍然能够保持原来的布局不变。我们没有办法直接获取到这些图标的位置,因为我们的程序进程和桌面进程不是同一个,必须要将我们的dll放置在桌面的进程空间中才能访问桌面上的内容。

其思路如下:整个solution分为两个项目,第一个是一个exe的程序,用来将dll注入,并且通过给dll中的窗口发消息来和dll通信,控制dll的行为。第二个是一个dll程序,用来被注入到桌面进程中,实现桌面图标的保存。

主程序exe的思路如下:

通过findwindow来找到桌面的窗口句柄,然后再使用GetWindowThreadProcessId获取到窗口所属的线程,在这个线程上用SetWindowsHookEx来给这个线程挂接一个消息的hook,从而将我们的dll注入,通过给dll中的窗口发送WM_APP消息来控制dll的行为。

dll的思路如下:

在dll被注入后,创建一个对话框,不进行显示,用来维持消息循环。当接收到WM_app消息后,按照消息参数,读取或者保存桌面图标的位置。

注意:

两个进程之间的设置了共享的存储去用来存储 exe的线程Id和hook的句柄。

其实现在看起来不难,但是我调试这个程序还是花了点时间,所以总结一下。。。。。。

http://files.cnblogs.com/kwliu/22-DIPS.rar

转载于:https://www.cnblogs.com/kwliu/archive/2011/08/07/2129884.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值