На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (4) « Первая ... 2 3 [4]  все  ( Перейти к последнему сообщению )  
> Работа с процессами
    2e-yes: это в принципе неправильный код! Почитай мессаги повыше.

    А насчёт кнопки на таскбаре... Не знаю, может быть... Ладно, я завтра пороюсь, сообщу результаты.
      Цитата V4n93R<RnD>, 14.04.03, 14:43:39
      2e-yes: это в принципе неправильный код! Почитай мессаги повыше.

      Думаешь я не читал?
        По ходу дела __alex всё-таки был прав.
        Смотрите. Я заношу в массив хэндлы всех окон, а затем начинаю поиск всех процессов. Для каждого процесса перебираю все окна и сравниваю id их владельцев (GetWindowThreadProcessId) со значением ProcessID найденного процесса. Если совпадение найдено и окно видимое, вывожу GetWindowText последнего в списке совпавшего окна (вернее первого, но я начинаю поиск с конца), иначе вывожу с заглавной буквы имя файла процесса (без расширения).
        Я сравнивал результат работы этой программы со списком, вызываемым по Ctrl-Alt-Del. Всё совпадает. Отличия небольшие:
        [*] У меня нет Explorer
        [*] У меня Winoa386, а у него - Winoldap
        [*] У него нет Kernel32, Msgsvr32, mmtask, Mprexe
        [*] Список в другом порядке :)

        Вот код.
        Необходимо создать кнопку Button1 и список ListBox1.

        ExpandedWrap disabled
          var<br>  Win: array [1..1024] of DWord;<br>  WC: DWord;<br>  i: DWord;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br><br> function EnumWindowsProc(H, LP: DWord): Boolean; stdcall;<br> begin<br>   Inc(WC);<br>   Win[WC] := H;<br>   EnumWindowsProc := True<br> end;<br><br>var<br>  TH, P: DWord;<br>  PE: TProcessEntry32;<br>  Found, Ok: Boolean;<br>  Title: PChar;<br><br>begin<br>  GetMem(Title, 4096);<br>  ListBox1.Clear;<br>  WC := 0;<br>  EnumWindows(@EnumWindowsProc, 0);<br>  TH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);<br>  Found := Process32First(TH, PE);<br>  while Found do<br>  begin<br>    Ok := False;<br>    for i := WC downto 1 do<br>    begin<br>      GetWindowThreadProcessId(Win[i], @P);<br>      if IsWindowVisible(Win[i]) and (P = PE.th32ProcessID) then<br>      begin<br>        Ok := True;<br>        Break<br>      end<br>    end;<br>    if Ok then<br>    begin<br>      GetWindowText(Win[i], Title, 4096);<br>      Ok := (Title[0] <> #0)<br>    end;<br>    if not Ok then<br>    begin<br>      StrPCopy(Title, ExtractFileName(PE.szExeFile));<br>      (StrEnd(Title)-Length(ExtractFileExt(PE.szExeFile)))^ := #0;<br>      StrLower(Title+1)<br>    end;<br>    ListBox1.Items.Add(Title);<br>    Found := Process32Next(TH, PE)<br>  end;<br>  CloseHandle(TH);<br>  FreeMem(Title, 4096)<br>end;

          о небольших отличиях:
          Цитата
          У меня Winoa386, а у него - Winoldap

          если глянуть версию файла winoa386.exe, то InternalName=WINOLDAP.
          Цитата
          У него нет Kernel32, Msgsvr32, mmtask, Mprexe

          ну и правильно - это же список задач а не процессов ;) если в своей проге вызвать RegisterServiceProcess, то и она исчезнет из это списка.

          но и кнопку на таскбаре тоже надо учесть - все же в списке задач (как в win9x, так и в winnt+) отображается не заголовок окна, а текст этой кнопки.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0224 ]   [ 16 queries used ]   [ Generated: 2.05.24, 09:06 GMT ]