楼上说的是API Hook,Hook SHBrowseForFolder或CreateFile效果会比较好,关于API Hook在《windows核心编程》上有讲,随书代码中也有示例代码,不过那个是同进程中的API Hook,先看那个,理解了API hook的概念和用法,再百度搜索“跨进程 API Hook”
"文件被打开了才读标题栏,这个过程实际上已经呈现的是未解密的文件啊。" 文件被打开前要知道 文件名 就 hook CreateFile
用消息钩子确实很难做,总是遇到一些莫名其妙的问题,而且监视消息队列、窗口过程的钩子好像并不能阻止消息的传播。你可以借助SPY++仔细分析一下目标窗口上的消息,尤其是WM_COMMAND,另外你的消息钩子安装好以后,可以用Visualstudio的调试器附加到notepad.exe进程进行调试,看看你的dll中的钩子函数有没有按预期那样运行
"固定文件" 如果只是文件名,不需要路径.那么可以GetWindowText 读标题栏.
方案一:编写dll注入到记事本进程中,然后用API Hook拦截SHBrowseForFolder、CreateFile、OpenFile之类的API调用,从中获取打开的文件的路径。 方案二:消息钩子,当用户在记事本上点击菜单“文件”-“打开”时会产生WM_COMMAND消息,用户在“打开”对话框里选择文件以后点击按钮“打开”也会产生WM_COMMAND消息,用消息钩子检测到这些消息后适时的向“打开”对话框的地址栏文本框以及“文件名”文本框发送WM_GETTEXT消息来获取用户所选择的文件路径。 方案三:编写一个调试器,显然,用调试器调试notepad.exe的时候可以在API函数的调用上打断点,读写notepad.exe进程空间内的内存数据,那么获取打开的文件路径肯定没问题,不过调试器要怎么开发我就不了解了。 方案四:从反汇编的角度分析notepad.exe这个PE文件,直接在该PE文件上插入自己的代码来实现自己想要的功能(俗称打补丁)。
notepad.exe 的命令行参数 中包含它当前打开文件的路径 ,你可以在网上找一下 获取远程进程的命令行参数
15,471
社区成员
49,182
社区内容
加载中
试试用AI创作助手写篇文章吧