Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как получит PID процесса ntvdm.exe [D7, WinXP]


antsa ©   (2010-07-13 16:49:00) 

Возникла задача найти PID этого процесса. PID процесса cmd.exe я могу получить, сначала узнаю hndl окна, затем hndl процесса, затем его PID. Но вот у ntvdm.exe нет окна, вот в этом и проблема. Вообще cmd.exe является родителем ntvmd.exe.. Может это помочь?


antsa   (2010-07-15 17:48:00) [1]

В предпоследнем посте ответ. Спасибо!!!


Двенадцать   (2010-07-14 09:55:00) [2]

читать много что
конкретно, вопрос какой?


antsa   (2010-07-13 18:38:00) [3]

procedure TForm1.Button4Click(Sender: TObject);
var
 hSnap:THandle;
 pe:TProcessEntry32;
 //////
 IpBase: Pointer;
 IpBuf : Single;
 numberRead: DWORD;
 hProc : DWORD;
begin
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 If Process32First(hSnap,pe) then
   While Process32Next(hSnap,pe) do
     if ExtractFileName(pe.szExeFile)='ntvdm.exe' then
       begin
         Label2.Caption:='PID '+IntToStr(pe.th32ProcessID);
         //////////////////////////////
         hProc:=OpenProcess(PROCESS_ALL_ACCESS, false, pe.th32ProcessID);
         ipbase:=ptr($00020CB6); //с точкой 4 ьайта
         ReadProcessMemory(hProc, IpBase, Addr(Ipbuf), 4, numberRead);
         Button4.Caption:=FloatToStr(IpBuf);
         //////////////////////////////
         Form1.Color:=clGreen;
       end;
end;

тип переменной IpBuf должен быть single а не integer так ка я читаю тип с точкой 4 байта


antsa   (2010-07-13 17:59:00) [4]

Можно еще вопрос, но он не в тему?

procedure TForm1.Button4Click(Sender: TObject);
var
 hSnap:THandle;
 pe:TProcessEntry32;
 //////
 IpBase: Pointer;
 IpBuf : integer;
 numberRead: DWORD;
 hProc : DWORD;
begin
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 If Process32First(hSnap,pe) then
   While Process32Next(hSnap,pe) do
     if ExtractFileName(pe.szExeFile)='ntvdm.exe' then
       begin
         Label2.Caption:='PID '+IntToStr(pe.th32ProcessID);
         //////////////////////////////
         hProc:=OpenProcess(PROCESS_ALL_ACCESS, False, pe.th32ProcessID);
         ipbase:=ptr($00021AB3);
         ReadProcessMemory(hProc, IpBase, Addr(Ipbuf), 4, numberRead);
         Button4.Caption:=IntToStr(IpBuf);
         //////////////////////////////
         Form1.Color:=clGreen;
       end;
end;


я хочу по адресу $00021AB3 процесса ntvdm.exe прочитать значение, не получается. почему? Когда я делаю вот так:
procedure TForm1.Button1Click(Sender: TObject);
var
 HandleWindow : Cardinal;
 IpBase: Pointer;
 IpBuf : integer;
 numberRead: DWORD;
 PID : DWORD;
 hProc : DWORD;
begin
 HandleWindow:=FindWindow(nil,'FormTest');
 GetWindowThreadProcessId(HandleWindow, @PID);
 hProc:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
 ipbase:=ptr($00453BD4);
 ReadProcessMemory(hProc, IpBase, Addr(Ipbuf), 4, numberRead);
 Label1.Caption:=IntToStr(IpBuf);
end;

то все работает. Странно, адрес верный PID я нашел, только чуть другим методом. в чем проблема?


antsa   (2010-07-13 17:44:00) [5]

просто хочется что то попроще и желательно своими руками, я только начинаю, и поэтому для полной ясности в голове стараюсь понимать весь код если что то не понимаю - не использую просто.


antsa   (2010-07-13 17:43:00) [6]

тааак!!
вот код при нажатии button2, label1 выдает нам PID ntvdm.exe
procedure TForm1.Button2Click(Sender: TObject);
var
 hSnap:THandle;
 pe:TProcessEntry32;
 pid: DWORD;
begin
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 If Process32First(hSnap,pe) then
   While Process32Next(hSnap,pe) do
     if ExtractFileName(pe.szExeFile)='ntvdm.exe' then
       Label1.Caption:=IntToStr(pe.th32ProcessID);
end;

Двенадцать, спасииииибо!!


Двенадцать   (2010-07-13 17:29:00) [7]

как Вы на sql попали? :)

ради интереса
http://www.google.ru/search?rls=ig&hl=ru&source=hp&q=createtoolhelp32snapshot+delphi&aq=2&aqi=g9&aql=&oq=CreateToolHelp32SnapShot&gs_rfai=
на первой странице вообще нет sql.ru :)

а первая ссылка - вполне самостоятельный unit, подключай и юзай


antsa   (2010-07-13 17:22:00) [8]

TLHelp32 в uses !!!!!!!!!!!!!


antsa   (2010-07-13 17:17:00) [9]

http://www.sql.ru/forum/actualthread.aspx?tid=87689
procedure TForm1.FormCreate(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) = 'MajorServer.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;


в строке  pe:TProcessEntry32; ругается. что включить в uses???


Двенадцать   (2010-07-13 16:54:00) [10]

CreateToolHelp32SnapShot?


Наверх

Титульная страница Поиск, карта сайта Написать письмо