На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> PID моего процесса , узнать PID моего процесса
    Цитата Rouse_ @
    Увы, не могут в рамках текущего аптайма

    Это что, то есть, если я породил 4 миллиарда короткоживущих процессов, то надо перегружать ось для продложения работы? :blink:

    *кричит "Маздай! Маздай!" и одевает шкуру пингвина*
      Цитата Mr.Delphist @
      Это что, то есть, если я породил 4 миллиарда короткоживущих процессов, то надо перегружать ось для продложения работы?


      Эсперимент надо провести;)
        Цитата Mr.Delphist @
        Это что, то есть, если я породил 4 миллиарда короткоживущих процессов, то надо перегружать ось для продложения работы?

        Не надо утрировать. GetTickCount тоже выдает максимум 4 миллиарда мсек (~50 суток) непрерывной работы, а затем просто переходит на 0. Видимо и с PID тоже самое - искусственно ограничивать диапазон и повторять не имеет смысла, а если переполнится через несколько месяцев непрерывной работы, то и фиг с ним ;)
        Сообщение отредактировано: leo -
          leo, проверяется легко.
          В цикле стартуем краткосрочный процесс, запоминая его ID и не забывая все закрывать.
          Смотрим был уже такой или нет. IMHO, не так уж и много итераций понадобиться, дабы поймать повторение.
          P.S.
          Сама не пробовала, совсем времени нет сейчас :(
            Цитата Riply @
            Сама не пробовала, совсем времени нет сейчас

            А откуда тогда уверенность, что "не так уж и много итераций понадобиться" ?
              Цитата leo @
              А откуда тогда уверенность, что "не так уж и много итераций понадобиться" ?


              "И опыт, сын ошибок трудных" (с) :)
              Сто лет назад ловила глюк при построении дерева процессов (XP SP1)
                Вопрос: Как этой функцией (в начале темы) узнать Handle окна запущенной программы и вывести вместе с её PID ?

                ExpandedWrap disabled
                  function StartProccess(const ExecutableName: string): DWORD;
                  var
                    StartupInfo: TStartupInfo;
                    ProccessInfo: TProcessInformation;
                  begin
                    Result:= 0;
                    FillChar(StartupInfo, sizeof(StartupInfo), 0);
                    with StartupInfo do
                    begin
                      cb:= sizeof(StartupInfo);
                      wShowWindow:= SW_RESTORE;
                    end;
                    FillChar(ProccessInfo, sizeof(ProccessInfo), 0);
                    if (CreateProcess(PChar(ExecutableName), nil, nil, nil, false, 0, nil, nil, StartupInfo, ProccessInfo)) then
                    begin
                      Result:= ProccessInfo.dwProcessId;
                      CloseHandle(ProccessInfo.hProcess);
                      CloseHandle(ProccessInfo.hThread);
                    end;
                  end;


                В моём варианте использую её так:
                ExpandedWrap disabled
                  if OpenDialog1.Execute then
                      begin
                        ProgID:= StartProccess(OpenDialog1.FileName);
                      end
                Сообщение отредактировано: Aqel -
                  EnumWindows + GetWindowProcessID, но не забывать, что у любого процесса м.б. куча окон.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0362 ]   [ 16 queries used ]   [ Generated: 28.03.24, 18:53 GMT ]