Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.06;
Скачать: [xml.tar.bz2];

Вниз

Чтение цвета символа в консоли   Найти похожие ветки 

 
antsa   (2010-11-15 08:41) [0]

Доброго времени суток. Когда мне нужно было читать символ из DOS окна я делал таким образом:

type
 TAttachConsole = function (dwProcessId: DWORD): LongBOOL stdcall; //для чтения с консоли
var
 Hcwnd : Cardinal; //для чтения с консоли

procedure TFormSensor.FormCreate(Sender: TObject);
var
 HndlBKZ : integer;//для чтения с консоли
 mProcessID:Cardinal;//для чтения с консоли
 AttachConsole : TAttachConsole;//для чтения с консоли
begin
 //Не трожь - магия (4 строчки)
 @AttachConsole := GetProcAddress(GetModuleHandle("kernel32.dll"), "AttachConsole");//для чтения с консоли
 HndlBKZ:=FindWindow("ConsoleWindowClass",nil);//для чтения с консоли
 GetWindowThreadProcessId(HndlBKZ,@mProcessID);//для чтения с консоли
 AttachConsole(mProcessID);//для чтения с консоли
end;

function TFormSensor.ReadCMD(x, y, s: byte): string;
var
 chRead: Cardinal;
 BufInfo: _CONSOLE_SCREEN_BUFFER_INFO;
 lpCh : PChar;
 Coord: _COORD;
begin
 Result:="";
 Hcwnd:=GetStdHandle(STD_OUTPUT_HANDLE);
 GetConsoleScreenBufferInfo (Hcwnd, BufInfo);
 GetMem(lpCh,s);
 Coord.X:=x;
 Coord.Y:=y;
 ReadConsoleOutputCharacter(Hcwnd,lpCh,s,Coord,chRead);
 Result:=copy(lpCh,1,s);
end;



И тогда вызывая ReadCMD(x, y, s: byte) я читаю s символов, а x,y - это координаты первого читаемого символа.

Вот теперь вопрос, а как узнать цвет символа?


 
Anatoly Podgoretsky ©   (2010-11-15 09:06) [1]

> antsa  (15.11.2010 08:41:00)  [0]

Не надо врать про ДОС, это обычная Виндоус программа.


 
CrytoGen   (2010-11-15 09:13) [2]

Плохо искали:
http://msdn.microsoft.com/en-us/library/ms684968(v=VS.85).aspx
и зачем вы вызываете GetConsoleScreenBufferInfo (Hcwnd, BufInfo); если потом не используете полученную информацию?


 
antsa   (2010-11-15 09:31) [3]


> Не надо врать про ДОС, это обычная Виндоус программа.

Не понял. программа ИЗ которой я читаю cmd программа КОТОРАЯ читает - моя, под виндоус.

> Плохо искали:
> http://msdn.microsoft.com/en-us/library/ms684968(v=VS.85).
> aspx
> и зачем вы вызываете GetConsoleScreenBufferInfo (Hcwnd,
> BufInfo); если потом не используете полученную информацию?
>

Сейчас читаю http://msdn.microsoft.com/en-us/library/ms684965(VS.85).aspx
Не могли бы сказать что проще ReadConsoleOutputAttribute или ReadConsoleOutput если мне нужно прочитать цвет и символ из консоли?
P.S. GetConsoleScreenBufferInfo (Hcwnd, BufInfo); что то проглядел да, не нужно.


 
Anatoly Podgoretsky ©   (2010-11-15 09:37) [4]

> antsa  (15.11.2010 09:31:03)  [3]

Что такое CMD программа, это новый класс программ в Виндоус?


 
antsa   (2010-11-15 09:54) [5]


> Что такое CMD программа, это новый класс программ в Виндоус?

Прога была написано давно для ДОС, сейцас такие запускаются через командную сторку (CMD) которая открывает ntdvm - эмулятор dos. я работаю просто с консольной прогой для винды. Все так?


 
Slym ©   (2010-11-15 10:15) [6]

var Attrs: array of word;
...
SetLength(Attrs, s);
ReadConsoleOutputAttribute(Hcwnd,@Attrs[0],s,Coord,chRead);


 
antsa   (2010-11-15 10:33) [7]


> Slym ©   (15.11.10 10:15) [6]
> var Attrs: array of word;
> ...
> SetLength(Attrs, s);
> ReadConsoleOutputAttribute(Hcwnd,@Attrs[0],s,Coord,chRead);
>


Если s:=1 то как узнать цвет символа который:

 Coord.x:=1;
 Coord.y:=1;


 
antsa   (2010-11-15 12:14) [8]

как из attrs[0] вытащить цвет и символ, пожалуЙста!


 
Anatoly Podgoretsky ©   (2010-11-15 12:50) [9]

В attrs[0] нет символа, поэтому никак


 
antsa   (2010-11-15 13:57) [10]

а цвет???


 
Anatoly Podgoretsky ©   (2010-11-15 14:22) [11]

Attibute := attrs[0];

Атрибут это и есть цвет.


 
Slym ©   (2010-11-16 07:51) [12]

attrs - word (2 байта)
в одном байте цвет символа в другом цвет фона


 
Anatoly Podgoretsky ©   (2010-11-16 08:46) [13]

> Slym  (16.11.2010 07:51:12)  [12]

Справка с тобой не согласна, Один байт содержит и цвет символа и цвет фона,
в формате текстовых аттрибутов ДОС, а второй байт используется для DBCS


 
antsa   (2010-11-17 10:28) [14]

Извините что долго не был, спасибо вам, решил, вот:

procedure TForm1.FormCreate(Sender: TObject);
var
 HndlBKZ : integer;//для чтения с консоли
 mProcessID:Cardinal;//для чтения с консоли
 AttachConsole : TAttachConsole;//для чтения с консоли
begin
 //Не трожь - магия (4 строчки)
 @AttachConsole := GetProcAddress(GetModuleHandle("kernel32.dll"), "AttachConsole");//для чтения с консоли
 HndlBKZ:=FindWindow("ConsoleWindowClass",nil);//для чтения с консоли
 GetWindowThreadProcessId(HndlBKZ,@mProcessID);//для чтения с консоли
 AttachConsole(mProcessID);//для чтения с консоли
end;


procedure TForm1.Button2Click(Sender: TObject);
var
 chRead: Cardinal;
 Coord: _COORD;
 Hcwnd : Cardinal; //для чтения с консоли
 x,y,s:byte;
 Temp: Smallint;
begin
 Hcwnd:=GetStdHandle(STD_OUTPUT_HANDLE);
 x:=StrToInt(Form1.Edit1.Text);
 y:=StrToInt(Form1.Edit2.Text);
 s:=StrToInt(Form1.Edit3.Text);
 Coord.X:=x;
 Coord.Y:=y;
 ReadConsoleOutputAttribute(Hcwnd,@temp,s,Coord,chRead);
 Button2.Caption:=IntToStr(Temp);
end;

первая цифра это фон, вторая это цвет символа!!!



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1288100292
vrem
2010-10-26 17:38
2011.02.06
То, где ты работаешь - продаётся


2-1290051713
Sergey
2010-11-18 06:41
2011.02.06
Как правильно читать и писать строки в поток?


6-1234078143
FireMan_Alexey
2009-02-08 10:29
2011.02.06
ограничение скорости


8-1210184448
Nizam
2008-05-07 22:20
2011.02.06
TrackBar


11-1229077921
sir tictactoe
2008-12-12 13:32
2011.02.06
не получается создать MCK-проект в BDS2006





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский