Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2009, 02:50   #1
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию Проблема. программа на цикле начинает тупить

Программа делает следующие:
запускается таймер...
по таймеру (OnTimer) программа лезит в другую! программу и отсылает ей команды типа:
Код:
sendmessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p4.x,i));
sendmessage(HWindow, WM_LBUTTONDBLCLK, 0, MakeLparam(p4.x,i));
sendmessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p4.x,i));
ПРИЧЕМ! программа находит определенный пиксель по цвету и тыкает в него.

все работает некотрое время, но после 5+ циклов она начинает тупить и больше этот пиксель не видит!

как решить вопрос?
Василий вне форума Ответить с цитированием
Старый 06.01.2009, 09:48   #2
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Юзай не sendMesage а postMessage! объявлены они почти одинаково. Разница только в том, что sendMessage ждёт ответа. И поэтому в цикле тупит!
Altera вне форума Ответить с цитированием
Старый 06.01.2009, 16:52   #3
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию

не помогло!
не знаю что и делать...
Василий вне форума Ответить с цитированием
Старый 07.01.2009, 09:40   #4
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию

Ребята на помощь!
обяъсню еще раз проблему:
подключаюсь своей прогой к другой, считываю DC. нахожу нужный пиксель по цвету и тыкаю на него. и там в цикле.
через некоторое время (на цикле 3-7) происходит сбой - пиксель больше не находит, хотя он точно! есть... В чем может быть проблема?

DC считывать пробовал как экрана DC(0) так и приложения - одна картина.
Василий вне форума Ответить с цитированием
Старый 07.01.2009, 10:08   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Может быть дали бы код юнита?
Altera вне форума Ответить с цитированием
Старый 07.01.2009, 10:53   #6
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию

выкладывал код.
нашел косяки в коде - правлю...
(не знаю как удалить сообщение)

Последний раз редактировалось Василий; 07.01.2009 в 12:02.
Василий вне форума Ответить с цитированием
Старый 10.01.2009, 07:51   #7
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию

все проверял. проводил тесты. заменил на postMessage

программа работает по циклу таймера. от стади к стадии и по кругу.
программа начинает тормозить при несколькиз прогонах и перестает "видеть" пиксели! если цикл остановить программа все еще тормозит....
как решить проблему?

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin

case Timer1.Tag of
0:begin
Timer1.Tag:=1;
timei:=0;
end;

1:begin // обновить список
postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p2.x,p2.y));
postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p2.x,p2.y));
Timer1.Tag:=2;
end;

2:begin // сканирование списка и щелчек мышки
for i:=(122) to (469) do
begin
if form1.SpeedButton1.Down=true then
  begin
  if (c1[1]=GetPixel(GetDC(HWindow),p4.x-2,i))and(c1[2]=GetPixel(GetDC(HWindow),p4.x,i))and(c1[3]=GetPixel(GetDC(HWindow),p4.x+2,i)) then
  begin
  ImgMoney(1);
  postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p4.x,i));
  postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p4.x,i));
  sleep(paus_buy);
  postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p5.x,p5.y));
  postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p5.x,p5.y));
  ImgMoney(2);
  if money=true then
    t1:=t1+1;
  end;
  end;
end;
if (t1>=r1) then
  begin
  Timer1.Enabled:=false;
  showmessage('конец!');
  end;
Timer1.Tag:=3;

GetKeyboardState(State);
if (State[VK_CAPITAL] = 1) then
  begin
  Timer1.Enabled:=false;
  showmessage('прерывание');
  end
end;

3:begin // проверка скролла (по цвету пикселя) и прокрутка его вниз
if (compare(colortostring(GetPixel(GetDC(HWindow),p1.x,p1.y)))=false) then
begin//IF
postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p3.x,p3.y));
sleep(paus_scroll);
postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p3.x,p3.y));
end;
Timer1.Tag:=4;
GetKeyboardState(State);
if (State[VK_CAPITAL] = 1) then
  begin
  Timer1.Enabled:=false;
  showmessage('прерывание');
  end   
end;

4:begin // сканирование списка и щелчек мышки (как в пункте 2)
timei:=timei+1;
if timei>=10 then begin timer1.Enabled:=false; showmessage('end time'); end;

for i:=(122) to (469) do
begin
if form1.SpeedButton1.Down=true then
  begin
  if (c1[1]=GetPixel(GetDC(HWindow),p4.x-2,i))and(c1[2]=GetPixel(GetDC(HWindow),p4.x,i))and(c1[3]=GetPixel(GetDC(HWindow),p4.x+2,i)) then
  begin
  ImgMoney(1);
  postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p4.x,i));
  postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p4.x,i));
  sleep(paus_buy);
  postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p5.x,p5.y));
  postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p5.x,p5.y));
  ImgMoney(2);
  if money=true then
    t1:=t1+1;
  end;
  end;
end;
if (t1>=r1) then
  begin
  Timer1.Enabled:=false;
  showmessage('конец!');
  end;
Timer1.Tag:=1;

GetKeyboardState(State);
if (State[VK_CAPITAL] = 1) then
  begin
  Timer1.Enabled:=false;
  showmessage('прерывание');
  end
end;

5:begin
Timer1.Enabled:=false;
showmessage('прерывание2');
end;
else
begin
Timer1.Tag:=0;
end;
end;//case
end;
Василий вне форума Ответить с цитированием
Старый 10.01.2009, 09:09   #8
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Для начала попробуй не showMessage использовать, а с кажем в caption формы значения записывать.
Altera вне форума Ответить с цитированием
Старый 10.01.2009, 09:17   #9
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию

2Altera Спасибо за то что уделяешь этой теме время! (для меня это важно)
showMessage я использую в экстренных случаях =) и по окончанию работы программы. думаю что не в нем проблема! ведь эту функцию можно и убрать.
Василий вне форума Ответить с цитированием
Старый 10.01.2009, 10:41   #10
Василий
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 34
По умолчанию

моя программа отправляет сигналы в программу "ИКС"

сделал экспереминтальное приложение (программу на делфи, которая имитирует программу "ИКС")

так эта имитация программу "икс" в обще НЕ реагирает на команды моей программы О_О

например на это:
Код:
postMessage(HWindow, WM_LBUTTONDOWN, 0, MakeLparam(p2.x,p2.y));
postMessage(HWindow, WM_LBUTTONUP, 0, MakeLparam(p2.x,p2.y));
почему так???

PS координаты p2 заданы верно!!!
Василий вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему со временем системный блок начинает шуметь rpy3uH Компьютерное железо 9 25.12.2008 04:48
при установке любой игры комп в середине установки начинает виснуть блик Свободное общение 8 03.12.2008 18:31
Color в цикле Roof Общие вопросы Delphi 8 06.08.2008 15:07
Пытаюсь выйти в инет с компа через мобилу, в момент соединения комп начинает виснуть Sava Свободное общение 5 29.04.2008 18:02