![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ID скрытого процесса [D7, XP]
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 не скрытого ты уже умеешь?