如何确定某个应用程序的路径?(100分)

  • 主题发起人 主题发起人 yyluo
  • 开始时间 开始时间
Y

yyluo

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟想请教各位系统高手如何才能确定某个应用程序的路径之所在。
例如如何得到photoshop的安装路径?
 
这个就难了,
大多数软件并不会留下安装路径的信息。
就算有,各个软件存放安装路径信息的位置也不一样。
 
amo说的对.
在"资源管理期"里面双击一个没有注册的文件后缀名,会谈出一个窗口
问你用什么程序打开它,在那个窗口里面列出来的程序才可以找到原始路径.
 
我的意思就是注册好的软件如何得到其所在的路径。
比如双击DOC文档,系统就会自动启动WORD。
这说明系统是知道WORD安装在哪个目录下面的。
我想知道这是如何实现的。
 
有一个函数,名字叫什么意识想不起来了,肯定别人都知道!
再等一会...
 
原来是这样,
说一下我的思路吧。
你双击某个文件,如test.exe
在注册表的HKEY_CLASS_ROOT下有对应后缀的一个键:.exe
(默认)内容为exefile
同样,在HKEY_CLASS_ROOT下有对应的一个键:exefile
其DefaultIcon内容为"%1"
而shell/open/command下为"%1" %*
这就是说直接运行。
再举一个例子:
如test.zip
在注册表的HKEY_CLASS_ROOT下有对应后缀的一个键:.zip
(默认)内容为"Winzip"
同样,在HKEY_CLASS_ROOT下有对应的一个键:winzip
其DefaultIcon内容为"D:/PROGRA~1/WinZip/winzip32.exe,0"
而shell/open/command下为D:/PROGRA~1/WinZip/winzip32.exe "%1"

呵呵,明白什么了吗?
按此思路去分析吧
 
还是用ShellAPI吧。
FindExecutable

Retrieves the name of and handle to the executable (.exe) file associated with the specified file name.

HINSTANCE FindExecutable(
LPCTSTR lpFile,
LPCTSTR lpDirectory,
LPTSTR lpResult
);
 
一般来说,应用程序在安装到计算机时,都会在注册表里留下自己的信息。
用regedit命令可以查看。
第一种情况:
比如安装了ACDSee以后,双击BMP文件将启动ACDSee,这说明ACDSee
在HKEY_CLASS_ROOT中保存.bmp项,对应值为ACDC_BMP
然后可以在HKEY_CLASS_ROOT中查找键ACDC_BMP,在其下
Shell/Open/Command下可找到Acdsee的安装路径。
第二中情况:
比如PhotoShop,由于PhotoShop是Adobo公司的,
在HKEY_LOCAL_MACHINE/software/adobo下有
photoshop/5.0/applicationpath
下面有PhotoShop的安装路径。
在程序中,可以通过一批以Reg开头的API函数访问注册表来获取有关信息。
当然对于不同的程序,它在注册表留下的信息可能不同,但同一程序在所有
机器注册表中信息意义是一致的.
 
shellexecute
 
查注册表, 得根据程序不同有不同设置:-)
 
请看。 ..
 
多谢各位热心支持。
 
后退
顶部