双击文件时系统做了什么

soft_biao 2006-07-11 02:04:33
在windows xp下双击某个文件时,比如双击txt文件就会用记事本打开、双击mp3文件就会用播放软件播放,注册表里有这些扩展名的关联,形式差不多是这样 notepad.exe %1,%1参数应该是文件的路径吧,现在的问题就是我知道某个文件的16进制代码及它的扩展名,要怎么样才能够正确的执行这个文件呢?相当于模拟系统执行双击文件时的操作。希望各位大虾不吝赐教,谢谢!
...全文
748 27 打赏 收藏 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
soft_biao 2006-07-14
  • 打赏
  • 举报
回复
问题就在需要多开销,如果要恢复的文件有10M大小的话,那么恢复10几份就得100多M,因为是数据恢复软件,所以最忌的就是对磁盘进行写操作,因为有可能影响其他被删除文件的恢复
lxpws 2006-07-14
  • 打赏
  • 举报
回复
如果恢复不需要多大开销的话,可以先恢复,然后交给关联程序去执行,如果不符合条件再删掉。
soft_biao 2006-07-14
  • 打赏
  • 举报
回复
我可以将数据恢复出来,但在恢复之前是无法获得路径的,只有恢复出来后才有路径
由于FAT32的特点,恢复出来的文件并不一定是被删除的文件,一般会有10几种可能的情况,也就是有10几份数据,只有1份数据是被删除的文件,如果10几份数据都还原的话那是很不好的,所以我的想法是将这10几份数据都分别与关联该扩展名的应用程序来执行来辨别哪一份数据是正确的就还原哪一份
lxpws 2006-07-14
  • 打赏
  • 举报
回复
既然是数据恢复软件,那你肯定有办法让这个被删的文件获得一个路径,以便在explorer中显示了,为什么说无法恢复呢?不一定是要恢复原来的路径,随便一个就行啊。
soft_biao 2006-07-14
  • 打赏
  • 举报
回复
谢谢你的回答
对于你的2个方法:
1.修改磁盘上的目录结构,让这个文件“现身”,成为一个合法的路径。
-----------------------------------------------------------------
我明说吧,由于我写的是数据恢复软件,对于被彻底删除的文件是无法在window下看见的,但是了解文件系统就知道该文件的数据还是保存在磁盘上(只要不被新的数据覆盖),所以其路径是无法恢复的,window会提示没有该文件,所以我上面才会说只有数据没有路径

2.用某种方法将这块内存模拟为一个文件,这个好像很难。
-----------------------------------------------------------------
这个想法不错,我以前也这么想过,就是不知道怎么弄,如果有谁知道的麻烦说一下:)

还有就是 “不行就复制一份吧,好歹也是个办法。。。”
------------------------------------------------------------------
我不想复制的原因是不想对磁盘进行写操作,因为这样有可能覆盖掉被删除的文件内容而无法还原,所以目前我只能考虑在内存操作,但不知道怎么弄。。。
lxpws 2006-07-14
  • 打赏
  • 举报
回复
把闭关前的问题都做个了结^_^
1.我的理解只是在命令行下可以执行程序,后面有参数话可以将参数传给程序执行
--------------------------------
很不幸,大多数关联程序要求在命令行中传递的是文件的路径,而不是数据。
2.我读磁盘数据就是用CreateFile弄的
--------------------------------
关联程序被启动后,就从命令行参数里找到文件路径,然后用CreateFile等东东去处理这个文件。

所以它能处理的前提是数据必须以文件形式存在,我明白老弟你的苦衷,你不想再复制一次浪费空间和时间了,所以有两个办法:
1.修改磁盘上的目录结构,让这个文件“现身”,成为一个合法的路径。
2.用某种方法将这块内存模拟为一个文件,这个好像很难。

不行就复制一份吧,好歹也是个办法。。。
soft_biao 2006-07-14
  • 打赏
  • 举报
回复
上面说错了,是关联该扩展名的应用程序
举个例子,txt文件是用notepad.exe来打开的,txt的16进制数据即文件内容ASCII码的值
mp3文件是用播放软件来播放(比如windows media),mp3的16进制数据包括文件头和文件体
这些16进制数据可以用winhex之类的软件可以看到的
soft_biao 2006-07-14
  • 打赏
  • 举报
回复
这2天有事不在,不好意思啊
谢谢大家的帮忙,特别是lxpws(老烦:五个裤衩就闭关) :)
对于你的问题我的回答是
1.你理解命令行(command line)吗?--也许不懂,我的理解只是在命令行下可以执行程序,后面有参数话可以将参数传给程序执行
2.你用过CreateFile,fopen,CFile,fstream等等这些文件操作方法吗?--除了CFile之外其他都用过,也许并不是很明白其中的原理,我读磁盘数据就是用CreateFile弄的
也许是我了解的不多,所以问起来有点奇怪,现在我把问题简洁化:
有扩展名和16进制数据,能让该扩展名类型的应用程序执行给出的16进制数据吗?
menb 2006-07-12
  • 打赏
  • 举报
回复
windows shell 编程
broccoli 2006-07-12
  • 打赏
  • 举报
回复
应用程序读文件的时候会将整个文件装入内存吗?
应该只是把文件的部分数据读入内存吧
thinkSJ 2006-07-12
  • 打赏
  • 举报
回复
看到这里还是没明白LZ说的是什么意思
EagleTwenty 2006-07-11
  • 打赏
  • 举报
回复
双击里系统会通知Shell,Shell会获取被点击的文件的全路径,再根据其扩展名来关联打开方式。
如果想要干涉,请查一下ExtShell和NameSpace之类的资料。
lxpws 2006-07-11
  • 打赏
  • 举报
回复
LZ我有两个问题:
1.你理解命令行(command line)吗?
2.你用过CreateFile,fopen,CFile,fstream等等这些文件操作方法吗?
soft_biao 2006-07-11
  • 打赏
  • 举报
回复
可能一开始我没怎么清楚,所以标题只是问了系统做了什么,应该是问系统和相应程序都做了什么:),同意你说的os只是将此类型的应用程序与打开此类型的软件进行关联,然后交给程序,想问一下当程序装入内存后,要将指定的文件(也装入了内存)进行操作,那么是不是会将文件16进制数据的内存地址作为参数传给程序的入口函数啊?
soft_biao 2006-07-11
  • 打赏
  • 举报
回复
可是没有路径,只有16进制数据啊
Stefine 2006-07-11
  • 打赏
  • 举报
回复
应该可以插手吧,只要可以访问内存,程序载入文件也是载入到指定的内存空间。

你说可以插手是吧,将c:\\test.pdf文件以abode reader 打开, 你说OS给你做了些什么,只是在双击时将此类型的应用程序与打开此类型的软件进行关联罢了(难道OS还管打开此pdf文件),另外的都交给程序了,老烦不是说D很清楚吗?

现在我想模拟一下怎么系统双击文件的操作

这个操作简单点说就只是关联,而你并不是想要关联而是想要OS打开此十六进制数据,那你就模拟上面那样D啦,找到打开此文件的程序(txt 用notepad...), 将文件路径以参数传给此程序,另外的操作全部由此程序完成
soft_biao 2006-07-11
  • 打赏
  • 举报
回复
应该可以插手吧,只要可以访问内存,程序载入文件也是载入到指定的内存空间。

我现在主要是做一个磁盘操作工具,已经模拟了系统双击文件夹的操作(不是用什么控件,而是直接操作磁盘数据来实现),然后显示该文件夹下的所有文件和文件夹,现在我想模拟一下怎么系统双击文件的操作,因为有些特殊的文件在window下是无法显示的,所以才会出现没有路径,只有16进制数据和扩展名
CUG122032 2006-07-11
  • 打赏
  • 举报
回复
什么文件?是用什么程序打开的?
lxpws 2006-07-11
  • 打赏
  • 举报
回复
程序是windows载入的,但是文件是程序载入的,windows只是把文件路径当作命令行参数传给它,以后的事情别人就插不进手去了。
soft_biao 2006-07-11
  • 打赏
  • 举报
回复
每个文件类型相关的应用程序对指定文件的16进制代码解析不同,这个我明白
但是此文件类型相关的应用程序(一般是exe)对文件解析时也是要装入内存的,当该应用程序和文件的16进制代码都被装入内存的时候(这时已经不关路径的事情了),下面的工作是如何进行的?是不是将文件的内存地址作为参数传到应用程序的某个地方,然后call该程序段什么的?
加载更多回复(7)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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