![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
путь е екзешнику по окну [D5, WinXP]
user51 © (2007-01-25 11:59:00)Хочу получить путь екзешника создавшего окно
var wndk:integer;
a : Array[0..MAX_PATH] of char
ProcessId : integer;
ThreadId : integer;
HandleWindow : Integer;
wndk:=FindAWindow(ComboBox1.text,'');
if wndk <> 0 then
begin
ThreadId := GetWindowThreadProcessId(wndk,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
if GetModuleFileName(HandleWindow ,a, sizeof(a))=0
then //Application.MEssageBox(pchar('не могу получить путь'),'ОШИБКА', 0);
end;
если HandleWindow=0 то пишет путь вызвавшей программы
в любом другом случае не может получить путь
в чем засада ?
Сергей М. (2007-01-25 12:52:00) [1]
> BiN © (25.01.07 12:14) [3]
> У него вроде HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,
> False,ProcessId);
Это я прекрасно вижу.
Он получает хэндл именно процесса, а не окна и уж тем более не модуля.
BiN (2007-01-25 12:14:00) [2]
> Сергей М. © (25.01.07 12:09) [1]
>
> Твой HandleWindow не имеет ни малейшего отношения к хэндлам
> модулей.
У него вроде HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
> user51 (25.01.07 12:12) [2]
Используй GetModuleFileNameEx
И переменные лучше бы называть адекватно....
user51 (2007-01-25 12:12:00) [3]а как получить хендл модуля ?
Сергей М. (2007-01-25 12:09:00) [4]Твой HandleWindow не имеет ни малейшего отношения к хэндлам модулей.
Более того, то что ты назвал HandleWindow, должно было быть названо хотя бы как "Handle Process", ибо это хэндл, полученный в результате открытия объекта типа процесс.