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

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

ID скрытого процесса [D7, XP]


Страницы:   1 2

8shar ©   (2009-03-31 06:30:00) 

Доброго дня. Нужно узнать ID скрытого процесса, как это осуществить?


Palladin   (2009-04-05 12:43:00) [21]

фига себе откровение... главное что бы тебя быстрее отпустило...


8shar   (2009-04-05 12:39:00) [22]


> Palladin ©   (05.04.09 12:28) [17]
>
> вот эта строчка
>
> hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
>
> это что такое?

This is used to reset the carat/cursor to the top left.
Это используется для сброса карат / курсор в верхнем левом углу.


8shar   (2009-04-05 12:34:00) [23]


> Anatoly Podgoretsky ©   (05.04.09 11:53) [15]
>
> > 8shar  (05.04.2009 10:55:12)  [12]
>
> И не получится, поскольку
>
> ReadConsoleOutputCharacter <> ReadConsoleOutputAttribute

Осознал.

var
 pid: DWORD;
 hStdout: thandle;
 Buffer:array of integer;
 c:coord;
 wr:cardinal;
begin
 c.X:=1;
 c.Y:=1;
 GetWindowThreadProcessId(FindWindow('C:\WINDOWS\system32\cmd.exe',nil), @pid);
 hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
 ReadConsoleOutputAttribute(hStdout,@Buffer[0],2,C,Wr);

 Memo1.Lines.Add(IntToStr(buffer[0]));
 Memo1.Lines.Add(IntToStr(wr));
end;

все согласно http://www.delphimaster.ru/articles/console.html
а именно:
Продвинутые возможности
Ввод с экрана

 Экранный буфер - это ведь не только средство отображения. Он может служить промежуточным хранилищем для последующего ввода текста в обработку. Для получения текста с экрана служит вызов ReadConsoleOutput Character. Например:

ReadConsoleOutput Attribute(OutHnd,@Buffer[0],12,C,Wr);

 Здесь 12 последовательных символов читаются с экрана, начиная с позиции С, и записываются в Buffer.


Palladin   (2009-04-05 12:28:00) [24]

вот эта строчка

hStdout := GetStdHandle(STD_OUTPUT_HANDLE);

это что такое?


8shar   (2009-04-05 12:17:00) [25]


> Anatoly Podgoretsky ©   (05.04.09 11:53) [15]
>
> > 8shar  (05.04.2009 10:55:12)  [12]
>
> И не получится, поскольку
> ReadConsoleOutputCharacter <> ReadConsoleOutputAttribute


Не уверен что верно понял. Мне нужно просто заполучить символ с консоли стоящий в позиции X,Y а ReadConsoleOutputAttribute делает снимок с экрана по моему. но даже если и так как это можно использовать для решения моей задачи?
я пишу так:

var
 pid: DWORD;
 hStdout: thandle;
 buffer : array [1..5,1..5] of char;
 //buffer:char;
 c:coord;
 wr: cardinal;
 ii:bool;
 i,j:byte;
 LING : byte;
begin
 For i:=1 to 5 do
   For j:=1 to 5 do
     buffer[i,j]:='0';
 wr:=0;
 c.X:=1;
 c.Y:=1;
 LING := 1;
 GetWindowThreadProcessId(FindWindow('C:\WINDOWS\system32\cmd.exe',nil), @pid);
 hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
 ii:=ReadConsoleOutputCharacter(hStdout,@Buffer,LING,C,wr);
 ///MEMO///
 Memo1.Lines.Add(IntToStr(FindWindow(nil,'C:\WINDOWS\system32\cmd.exe')));
 if (Not ii) then Memo1.Lines.Add('?');
 Memo1.Lines.Add(IntToStr(wr));
 For i:=1 to 5 do
   begin
     For j:=1 to 5 do
       Memo1.Lines.Text:=Memo1.Lines.Text + ' ' + buffer[i,j];
     //Memo1.Lines.Add(buffer);
     Memo1.Lines.Add('');
   end;
 ///MEMO///
end;


Anatoly Podgoretsky   (2009-04-05 11:53:00) [26]

> 8shar  (05.04.2009 10:55:12)  [12]

И не получится, поскольку

ReadConsoleOutputCharacter <> ReadConsoleOutputAttribute


8shar   (2009-04-05 11:31:00) [27]


> Palladin ©   (05.04.09 11:00) [13]
>
> раз не получается, то никак

ну как так, если я не умею это еще не значит что нельзя, все же как то делают?


Palladin   (2009-04-05 11:00:00) [28]

раз не получается, то никак


8shar   (2009-04-05 10:55:00) [29]

http://www.delphimaster.ru/articles/console.html
И там есть:
Продвинутые возможности
Ввод с экрана

 Экранный буфер - это ведь не только средство отображения. Он может служить промежуточным хранилищем для последующего ввода текста в обработку. Для получения текста с экрана служит вызов ReadConsoleOutputCharacter. Например:

ReadConsoleOutputAttribute(OutHnd,@Buffer[0],12,C,Wr);

 Здесь 12 последовательных символов читаются с экрана, начиная с позиции С, и записываются в Buffer.

НО НЕ ПОЛУЧАЕТСЯ, КАК, КАК ЭТО СДЕЛАТЬ?!?!?


8shar   (2009-04-05 10:09:00) [30]

Блин. Ниче не могу придумать. Ну как достать эти цифры???


Сергей М.   (2009-04-02 08:23:00) [31]

см. ReadConsoleOutput


8shar   (2009-04-02 06:13:00) [32]


> Чтол ж ты голову людям морочишь со "скрытостью процесса"
> ?)
>
> Эта программа не консольная, это MSDOS-приложение !
>
> Процесс вовсе не скрыт и называется он NTVDM.EXE, он является
> вирт.машиной, исполняющей 16-разрядные ДОС-приложения.

Не знал. Так что теперь делать? Как их лучше получить?


Сергей М.   (2009-03-31 17:23:00) [33]

Чтол ж ты голову людям морочишь со "скрытостью процесса" ?)

Эта программа не консольная, это MSDOS-приложение !

Процесс вовсе не скрыт и называется он NTVDM.EXE, он является вирт.машиной, исполняющей 16-разрядные ДОС-приложения.


8shar   (2009-03-31 15:24:00) [34]

Вот скрин проги:
http://antsa.narod.ru/img.jpg
все белые цифры - постоянно меняются они отображают разного рода параметры (в основном температуру и расход). но меня интересуют 14 параметров вверху. оформленных в рамочке. Как их лучше от туда достать?


Сергей М.   (2009-03-31 13:54:00) [35]

http://www.google.ru/search?q=Delphi+%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE+%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


8shar   (2009-03-31 13:26:00) [36]


> Вот прямо из консоли и читай поток вывода той самой "хитрозадой"
> программы.

А как это реализовать?


Сергей М.   (2009-03-31 12:45:00) [37]

С чего бы вдруг процессу, выполняющему вполне легальные и нужные вычисления, скрываться от кого бы то ни было ?


> в cmd она выводит давление, температуру и т.д


Вот прямо из консоли и читай поток вывода той самой "хитрозадой" программы.


8shar   (2009-03-31 12:30:00) [38]

Да. Вот так:

function TForm1.RMC: string;
var
 HandleWindow, ProcessId, ThreadId : integer;
 adr, written : Cardinal;
Const
 Name = 'C:\WINDOWS\system32\cmd.exe';
 Address = $7FF50110;
 Bit = 4;
begin
 //ProcessId=12345;
 ThreadId := GetWindowThreadProcessId(FindWindow(nil,name),@ProcessId);
 HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
 ReadProcessMemory(handlewindow,ptr(address),@adr,bit,written);
 CloseHandle(HandleWindow);
 Form1.Caption:=IntToStr(ProcessId);
 Result:=IntToStr(adr);
end;

Задача поставлена так, есть программа, которая запускается через cmd, это программа матмодель работы технической машины, в cmd она выводит давление, температуру и т.д. мне нужно снять эти показания и вывести их. Что я придумал. Находим значения переменных в памяти через ArtMoney теперь зная адрес переменной в памяти и ID процесса их можно легко заполучить, если процесс не скрытый, то все работает на ура (написал маленькую прогу рандомно выводящие числа от 1 до 100 и проверил).  Но проблема в том, что процесс скрытый, ID CMD я легко нахожу приведеной выше функцией а что делать со скрытым процессом, родителем которого является CMD не знаю. Знаю только, что его можно заполучить, но как?
Теперь, откуда я знаю что так можно сделать? Есть такая прога, приложение к ArtMoney которая отображает скрытые процессы называется она spydetector315rus, открываем находим нужный нам процесс смотрим ID например 12345 раскоментируя строчку в функции мы получим желаемый результат, давление.


KilkennyCat   (2009-03-31 08:16:00) [39]


> Palladin ©   (31.03.09 07:47) [1]

а че там уметь? ctrl+alt+del и в "вид"-"выбрать столбцы"-"показать PID"


Palladin   (2009-03-31 07:47:00) [40]

А ID не скрытого ты уже умеешь?


Страницы:   1 2

Наверх

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