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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2011, 07:23   #1
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию GetCurrentProcessID

Есть пример использования хоть у кого-то? Очень нужно понять как отлавливать PID процесса.
Зод вне форума Ответить с цитированием
Старый 27.10.2011, 08:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

PID вернется того процесса, который вызвал функцию.
Код:
var c:cardinal;
...
c:=GetCurrentProcessID;
Или тебе нужно увидеть PID стороннего процесса?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2011, 10:07   #3
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

Вот именно что стороннего. Свой PID я запускаю вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetCurrentProcessId));
end;
Как понимаю PID моей же программы и выводится на экран. А вот что касается с сторонними...кодов ни где не нашел.
Зод вне форума Ответить с цитированием
Старый 27.10.2011, 10:23   #4
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

Нашел вот такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
	hSnap:THandle;
	pe:TProcessEntry32;
	s2:THandle;
begin
	ListView1.Items.Clear;
	pe.dwSize:=SizeOf(pe);
	hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	If Process32First(hSnap,pe) then begin
        While Process32Next(hSnap,pe) do begin
            with ListView1.Items.Add do begin
				Caption := ExtractFileName(pe.szExeFile);
                if ExtractFileName(pe.szExeFile) = 'Opera.exe' then begin
                    s2 := OpenProcess(PROCESS_QUERY_INFORMATION,false,pe.th32ProcessID);
                    //TerminateProcess(s2, 0);
                    Subitems.Add(inttostr(s2));
                    Subitems.Add(inttostr(Application.Handle));
                end;
                //ListBox1.Items.Add(pe.szExeFile);
            end; { with }
        end;
	end;
end;
end.
Он мне выводит все процессы системы как я понимаю. Хотя в комментах к коду говорилось о PIDе процесса с именем( в данном случае opera.exe)
Зод вне форума Ответить с цитированием
Старый 27.10.2011, 10:34   #5
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

10:34
Или можно как то из значений всех процессов поставить условие например:
Код:
if запустилась delphi32.exe then
Ну примерно так, просто не знаю как с этим работать а задача в том что бы наличие процесса и было условием.

10:43
не правильно видимо я конструирую программы))
Нашел другое решение, отблагодарил уже автора, реально спасибо ему.
Цитата:
Вот! Держи...

Не забуДь добавить модуль в uses TLHelp32;

Код:

function IsRunning(sName: string): boolean;
var
han: THandle;
ProcStruct: PROCESSENTRY32;
sID: string;
begin
Result := false;
han := CreateToolhelp32Snapshot(TH32CS_SNA PALL, 0);
if han = 0 then
exit;
ProcStruct.dwSize := sizeof(PROCESSENTRY32);
if Process32First(han, ProcStruct) then
begin
repeat
sID := ExtractFileName(ProcStruct.szExeFil e);
if uppercase(copy(sId, 1, length(sName))) = uppercase(sName) then
begin
Result := true;
Break;
end;
until not Process32Next(han, ProcStruct);
end;
CloseHandle(han);
end;

Применение:

Код:

if IsRunning('delphi32.exe') = true then
ShowMessage('Делфи запущена') else ShowMessage('Делфи не запущена');

Помог? если да, то нажмите на весы с лева =)
P.S.
uberchel автор

Вот только этот код смотрит активно или нет программа именно сейчас а мне нужно постоянно следить. Что-то вроде беспрерывного потока с выходом когда будет активна делфи. Если тупо сделать if then else тогда прога будет "виснуть" как я понимаю а это не есть гуд( проблемы при закрытии и т.д. вообщем считаю это не хорошим тоном)

Ну вот, опять... А ж дуплет получился...
Читаем правила раздела.
Там подробно написано, как следует оформлять код и что получается, если этого не делать.
Далее. Красные жирные циферки видны ?
Это время, когда вы отправляли свои сообщения друг за другом, подряд.
По правилам это приравнивается к флуду.

Последний раз редактировалось mihali4; 27.10.2011 в 11:16.
Зод вне форума Ответить с цитированием
Ответ


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