请问应该如何才能获取某个执行文件的路径?
比如我想知道IEXPLORE.EXE这个文件的具体位置,然后去调用它。
IEXPLORE只是举个例子,有些是自己安装的应用软件。
比如我想知道IEXPLORE.EXE这个文件的具体位置,然后去调用它。
IEXPLORE只是举个例子,有些是自己安装的应用软件。
解决方案 »
- 谈谈QQ、中国游戏中心等运作过程。
- 求成绩统计系统设计!散分
- 请问用Delphi可以开发出触摸屏的产品吗?如何开发???
- 初学者问个很傻的问题:请问在delphi中怎么增加属性、函数、过程的首尾。是由IDE自动加入还是人工编写的
- 过年快放假了,开心,放点分之8
- 大家看看这条SQL有什么问题
- delphi中的窗口name属性能否以string的形式作为函数参数!10分钟后结账!
- 求助:Delphi程序嵌套C#界面,消息问题
- 请问各位高手!为什么我做的C/S程序中,Client只有在Agent的帮助下才能连上Server?
- delphi 怎么用com+的技术?
- 要能生成POWER POINT的报表 用什么工具啊
- ADO连接EXCEL
比如说装了个QQ,那每个人装的目录都不一样,那我想先找到该QQ可执行程序的路径,然后去调用这个可执行文件。
QQ只是举个例子,我想知道任意一可执行文件的位置。谢谢
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'));
我的说明很清楚了:
比如你写了个程序,编译完后是a.exe,你执行a.exe,里面有个按纽,该按纽的功能是要知道你系统里安装的QQ的这个可执行文件的具体路径,而不是要得到a.exe这个文件的路径。我查了很多帖子,好象showmessage(extractfiledir(application.ExeName));这个答案最多,也最忽悠人。完全就不看帖子的问题的,只看到"可执行文件、路径"就copy ,paste
-----------------没玩过。但我可以给你肯定地说:如果不是在注册表或INI或Recent等类似的特定位置储存该程序的信息,那它只有遍历整个硬盘!
并不是所有的程序都会为你留下这些信息的!
我点击一个调用a.exe的按钮,就会运行3个a.exe,楼主感觉可行么?
估计最后电脑都会疯掉了.
.............
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;
其实按LZ的意思,我在D盘有个a.exe,在E盘有个a.exe,在F盘有个a.exe;
我点击一个调用a.exe的按钮,就会运行3个a.exe,楼主感觉可行么?
估计最后电脑都会疯掉了
=========================
呵呵,兄弟还真以为我无耻到这种地步吧?
当然是调用一些正常程序啊。
比如A按纽,点完就打开QQ,B按纽点完打开OFFICE,C按纽点完打开***,当然了如果
是会存在2个一样的文件名,但程序是我写的,我不会去写那个的。
你们都想太多了,我只是想方法而已。具体说会造成什么情况,会多慢,会多复杂,那
是属于另外的问题了。
都还没有挣到钱,就担心钱花不出去
b43ok(网络骑士) 如果不知道要查找的文件在注册表中的路径在哪里要怎么找? 只给出一个可执行文件如:gbak.exe //在borland\interbase\bin目录下