Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 618

/ вопрос решён /

Здравствуйте, эксперты!

BitBlt(Bm.Canvas.Handle,0,0,Bm.Width,Bm.Height,GetWindowDC(Wd_Child),0,0,SRCCOPY);

функция жрет паять, для меня это критично, так как функция используется много и постоянно...
функция вызывается таймером каждые 100мс

суть проги, задумал БОТа или автокликера, думал мне будет проще если СКРИН игры будет в моей проге, ну столкнулся с такой проблемой что описана выше
прога получает скрин игры оконной(из BlueStacks), дальше я уже в свое прооге кликаю куда нужно (BlueStacks в это время гденить за пределами экрана) и все мои действия автоматом передаются в осно игры, ну такая задумка)))

Приложение:
  1. procedure TForm1.Img_Load();
  2. var
  3. Bm : TBitmap;
  4. begin
  5. Bm := TBitmap.Create;
  6.  
  7. Bm.Width := RectWd_Child.Right - RectWd_Child.Left;
  8. Bm.Height := RectWd_Child.Bottom - RectWd_Child.Top;
  9. BitBlt(Bm.Canvas.Handle,0,0,Bm.Width,Bm.Height,GetWindowDC(Wd_Child),0,0,SRCCOPY);
  10. ReleaseDC(Self.Handle, GetWindowDC(Wd_Child));
  11. img1.Picture.Bitmap:=Bm;
  12. //Bm.Assign(nil);
  13. //Bm.Destroy;
  14. end;


Примечание #1 (19 марта 2016, 15:18):
BitBlt(Bm.Canvas.Handle,0,0,Bm.Width,Bm.Height,GetWindowDC(Wd_Child),0,0,SRCCOPY);

функция жрет паять, для меня это критично, так как функция используется много и постоянно.
в процессах видно как начиная с 950кб дожирает до 5500кб и все тут уже делфи пшит ошибку...
Примечание #2 (21 марта 2016, 15:07):
даже если сделать по миниималке, в две процедуры без повторяющихся приемов HDC и последующего его освобождения и без постоянного создания битмапа.

procedure TForm1.FormCreate(Sender: TObject);
begin
Wd:=FindWindow(nil, PChar(edt1.Text));
Wd_Child:=FindWindowEx(Wd, 0 ,nil,nil);
if Wd_Child <> 0 then begin lbl1.Caption:= 'ONN konnekt'
end else begin
lbl1.Caption:= 'OFF konnekt'
end;
GetWindowRect(Wd_Child,RectWd_Child);
Wd_Child_HDC:= GetDC(Wd);
Bm := TBitmap.Create;
timer1.Enabled:= true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetDC(Wd);

Bm.Width := RectWd_Child.Right - RectWd_Child.Left;
Bm.Height := RectWd_Child.Bottom - RectWd_Child.Top;
BitBlt(Bm.Canvas.Handle,0,0,Bm.Width,Bm.Height,Wd_Child_HDC,0,0,SRCCOPY);
img1.Picture.Bitmap:=Bm;

end;
Примечание #3 (21 марта 2016, 15:10):
хм, ну вот, поторопился и проворонил строку приема ХДС, убрал ее и все! утечки нет!!!!

Muxa2016.03 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Muxa2016.03 (статус: Посетитель)
Вопрос отправлен: 19 марта 2016, 15:14
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 22 марта 2016, 08:30; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 19 марта 2016, 15:25 [#1]:

Блин, откуда вы все берётесь?
Вот ты, например, как сюда попал?

ReleaseDC(Self.Handle, GetWindowDC(Wd_Child));
// сам-то понял, чо написал?

Тебе нужно просто получить скриншот окна в битмап и всё?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 19 марта 2016, 16:46 [#2]:

Какие ваши доказательства, что виновата BitBlt?
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 19 марта 2016, 16:54 [#3]:

мож перетащим все интернеты сюда?
хорошо тут, демократия, полный html, даже видево вставлять можно!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 19 марта 2016, 17:04 [#4]:

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 21 марта 2016, 03:48 [#5]:

докозательств нет, уже версия сменилась

ReleaseDC(Self.Handle, GetWindowDC(Wd_Child));
да мне нужно получать скриншот в битмап, постоянно, по таймеру сделал каждые 50мс
этот код был просто скопирован и переделан под себя.

новая инфа по утечке: пользую Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801
при установке на вин7 х64 ультимат материлась на какието проьлемы, ставил с совместимостью.

заметил что даже если таймер отключить и не вызывать процедуры вообще, при перетаскивании окна мойей проги или ресайзе количество утекших килобайт перерастает в МБ за секунду и приростает уже не КБ а МБ, заметил случайно.
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 21 марта 2016, 13:12 [#6]:

установил делфи10
пробовал скомпелировать,делфи выдавало ошибку с текстом вызванная процедура требует повышения, после закрытия делфи винда сказала: "следующий запуск будет в режиме совместимости"
включил делфу снова, скомпилировал прогу без пролем и все та-же байда с утечкой продолжилась...

21 марта 2016, 15:26: Статус вопроса изменён на решённый (изменил автор вопроса — Muxa2016.03): спасибо сказать некому.

min@y™

min@y™ (статус: Доктор наук), 21 марта 2016, 15:30 [#7]:

Цитата (Muxa2016.03):

спасибо сказать некому.

да тут и нету никого.
форум помер 3 года назад ишшо.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 21 марта 2016, 15:40 [#8]:

min@y™: Мы все умрём!
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 21 марта 2016, 16:14 [#9]:

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Muxa2016.03

Muxa2016.03 (статус: Посетитель), 22 марта 2016, 04:18 [#10]:

ты тоже никто? БОТ?
min@y™

min@y™ (статус: Доктор наук), 22 марта 2016, 08:30 [#11]:

Цитата (Muxa2016.03):

ты тоже никто? БОТ?

Да, я бот, я цыркач, и что же?!...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.