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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2011, 23:46   #1
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию через API получаю полный путь и название процесса, а получаю только название процесса

пытаюсь получить полный путь вместе с именем файла, а в ответ получаю только название файла

PHP код:
procedure TMonitorForm.Timer1Timer(SenderTObject);
var
 
today TDateTime;
  
ProcessCountiDWORD;
  
pe32TlHelp32.TProcessEntry32;
  
hSnapShotTHandle;
    
ProcInfoTProcessEntry32;
begin
today 
:= Time;
  
NewPIDList.Clear;
  
NewProcessList.Clear;
  
path.Clear;
  
hSnapShot := TlHelp32.CreateToolHelp32SnapShot(TlHelp32.TH32CS_SNAPPROCESS4);
  if 
hSnapShot <> INVALID_HANDLE_VALUE then
  begin
      ProcInfo
.dwSize := SizeOf(ProcInfo);
    
pe32.dwSize := SizeOf(TlHelp32.ProcessEntry32);
    while 
TlHelp32.Process32Next(hSnapShotpe32) = True do
    
begin
      NewPIDList
.Add(IntToStr(pe32.th32ProcessID));
      
NewProcessList.Add(pe32.szExeFile);
    
end;
    
CloseHandle(hSnapShot);
  
end;

  if (
NewPIDList.Text <> PIDList.Textthen
  begin

    
if NewPIDList.Count 0 then
    begin
      
for := 0 to NewPIDList.Count do
      
begin
        
if PIDList.IndexOf(NewPIDList.Strings[i]) = -1 then
        begin
          
if not RefreshFirstTime then
          begin
ADD
('1',            // номер
TimeToStr(today),  // время
'RUN'// action
NewProcessList.Strings[i], //process
inttostr(gethandle(NewProcessList.Strings[i])),  //handle
NewPIDList.Strings[i],  //PID MD5
NewProcessList.Strings[i], ///
'hjkh',//GetPathFromPID(strtoint(NewPIDList.Strings[i])),    //PATH
'86776'// размер
'g'); // цвет

          
end;
        
end;
      
end;
    
end;

    if 
PIDList.Count 0 then
    begin
      
for := 0 to PIDList.Count do
      
begin
        
if NewPIDList.IndexOf(PIDList.Strings[i]) = -1 then
        begin
          with ListView1
.Items.Add do
          
begin
            Caption 
:= '1';
              
SubItems.Add(TimeToStr(today));
              
SubItems.Add('Destroy');
              
SubItems.Add(ProcessList.Strings[i]);
              
SubItems.Add(inttostr(gethandle(extractFilename(ProcessList.Strings[i]))));
              
SubItems.Add(PIDList.Strings[i]);
              
Data := Pointer(clRed);

          
end;
        
end;
      
end;
    
end;

  
end;

  
PIDList.Assign(NewPIDList);
  
ProcessList.Assign(NewProcessList);

  
RefreshFirstTime := False;
end
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ

Последний раз редактировалось Den7656; 09.09.2011 в 23:49.
Den7656 вне форума Ответить с цитированием
Старый 09.09.2011, 23:48   #2
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

В чем трабла ? Никак не догоню ((
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Старый 10.09.2011, 00:13   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
The name of the executable file for the process. To retrieve the full path to the executable file, call the Module32First function and check the szExePath member of the MODULEENTRY32 structure that is returned.
как я понимаю надо для каждого процесса будет делать снимок модулей, чтоб в этом списке найти главный с путем.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.09.2011, 00:25   #4
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

а как это можно сделать ?
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Старый 10.09.2011, 00:32   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 09:03   #6
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Спасибо большое, разобрался.
Тему можно закрывать.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не показывает процесс загрузки файла grafgrial Общие вопросы Delphi 8 25.02.2011 21:04
как в ListView1 вывести полный путь со значком. переместив только сам ярлык в ListView1 KWN, lnc Общие вопросы Delphi 6 09.02.2010 11:08
Как в ProgressBar отобразить процесс выполнения Post запроса через Idhttp Joe_Tribbiani Работа с сетью в Delphi 8 15.06.2009 10:39
полный путь tae1980 Microsoft Office Excel 7 08.05.2009 10:46
Как отобразить в ProgressBar процесс отправки писем через SMTP leon2009 Работа с сетью в Delphi 15 20.03.2009 21:26