![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение полного пути к программе [D6, WinXP]
Esu © (2002-08-19 19:44:00)Вот такая функция позвращает только имя файла но не путь к нему, хотя в дельфовом helpе написано:
"
szExeFile
Path and filename of the executable file for the process.
"
function GetExeFileName(Wnd: HWND): String;
var
ProccessID: THandle;
hSnapShot: THandle;
ProcessEntry32: TProcessEntry32;
begin
Result:= "";
GetWindowThreadProcessId(Wnd, @ProccessID);
hSnapShot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
ProcessEntry32.dwSize:= SizeOf(TProcessEntry32);
if Process32First(hSnapShot, ProcessEntry32) then
repeat
if ProcessEntry32.th32ProcessID = ProccessID then
Result:= String(ProcessEntry32.szExeFile);
until Process32Next(hSnapShot, ProcessEntry32) = False;
finally
CloseHandle(hSnapShot);
end;
end;
Заранее благодарен.
Esu (2002-08-21 14:57:00) [1]
> alena.svt
Дело в том что функция работает не так как ожидается. Тоеть возвращает far.exe, а не c:\...\far.exe
> Игорь Шевченко
Самое интерестное что работает нормально только для моего процесаа, а для остальных отображает caption.
Видимо нужно получить некоторые права для просмотра такой информации.
alena.svt (2002-08-20 19:12:00) [2]Если вы вначале говорили что все выводиться
То есть например если ваша функция не бита то
Result:= String(ProcessEntry32.szExeFile);
Label.Capton:=Result;
И в лабеле должно было быть написано например Far.exe
Я же вам дала
ПроверитьСлеш(Путь к файлу)+ имя файла
Если у вас функция рабочая то проблем бы не было.
И прислушайтесь к совету Игорь Шевченко © (20.08.02 17:23)
Игорь Шевченко (2002-08-20 17:23:00) [3]
> Потому что мне нужно узнать не полный путь к своей программе,
> а полный путь к программе которая породила окно с данным
> HWND.
GetWindowModuleFileName ?
Esu (2002-08-20 17:05:00) [4]Для справки эта функция нормально работает под win9x, под NT проблема. Возможно нужны какие-то права.
Esu (2002-08-20 16:56:00) [5]
> -= Like =-
Потому что мне нужно узнать не полный путь к своей программе, а полный путь к программе которая породила окно с данным HWND.
alena.svt
У меня ProcessEntry32.szExeFile = ("F","a","r",".","e","x","e", #0)
Спасибо всем проявившим желание помочь :)
alena.svt (2002-08-19 22:23:00) [6]А вот так попробуй.
Result:= IncludeTrailingBackSlash(ExtractFilePath(String(ProcessEntry32.szExeFile)))+String(ProcessEntry32.szExeFile);
-= Like =- (2002-08-19 21:55:00) [7]
Application.ExeName- возвращает полный путь и имя приложения.
ExtractFilePath(Application.ExeName)- возвращает только путь.
Непонятно, зачем ты используешь такую громоздкую процедуру?
kima (2002-08-19 21:50:00) [8]сори не понял...
Esu (2002-08-19 21:46:00) [9]up
Esu (2002-08-19 19:59:00) [10]Никак поскольку собственно мне и нужен Application.ExeName (как из него что получить уж разберусь). Только для другого приложения (не моего).
kima (2002-08-19 19:50:00) [11]как насчет ExtractFilePath(Application.ExeName);?