Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

[D5] GetDС + память + RePaint

Здарова, программеры!

8 марта 2004 г., понедельник, 22:54:35 (GMT+05:00) Делфи - память: monah намылил:

Идея мне понравилась. Я решил её сплагинить ;')
Появились вопросы, соответствующие места в коде
отмечены - // <комментарий>

1) Почему перекрываются адреса переменных PChar?
2) Как сменить фонт для DC?
3) Как получить цвет шрифта у значков на рабочем столе?
4) Как указать окну на котором рисуешь то что пора перерисоваться? У
меня где-то был такой код, но после получаса поиска в моем скопище
он найден не был (там был код - монитор красными пятнами
покрывается (якобы вирусом заразился ;), а при выходе из проги все
пятна исчезают - может код а может статья была, но помню что это
делается едва ли не одной функцией). Все это надо для прозрачности
т.к. иначе цифры накладываются. И еще, есть процедурка которая
указывает перерисовать Rect в окне а не все окно, тоже подскажите,
а то я найти не могу.
5) Прога на харде занимает 17,5 кб, а в памяти - 1 212 кб (и тоже как
у monaha растет, хотя и очень медленно - во всяком случем на
несколько кило в первые секунды). Почему так много и почему растет?

PS: Может что посоветуете по оптимизации цикла - что вынести за
пределы. Только насчет GetDC, ReleaseDC советы не принимаю -
при нажатии ctrl+alt+del DC: HDC; слетает.
PPS: По ходу дела через DC поверх игр рисует!!!! rulezzzz.

program Project1;
uses
Windows;

var
DC: HDC;
ScreenWidth: integer;
sSize: integer;
ptaDay: POLYTEXT;
ptaDate: POLYTEXT;
ptaTime: POLYTEXT;
ptaArray: array [0..2] of POLYTEXT;
SystemTime: _SystemTime;
DateString: PChar absolute $40560C; // без absolute перекрываются адреса
DayString: PChar absolute $40560C + $100; // глюк какой-то непонятный
TimeString: PChar absolute $40560C + $200; // на этих адресах на другой тачке
может заглючить
tmpTime: string;
{$O-}
begin
ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
DateString := #0;
DayString := #0;
TimeString := #0;
with ptaDate do
begin
x := ScreenWidth - 100;
y := 10;
uiFlags := ETO_OPAQUE;
PAnsiChar := @DateString;
n := 1;
end;
with ptaDay do
begin
x := ScreenWidth - 100;
y := 25;
uiFlags := ETO_OPAQUE;
PAnsiChar := @DayString;
n := 1;
end;
with ptaTime do
begin
x := ScreenWidth - 100;
y := 40;
uiFlags := ETO_OPAQUE;
PAnsiChar := @TimeString;
n := 1;
end;

ptaArray[0] := ptaDate;
ptaArray[1] := ptaDay;
ptaArray[2] := ptaTime;

while true do
begin
GetLocalTime(SystemTime);

sSize := GetTimeFormat(LOCALE_SYSTEM_DEFAULT, LOCALE_NOUSEROVERRIDE, @SystemTime,
nil, @TimeString, 0);
GetTimeFormat(LOCALE_SYSTEM_DEFAULT, LOCALE_NOUSEROVERRIDE, @SystemTime,
nil, @TimeString, sSize);

ptaTime.PAnsiChar := @TimeString;

if tmpTime = ptaTime.PAnsiChar then
begin
sleep(200);
continue;
end;
tmpTime := ptaTime.PAnsiChar;

ptaTime.n := sSize - 1;

sSize := GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'd MMMM', @DateString, 0);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'd MMMM', @DateString, sSize);
ptaDate.PAnsiChar := @DateString;
ptaDate.n := sSize - 1;

sSize := GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'dddd', @DayString, 0);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'dddd', @DayString, sSize);
ptaDay.PAnsiChar := @DayString;
ptaDay.n := sSize - 1;

ptaArray[0] := ptaDate;
ptaArray[1] := ptaDay;
ptaArray[2] := ptaTime;

DC := GetDC(0);
//cn.Font.Style:=[fsBold]; // не знаю как задать шрифт для DC
//SetBkMode(DC, TRANSPARENT);
SetBkMode(DC, OPAQUE);
SetBkColor(DC, GetSysColor(COLOR_DESKTOP));
SetTextColor(DC, not GetSysColor(COLOR_DESKTOP)); // не знаю как получить
цвет
// шрифта у значков на
рабочем столе

PolyTextOut(DC, ptaArray, 3);
sleep(300);
ReleaseDC(0, DC);
end;
end.

Ответить   Томилов Александр Wed, 10 Mar 2004 00:10:01 +0500 (#99956)

 

Ответы:

Здравствуйте!
Мне нужно скрыть программу от Control+Alt+Delete.
Программа без форм, а примерно такого вида:

program proga;
uses
Windows.
begin
{skip}
end.

Как это сделать? Подскажите пожалуйста.
Пока!
С уважением Lakmus
http://www.nvkz.kuzbass.net/lakmus
Номер выпуска : 2507
Возраст листа : 170 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99977
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 10 Mar 2004 06:41:37 +0700 (#99977)

 

Hello "Lakmus" <lakm***@n*****.net>
Тема: Control+Alt+Delete [Delphi6] [Win98]

На эту тему есть хорошая книга Михаил Фленов Программирование в Delphi глазами
хакера. - СПб.:БХВ, 2004.
Его сайт http://www.vr-online.ru/

Ответить   Wed, 10 Mar 2004 09:40:51 +0300 (#100065)

 

Привет!

Блин, денег-то у меня не густо =) может кто-нибудь кинет исходы?
Пока!
С уважением Lakmus
http://www.nvkz.kuzbass.net/lakmus
Номер выпуска : 2510
Возраст листа : 170 (дней)
Количество подписчиков : 381
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/100230
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 10 Mar 2004 19:12:00 +0700 (#100230)

 

Тема: Re: Control+Alt+Delete [Delphi6] [Win98]

Тогда вот цитата (НО рекомендую: я читаю написанное им с удовольствием. Хорошо
пишет!):
В Windows 9x это можно сделать просто с помощью следующего:

uses Windows;
var
i: Integer;
begin
i:=0;
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @i, 0);
end;

(Alt) + (Tab) аналогично:
var
i: Integer;
begin
i:=0;
SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @i, 0);
end;

Ответить   Wed, 10 Mar 2004 15:51:32 +0300 (#100254)

 

Здравствуйте!

Спасибо! Всё сработало. Я так понял, что это как бы блокирует Alt+Tab и
Control+Alt+Delete, а можно ли сделать, чтобы программа была просто скрыта
от Control+Alt+Delete(а то вдруг задачу завершить надо будет?)?
Application.title:=''; тут вроде бы не подходит т.к. у "program" такого нет
параметра. Есть ли ещё способ?
Пока!
С уважением Lakmus
http://www.nvkz.kuzbass.net/lakmus
Номер выпуска : 2528
Возраст листа : 171 (дней)
Количество подписчиков : 381
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/100551
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Thu, 11 Mar 2004 06:22:45 +0700 (#100551)

 

Тема: Re: Control+Alt+Delete [Delphi6] [Win98]

Искал я искал и пришел вот к кому выводу:
1) В 98-м спрятать можно и об этом есть у Флерова, но в NT это не срабатывает
2) Остается второй его же совет - дать незаметное имя:
- для текстового можно scanbisk.log - одна буква поменялась - мало кто заметит
- для EXE что-нибудь похожее на имеющееся: он написал вредную. программу и дал
ей имя internet32.exe (internet.exe есть и все об этом знают, а вот ...32 - может
появилась все решили и не нашли )

Ответить   Sat, 13 Mar 2004 09:38:17 +0300 (#101880)

 

Для Win 9x
var
I:integer;
begin
i:=0;
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@i,0);
end;
или
Application.title:='';

Это имеено из этой книги. А вообще книга ДРЯНЬ. Сам себя ругаю, зачем купил.
Захотел письмо ему написать (поругаться), так все E-MAIL в книги
недействительные.
Номер выпуска : 2515
Возраст листа : 170 (дней)
Количество подписчиков : 381
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/100299
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 10 Mar 2004 16:51:04 +0300 (#100299)

 

Pcahr - это нультерменальные строки, для них нужно выделять память!
(new(PCHAR);)

InvalidateRect(handel,@rect,true);
Номер выпуска : 2514
Возраст листа : 170 (дней)
Количество подписчиков : 381
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/100289
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 10 Mar 2004 16:36:17 +0300 (#100289)

 

Здарова, Малышев Георгий!

10 марта 2004 г., среда, 18:36:17 (GMT+05:00), ты намылил:

Все равно адреса перекрываются.
получается:
10 мсред
среда
а:5ие@

а должно:
10 марта
среда
19:53:55

Угу, понятно. Только либо мерцает сильно, либо не работает - я так понял
перерисовываются либо все окна (handle = 0), либо окна не обращают на
InvalidateRect внимания.

PS: Все вопросы в силе.

Ответить   Томилов Александр Wed, 10 Mar 2004 23:20:18 +0500 (#100739)

 

==-==-=-Привета!10 марта 2004 г. (среда 20:20:18) Томилов (E-Mail: <astero***@p*****.ru>) в
мессаге <<[D5] GetDС + память + RePaint>> накрапал

4) Как указать окну на котором рисуешь то что пора перерисоваться?

Томилов> Угу, понятно. Только либо мерцает сильно, либо не работает - я так понял
Томилов> перерисовываются либо все окна (handle = 0), либо окна не обращают на
Томилов> InvalidateRect внимания.
Поствь вместо TRUE FALSE - будет меньше мигать ;-)
True перерисовывает ВСЕ окно с подложкой...

Ответить   -=BorMaN=- Thu, 11 Mar 2004 23:04:06 +0200 (#101087)

 

Здарова, -=BorMaN=-!

12 марта 2004 г., пятница, 02:04:06 (GMT+05:00), ты намылил:

Томилов>> Угу, понятно. Только либо мерцает сильно, либо не работает - я так
понял
Томилов>> перерисовываются либо все окна (handle = 0), либо окна не обращают
на
Томилов>> InvalidateRect внимания.

Я это уже пробовал - ноль эмоций.

--
Никогда больше не буду говорить афоризмами. Да, кстати, запишите мою последнюю
фразу

Ответить   Томилов Александр Fri, 12 Mar 2004 14:44:26 +0500 (#101746)

 

Здарова!

10 марта 2004 г., среда, 23:20:18 (GMT+05:00):

Этот вопрос решен - Surin_bp на личный кинул:

если

PS: Все остальные вопросы в силе - первое письмо лежит тут:
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99956

Ответить   Томилов Александр Thu, 11 Mar 2004 21:33:08 +0500 (#101125)