如何获取某个文件的路径

monqu 2007-03-13 06:54:21
请问应该如何才能获取某个执行文件的路径?
比如我想知道IEXPLORE.EXE这个文件的具体位置,然后去调用它。
IEXPLORE只是举个例子,有些是自己安装的应用软件。
...全文
672 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
monqu 2007-03-16
  • 打赏
  • 举报
回复
不知道在注册表的位置倒是其次,毕竟可以上网搜。就怕那些没有在注册表里的。
mdejtod 2007-03-16
  • 打赏
  • 举报
回复
reg.OpenKey('SOFTWARE\Classes\Applications\iexplore.exe\shell\open\command',true);
b43ok(网络骑士) 如果不知道要查找的文件在注册表中的路径在哪里要怎么找? 只给出一个可执行文件如:gbak.exe //在borland\interbase\bin目录下
monqu 2007-03-15
  • 打赏
  • 举报
回复
dongycumt(阡陌) ( ) 信誉:100 Blog
其实按LZ的意思,我在D盘有个a.exe,在E盘有个a.exe,在F盘有个a.exe;
我点击一个调用a.exe的按钮,就会运行3个a.exe,楼主感觉可行么?
估计最后电脑都会疯掉了
=========================
呵呵,兄弟还真以为我无耻到这种地步吧?
当然是调用一些正常程序啊。
比如A按纽,点完就打开QQ,B按纽点完打开OFFICE,C按纽点完打开***,当然了如果
是会存在2个一样的文件名,但程序是我写的,我不会去写那个的。
你们都想太多了,我只是想方法而已。具体说会造成什么情况,会多慢,会多复杂,那
是属于另外的问题了。
都还没有挣到钱,就担心钱花不出去。。。
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
右击“开始”菜单,单击“查找”,这时,你仔细看一下文件搜索器的面板,它是要确定欲搜索的文件的位置的。如果你只知道这个文件在硬盘上,那就要把所有硬盘都选中。这就是上面说的遍历硬盘的所有分区。

而查注册表,仅限于在Windows注册表有记载信息的程序。你可以网上查阅相关的注册表项是哪一个。
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
还有:“我用ExtractFilePath('IEXPLORE.EXE')或者ExtractFilePath('EXPLORE')得到的都是空值。”------这是你在一楼说的话。从这句话里,可以看出你或许对DOS/Windows系统的文件管理模式了解不透彻。
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
你这个问题,基本上可以说是一个实用价值不大的命题。查注册表,是一种解决办法。但是,如果要查的程序安装时不写注册表,怎么办?难道你要遍历整个硬盘的所有分区?那样结果可能不唯一,甚至出错。
建议你跟大家说一下你的最终目的是想干什么。不要在一种思路上钻牛角尖。
monqu 2007-03-14
  • 打赏
  • 举报
回复
showmessage(extractfiledir(application.ExeName));是得到该运行程序的目录,而不是得到某个运行程序的目录。
我的说明很清楚了:
比如你写了个程序,编译完后是a.exe,你执行a.exe,里面有个按纽,该按纽的功能是要知道你系统里安装的QQ的这个可执行文件的具体路径,而不是要得到a.exe这个文件的路径。

我查了很多帖子,好象showmessage(extractfiledir(application.ExeName));这个答案最多,也最忽悠人。完全就不看帖子的问题的,只看到"可执行文件、路径"就copy ,paste。。。
oushengfen 2007-03-14
  • 打赏
  • 举报
回复
楼主你的意思有点不对吧,应该是得到某个执行程序的路径吧。
oushengfen 2007-03-14
  • 打赏
  • 举报
回复
uses
TlHelp32,psapi;
function GetPathFileofModule(ModuleName:String):String;
var
hProcSnap: THandle;
pProcess: THandle;
pe32: TProcessEntry32;
s: string;
buf:array[0..MAX_PATH] of char;
hMod:HMODULE;
cbNeeded:DWORD;
begin
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
if hProcSnap = INVALID_HANDLE_VALUE then Exit;
pe32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, pe32) = True then
while Process32Next(hProcSnap, pe32) = True do
begin
if uppercase(pe32.szExeFile)=uppercase(ModuleName) then
begin
pProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
FALSE,
pe32.th32ProcessID);
if pProcess<>0 then
begin
if EnumProcessModules( pProcess,@hMod,sizeof(hMod),cbNeeded) then
begin
ZeroMemory(@buf,MAX_PATH+1);
GetModuleFileNameEx(pProcess, hMod,buf,MAX_PATH+1);
Result:=strpas(buf);
end;
end;
end;
end;
CloseHandle(hProcSnap);
end;
------------------------------------
调用方法:
ShowMessage(GetPathFileofModule('program.exe'));
cnhxjtoa 2007-03-14
  • 打赏
  • 举报
回复
showmessage(extractfiledir(application.ExeName));
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
查注册表。
monqu 2007-03-14
  • 打赏
  • 举报
回复
那个是根据已运行的进程来获得路径,我是要知道没运行的程序。
比如说装了个QQ,那每个人装的目录都不一样,那我想先找到该QQ可执行程序的路径,然后去调用这个可执行文件。
QQ只是举个例子,我想知道任意一可执行文件的位置。谢谢
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050306/23/3829184.html
monqu 2007-03-14
  • 打赏
  • 举报
回复
up一下
b43ok 2007-03-14
  • 打赏
  • 举报
回复
Uses Registry;
.............
var
reg:Tregistry; //定义注册表类
qqpath,IEpath:string;
begin
reg:=Tregistry.Create;//创建注册表项
reg.RootKey:=HKEY_LOCAL_MACHINE;//定义主键所在的根键
reg.OpenKey('SOFTWARE\Classes\Applications\iexplore.exe\shell\open\command',true);
IEpath:=reg.ReadString('');//取IE路径,得到的是 c:\xxxx....\iexplorer.exe %1
IEpath:=copy(copy(IEpath,1,length(IEpath)-2);//去掉最后的 %1
IEpath:=ExtractFilePath(IEpath);//取路径
reg.CloseKey;
//用同样的方法取QQ路径
reg.OpenKey('software\Tencent\QQ',true);
qqpath:=reg.ReadString('Install');//取到路径
reg.CloseKey;
reg.Destroy;
end;
雪狼__ 2007-03-14
  • 打赏
  • 举报
回复
其实按LZ的意思,我在D盘有个a.exe,在E盘有个a.exe,在F盘有个a.exe;
我点击一个调用a.exe的按钮,就会运行3个a.exe,楼主感觉可行么?
估计最后电脑都会疯掉了.
zwh202342 2007-03-14
  • 打赏
  • 举报
回复
up一下
monqu 2007-03-14
  • 打赏
  • 举报
回复
谢谢这位兄弟:)
反正就是说如果注册表里没有信息,就只能硬盘遍历查询就是了。
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
比如说你进入的是星际
------------------
你不进入星际,甚至也不启动它的本地程序,再甚至你把它的注册表信息全部删净,----然后你再试试,“点他的启动按纽”,它还“会运行你本地的星际游戏”吗?
lihuasoft 2007-03-14
  • 打赏
  • 举报
回复
浩方我不晓得你玩过没,比如说你进入的是星际,那点他的启动按纽,那就会运行你本地的星际游戏。
-----------------

没玩过。但我可以给你肯定地说:如果不是在注册表或INI或Recent等类似的特定位置储存该程序的信息,那它只有遍历整个硬盘!
并不是所有的程序都会为你留下这些信息的!
加载更多回复(2)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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