Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать путь программы по имени процесса 
:(
    Опции темы
ShadowDancer
Дата 23.9.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Есть процесс, например: notepad.exe, мне нужно узнать где эта программа лежит, то есть чтобы мне выдало путь типа: C:\WINDOWS\Notepad.exe
PM MAIL   Вверх
Girder
Дата 23.9.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



А справку глянуть?
Цитата

type
 TProcessEntry32=packed record
  dwSize:DWord;              //размер записи
  cntUsage:DWord;            //счетчик ссылок на процесс
  th32ProcessID:DWord;       //описатель данного процесса
  th32DefaultHeapID:DWord;   //ID кучи по умолчанию
  th32ModuleID:DWord;        //ID модуля процесса
  cntThreads:DWord;          //число потоков в процессе
  th32ParentProcessID:DWord; //ID родительского процесса
  pcPriClassBase:Longint;    //начальный приоритет порожденного потока
  dwFlags:DWord;             //зарезервировано
  szExeFile:array [0..MAX_PATH - 1] of Char;// путь к файлу процесса
 end;

type
 TModuleEntry32=packed record
  dwSize:DWord;        //размер записи
  th32ModuleID:DWord;  //ID данного модуля
  th32ProcessID:DWord; //ID процесса - владельца модуля
  GlblcntUsage:DWord;  //глобальный счетчик ссылок на модуль
  ProccntUsage:DWord;  //счетчик числа пользователей в контексте процесса-владельца
  modBaseAddr:PByte;   //базовый адрес модуляв контексте процесса-владельца
  modBaseSize:DWord;   //размер модуля в байтах, начиная с modBaseAddr
  hModule:HModule;     // описатель модуля в контексте процесса-владельца
  szModule:array [0..MAX_MODULE_NAME32] of Char;//имя модуля
  szExePath:array [0..MAX_PATH - 1] of Char;    //имя файла модуля
 end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Sunvas
Дата 24.9.2006, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



Цитата(ShadowDancer @  23.9.2006,  20:29 Найти цитируемый пост)
Есть процесс,

Ващето когда ты получаешь список процессов, то тебя дается весь путь..


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
ASGDeveloper
Дата 25.9.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: нет
Всего: 1



Цитата(Sunvas @  24.9.2006,  00:48 Найти цитируемый пост)
Ващето когда ты получаешь список процессов, то тебя дается весь путь.. 

Если не ошибаюсь в szExeFile хранится только имя файла.
PM MAIL   Вверх
Romikgy
Дата 25.9.2006, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(ASGDeveloper @  25.9.2006,  09:24 Найти цитируемый пост)
Если не ошибаюсь в szExeFile хранится только имя файла. 

попробуй


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Voyager
Дата 25.9.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 4
Всего: 18



Держи.
Код

GetWindowThreadProcessId(WindowName, @ProcessId);
                                    HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
                                    If HandleWindow<>0 then
                                        begin
                                            GCL:=Cardinal(GetProcAddress(GetModuleHandle('kernel32.dll'),'GetCommandLineA'));
                                            if GCL<>0 then
                                                begin
                                                    if ReadProcessMemory(HandleWindow,Pointer(GCL+1),@DW,4,NumWriteRead)and(NumWriteRead=4)and
                                                    ReadProcessMemory(HandleWindow,Pointer(DW),@StrAddr,4,NumWriteRead)and(NumWriteRead=4) then
                                                        begin
                                                            SetString(OFPCommandLineA, nil, MAX_PATH);
                                                                if ReadProcessMemory(HandleWindow,Pointer(StrAddr),@OFPCommandLineA[1],Length(OFPCommandLineA),NumWriteRead) then
                                                                    begin
                                                                        SetLength(OFPCommandLineA,Pos(#0,OFPCommandLineA)-1);
                                                                    end
                                                                else
                                                                    OFPCommandLineA:='';
                                                        end;
                                                end;
                                            CloseHandle(HandleWindow);
                                        end;


В OFPCommandLineA будет путь программы с параметрами запуска.
PM   Вверх
Yanis
Дата 26.9.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(Voyager @  25.9.2006,  21:31 Найти цитируемый пост)
В OFPCommandLineA будет путь программы с параметрами запуска. 

Только в том случае, если верно указана коммандная строка, которая не всегда равна пути к исполняемому файлу smile

Добавлено @ 09:42 
Так, что лучше использовать перечисление smile 
Для сильно страждущих привожу пример:
Код
var
  hWnd: DWORD;
  pi: TProcessInformation;
  si: TStartupInfo;
begin
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@pi, SizeOf(pi));

  if CreateProcess('c:\windows\notepad.exe', 'Превед, красавчег!!!', nil, nil, False, NORMAL_PRIORITY_CLASS, nil,
    nil, si, pi) then
    begin

      // ждём-с...
      WaitForInputIdle(pi.hProcess, INFINITE);

      // подчищаем
      CloseHandle(pi.hProcess);
      CloseHandle(pi.hThread);
    end;
end;


Если кто то сомневается, то коммандная строка действительно будет равна строке "Превед, красавчег!!!" smile Можете это сами проверить.

Это сообщение отредактировал(а) Yanis - 26.9.2006, 09:43


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 1.10.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



Цитата(ASGDeveloper @  25.9.2006,  10:24 Найти цитируемый пост)
Если не ошибаюсь в szExeFile хранится только имя файла.

Хм. У меня в примере из DRKB все отлично работает.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Rennigth
Дата 2.10.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Sunvas,  у тебя Win9x? в Win9x szExeFile выдает полный путь, в WinNT только имя без пути.



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.4673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.