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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 11:15   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Найти одинаковые процессы и записать в listbox

всем доброго времени суток!

Задачка у меня такого рода:
Пользователь запускает процесс, нужно преверять не запускает ли он уже запущенный процесс.

т.е. в системе запущено 4 эземпляра exe но с разными параметрами. Таким образом нудно получить коммандные строки и сравнить из с той что задал юзер запускаемой им копии.

Застрял на получении списка процессов:
Код:
Function GetProcesssdffgh(ExeFileName: String): string;
Var
  ContinueLoop: Bool;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
Begin
  Result := '';
  FSnapshotHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.DwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  While Integer(ContinueLoop) <> 0 Do
  Begin
    If ((AnsiUpperCase(ExtractFileName(FProcessEntry32.SzExeFile))
          = AnsiUpperCase(ExeFileName)) Or
        (AnsiUpperCase(FProcessEntry32.SzExeFile) = AnsiUpperCase(ExeFileName))
      ) Then
      Result := FProcessEntry32.SzExeFile + String(':') + IntToStr
        (FProcessEntry32.th32ProcessID);
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  End;
  CloseHandle(FSnapshotHandle);
End;

procedure TForm2.sButton1Click(Sender: TObject);
begin
  sListBox1.Items.Add(GetProcesssdffgh('hlds.exe'));
end;
В системе запущено 4 экземпляра hlds.exe , в листбокс поподает только 1 запись из 4х, почему?
Человек_Борща вне форума Ответить с цитированием
Старый 09.03.2011, 11:33   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
почему?
функция устроена так что попадает только последний процесс.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.03.2011, 11:34   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А что нужно изменить?
Человек_Борща вне форума Ответить с цитированием
Старый 09.03.2011, 11:40   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure GetProcesssdffgh(ExeFileName: String;Strings:TStrings);
Var
  ContinueLoop: Bool;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
Begin
  FSnapshotHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.DwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  While ContinueLoop Do//чуть изменил, ибо не вижу смысла в данном приведении типов, мало ли что верните на место.
  Begin
    If ((AnsiUpperCase(ExtractFileName(FProcessEntry32.SzExeFile))
          = AnsiUpperCase(ExeFileName)) Or
        (AnsiUpperCase(FProcessEntry32.SzExeFile) = AnsiUpperCase(ExeFileName))
      ) Then
      Strings.Add(FProcessEntry32.SzExeFile + String(':') + IntToStr
        (FProcessEntry32.th32ProcessID));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  End;
  CloseHandle(FSnapshotHandle);
End;

procedure TForm2.sButton1Click(Sender: TObject);
begin
 GetProcesssdffgh('hlds.exe',sListBox1.Items);
end;
если что то я не проверял, не на чем.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.03.2011, 11:48   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Благодарен, спасибо! Ставлю +
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти в строке одинаковые буквы katena88 Общие вопросы C/C++ 0 11.11.2010 14:47
Проверка на одинаковые записи при добавление в ListBox Nice42ru Общие вопросы Delphi 7 05.08.2010 22:42
Си найти одинаковые идущие подряд элементы и удалить один из них Денни Помощь студентам 8 15.02.2010 01:41
Как найти абсолютно одинаковые строчки и удалить их, и объединить очень похожие? dronkailp Microsoft Office Excel 4 28.10.2009 16:59