На главную Наши проекты:
Журнал   ·   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) 1 [2] 3 4  все  ( Перейти к последнему сообщению )  
> Работа с процессами
    Открываешь MSDN или Win SDK и ищешь CreateToolHelp functions
      Искал, в SDK нет ни одной функции, с помощью которой можно получить title процесса.
      Там указывается только код на асме, а как его юзать, я не понял :(
        Про r0 (для Windows 95/98/ME) есть пример в >FAQ< по асму (см. про резидент).
        А про GetWindowText ты не прав, Song. Он выдаёт название для любого процесса!
        Сообщение отредактировано: 7in -
          2 Jin X: GetWindowText НЕ ВЫДАЁТ title процесса!! >:(
          А на асм забейте, я его ещё не изучал и, видимо, нескоро буду :)
          Сообщение отредактировано: v4ng3r -
            Цитата V4ng3R<RnD>, 23.03.03, 22:34:29
            Искал, в SDK нет ни одной функции, с помощью которой можно получить title процесса.

            Что имеешь ввиду под "title процесса"?
            Сообщение отредактировано: .alex -
              О-о-о... :'( :)
              Блин, .alex, ты внимательно читал мессаги наверху? >:(
              Под titl'ом процесса я подразумеваю то что отображается при нажатии CAD.
              Запускаю Дельфя, пишу: application.Title:='dats ma pr0c355';
              Запускаю прогу, жму CAD, вижу строчку: "dats ma pr0c355".
              Всё просто :)
              Так вот, как получить такую строчку ???
                Блин! Да выдаёт GetWindowText title :)
                Попробуй сам:
                ExpandedWrap disabled
                  procedure TForm1.FormCreate(Sender: TObject);<br>var<br>  Name: PChar;<br>begin<br>  Application.Title := 'Хрен собачий';<br>  ListBox1.Clear;<br>  GetMem(Name, 256);<br>  GetWindowText(Application.Handle, Name, 256);<br>  MessageBox(0, Name, 'Угадал?', mb_Ok + mb_IconInformation);<br>  FreeMem(Name, 256);<br>  Halt<br>end;
                  Тогда почему не пашет следущее :( :

                  ExpandedWrap disabled
                    <br>...<br>var<br>  Form1: TForm1;<br>  ProcEntry: tprocessentry32;<br>  hSnapShot,phndl: thandle;<br>  i: integer;<br>  pid: array[0..49] of cardinal;<br>  procid: cardinal;<br>  proctitle: pchar;<br><br>...<br><br>procedure TForm1.lstprocDropDown(Sender: TObject); [b]//всё тот же ComboBox[/b]<br>begin<br>hsnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);<br>procentry.dwSize:=sizeof(PROCESSENTRY32);<br>if Process32First(hsnapshot,Procentry) then<br>begin<br>  lstproc.Clear;<br>  i:=0;<br>  GetMem(proctitle, 256);<br>  with lstproc.Items do<br>  begin<br>    repeat<br>      pid[i]:=procentry.th32ProcessID;<br>      phndl:=OpenProcess(PROCESS_ALL_ACCESS,false,pid[i]);<br>      GetWindowText(phndl, proctitle, 256);<br>      Add(proctitle);<br>      closehandle(phndl);<br>      inc(i);<br>    until not Process32Next(hsnapshot,Procentry);<br>  end;<br>end;<br>FreeMem(proctitle, 256);<br>CloseHandle(hsnapshot);<br>end;<br>...<br>


                  ??? ??? ??? :( :( :(
                  Сообщение отредактировано: v4ng3r -
                    Скорее всего это ваще не работает
                    phndl:=OpenProcess(PROCESS_ALL_ACCESS,false,pid[i]);
                    GetWindowText(phndl, proctitle, 256);
                      А почему ???
                      Почему, когда передаёшь хэндл своего процесса, то всё получатся, а когда передаёшь хэндл чужого процесса, выдаётся пустая строка?
                      Кстати при перечислении процессов хэндл своего процесса (Application.Handle) сильно отличается от перечисляемого хэндла... О, идея, а может надо передавать хэндл модуля?.. Щас попробую.
                        Блин, не получилось >:( Я не могу получить хэндл модуля. GetModuleHandle возвращает, судя по WinSDK, хэндл только своего процесса.
                          V4ng3R<RnD>, по-моему я сказал как получить title.. ты читаешь постинги?
                          Забудьте про GetWindowText() или WM_GETTEXT, они возвращают строку с окна. Это прокатит только для окна объекта класса TApplication. В других программах такого окна нет, поэтому и возвращается пустая строка.
                            Цитата Song, 25.03.03, 12:06:05
                            ...по-моему я сказал как получить title.. ты читаешь постинги?...

                            Блин, конечно я читаю постинги, но, по-моему, ни один из предложенных способов не помогает! :( ToolHelp не помогает, кодом на асме я не знаю как пользоваться, GetModuleFileName выдаёт имя экзешника или прочего модуля, а не title.
                            Блин, хэлп ми !! :'(
                              Покажи как ты ToolHelp используешь.
                                Троеточием обозначены пропуски кода
                                ...
                                uses
                                 ..., TlHelp32;
                                type
                                 Tfmain = class(TForm)
                                   ...
                                   lstProcs: TListBox;
                                   cTimer: TTimer;
                                   ...
                                   procedure cTimerTimer(Sender: TObject);
                                   procedure FormCreate(Sender: TObject);
                                   ...
                                ...
                                var
                                 fmain: Tfmain;
                                 hsnapshot,...: thandle;
                                 procentry: tprocessentry32;
                                 pid: array[0..49] of cardinal;
                                 ppath: array[0..49] of ansistring;
                                 i,...: integer;

                                implementation

                                procedure ListProcs;
                                begin
                                ...
                                hsnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
                                procentry.dwSize:=sizeof(PROCESSENTRY32);
                                if Process32First(hsnapshot,procentry) then
                                begin
                                 fmain.lstprocs.Clear;
                                 i:=0;
                                 with fmain.lstProcs.Items do
                                {Здесь в lstProcs (ListBox) в цикле дожны
                                перечисляться titl'ы процессов}

                                 begin
                                   repeat
                                     with procentry do
                                     begin
                                       pid[i]:=th32ProcessID;
                                       ppath[i]:=szExeFile;
                                     end;
                                     Add(ExtractFileName(ppath[i]));
                                     inc(i);
                                   until not Process32Next(hsnapshot,procentry);
                                 end;
                                end;
                                CloseHandle(hsnapshot);
                                ...
                                end;
                                {$R *.dfm}
                                ...
                                procedure Tfmain.cTimerTimer(Sender: TObject);
                                begin
                                listprocs;
                                end;

                                procedure Tfmain.FormCreate(Sender: TObject);
                                begin
                                listprocs;
                                ...
                                end;
                                ...
                                С помощь ToolHelp'а я перечисляю процессы и получаю их id'ы.
                                И что ты хотел увидеть?
                                :-/
                                Сообщение отредактировано: v4ng3r -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 [2] 3 4  все


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