Текущий архив: 2011.02.06;
Скачать: CL | DM;
ВнизЧтение цвета символа в консоли Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.004 c