Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 15:01   #1
dyonysos
Пользователь
 
Регистрация: 24.08.2009
Сообщений: 45
Вопрос Получение адресса по имени процесса (Delphi)

Для получения списка процессов использую:
Код:
function GetProcess:TStringList;
const
PROCESS_TERMINATE=$0001;
var
Co:BOOL;
FS:THandle;
FP:TProcessEntry32;
begin
result:=TStringList.Create;
FS:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FP.dwSize:=Sizeof(FP);
Co:=Process32First(FS,FP);
while integer(Co) <> 0 do
begin
result.Add(FP.szExeFile);
Co:=Process32Next(FS,FP);
end;
CloseHandle(FS);
end;
Как теперь по имени процесса получить адресс или еще лучше коммандную строку при помощи которой процесс был запущен.
Или может быть есть другой способ получить список процессов вместе с дополнительной инфой?
dyonysos вне форума Ответить с цитированием
Старый 14.09.2009, 10:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Когда-то достал такое:
Код:
 function ProcessFileName(PID: DWORD): string;
   var
     Handle: THandle;
   begin
     Result := '';
     Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
     if Handle <> 0 then
       try
         SetLength(Result, MAX_PATH);
         if FullPath then
         begin
           if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
             SetLength(Result, StrLen(PChar(Result)))
           else
             Result := '';
         end
         else
         begin
           if GetModuleBaseNameA(Handle, 0, PChar(Result), MAX_PATH) > 0 then
             SetLength(Result, StrLen(PChar(Result)))
           else
             Result := '';
         end;
       finally
         CloseHandle(Handle);
       end;
   end;
Нужен модуль PsAPI
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2009, 15:56   #3
dyonysos
Пользователь
 
Регистрация: 24.08.2009
Сообщений: 45
По умолчанию

Код:
if FullPath then
где это должно быть задекларированно?
dyonysos вне форума Ответить с цитированием
Старый 14.09.2009, 16:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да убери эту строку вообще, пусть без условия путь получает.
Просто эта функа у меня вложена в еще одну функу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2009, 16:41   #5
dyonysos
Пользователь
 
Регистрация: 24.08.2009
Сообщений: 45
По умолчанию

Код:
if GetModuleBaseNameA(Handle, 0, PChar(result), MAX_PATH) > 0 then
здесь выдает ошибку: [DCC Error] Unit1.pas(51): E2010 Incompatible types: 'Char' and 'AnsiChar'.Как это исправить ( у меня дэлфи 2009 )?
dyonysos вне форума Ответить с цитированием
Старый 14.09.2009, 16:55   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

PAnsiChar(result)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение имени файла из скрипта dimfil Общие вопросы Delphi 2 20.01.2009 10:02
Редактирование памяти процесса (Delphi) Air Помощь студентам 4 17.10.2008 15:19
Delphi, поиск процесса north Помощь студентам 1 20.03.2008 22:06
Получение имени окна Artem Общие вопросы Delphi 4 20.09.2007 16:38