Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение полного пути к программе [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);?


Наверх

Титульная страница Поиск, карта сайта Написать письмо