Program blokuje pracę komputera

0

Witam
Napisałem program, który głównie opiera się na czytaniu koloru danego piksela ekranu a następnie w zależności od tego wykonuje symulację kliknięcia lewego przycisku myszki w danym miejscu ekranu. Program działa prawie cały czas od włączenia gdyż w kodzie jest umieszczonych wiele pętli repeat (oprócz momentów gdzie umieściłem sleep). Do samego działania programu nie mam zastrzeżeń, problem pojawia się po mniej więcej 15 minutach działania programu, wtedy program blokuje całkowicie pracę komputera, właściwie jedyne co pozostaje to restart komputera. Wiecie jaka może być przyczyna takiego zachowania?
Pozdrawiam

0
Nuro251 napisał(a)

Wiecie jaka może być przyczyna takiego zachowania?

najprawdopodobniej źle napisany program...

0

Idź do wróżki. Albo wrzuć kod.

0

Jakieś wątki używasz albo coś?
Ile to coś zżera zasobów po 15 minutach?

0

Nie używam wątków. Jak sprawdzić zużycie zasobów? Kod całego programu jest trochę długi ale proszę :)

 unit program1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, mmsystem, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure OnCreate(Sender: TObject);
    procedure OnClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
  private
        procedure wm_HOTKEY(var Msg:TMessage);message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1; Koniec: Boolean;

implementation

uses wininet, Kasyno;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,r,p,v,u,n,i,q,l:integer;
    aa0,s,bb0,rr0,bb1,bb2,bb3,bb4,bb5,bb6,bb7,bb8,bb9,rr1,rr2,rr3,rr4,rr5,rr6,rr7,rr8,rr9:string;
    a0,ko,r0,b0,r1,r2,r3,r4,r5,r6,r7,r8,r9,b1,b2,b3,b4,b5,b6,b7,b8,b9:TColor;
    stw,wyg,zli:real;
    FDateTime : TDateTime;
    min1,Hour, Min, Sec, MilSec, Hour2, Min2, Sec2, MilSec2,result,g,m,Result2,o: word;
    Flags: DWORD;

begin
SetCursorPos(587, 1058);
mouse_event(MOUSEEVENTF_LEFTDOWN, 587, 1058, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 587, 1058, 0, 0); 
 repeat
  sleep(500);
  ko := GetPixel(GetWindowDC(GetDesktopWindow),1436,65);
  s:=inttostr(getrvalue(ko)) + inttostr(getgvalue(ko)) + inttostr(getbvalue(ko));
 until s='250253255';
SetCursorPos(1436,65);
mouse_event(MOUSEEVENTF_LEFTDOWN, 1436,65, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 1436,65, 0, 0); 
sleep(1000);
repeat
  sleep(500);
  ko := GetPixel(GetWindowDC(GetDesktopWindow),358,266);
  s:=inttostr(getrvalue(ko)) + inttostr(getgvalue(ko)) + inttostr(getbvalue(ko));
until s='23014231';
ko := GetPixel(GetWindowDC(GetDesktopWindow),1041,232);
s:=inttostr(getrvalue(ko)) + inttostr(getgvalue(ko)) + inttostr(getbvalue(ko));
if s='255255255' then
  begin
  SetCursorPos(1041,232);
  mouse_event(MOUSEEVENTF_LEFTDOWN, 1041,232, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 1041,232, 0, 0); 
  SetCursorPos(1091,232);
  mouse_event(MOUSEEVENTF_LEFTDOWN, 1091,232, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 1091,232, 0, 0); 
  end;
repeat
  sleep(500);
  ko := GetPixel(GetWindowDC(GetDesktopWindow),334,1005);
  s:=inttostr(getrvalue(ko)) + inttostr(getgvalue(ko)) + inttostr(getbvalue(ko));
until s='5190160';
sleep(250);

SetCursorPos(334,1005);
sleep(1000);
mouse_event(MOUSEEVENTF_LEFTDOWN, 334,1005, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 334,1005, 0, 0); 

stw:=strtofloat(edit1.text);
wyg:=0;

repeat
  sleep(500);
  ko := GetPixel(GetWindowDC(GetDesktopWindow),937,820);
  s:=inttostr(getrvalue(ko)) + inttostr(getgvalue(ko)) + inttostr(getbvalue(ko));
until s='1258251'; 
sleep(1500);
     DecodeTime(now,Hour, Min, Sec, MilSec);
     Result := 3600*Hour + 60 * Min + Sec;
repeat
  repeat
   a0 := GetPixel(GetWindowDC(GetDesktopWindow),967,757);
   aa0:=inttostr(getrvalue(a0)) + inttostr(getgvalue(a0)) + inttostr(getbvalue(a0));
   q:=0; p:=0;
   if (aa0='000') or  (aa0='111111') then begin q:=1; p:=1; end;
   if q=0 then
      begin
      SetCursorPos(930,920);
      mouse_event(MOUSEEVENTF_LEFTDOWN, 930,920, 0, 0);
      mouse_event(MOUSEEVENTF_LEFTUP, 930,920, 0, 0); 
      repeat
        r0 := GetPixel(GetWindowDC(GetDesktopWindow),664,915);
        rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
        c:=0; if rr0='255255255' then c:=1;
      until c=1 ;
      sleep(1500);
      repeat
        b1 := GetPixel(GetWindowDC(GetDesktopWindow),576,727);
        bb1:=inttostr(getrvalue(b1)) + inttostr(getgvalue(b1)) + inttostr(getbvalue(b1));
        r1 := GetPixel(GetWindowDC(GetDesktopWindow),590,727);
        rr1:=inttostr(getrvalue(r1)) + inttostr(getgvalue(r1)) + inttostr(getbvalue(r1));
        c:=0; if (bb1='20620660') or (rr1='2066060') or (rr1='6020660') then c:=1;
      until c=1;
      b2 := GetPixel(GetWindowDC(GetDesktopWindow),576,743);
      bb2:=inttostr(getrvalue(b2)) + inttostr(getgvalue(b2)) + inttostr(getbvalue(b2));
      r2 := GetPixel(GetWindowDC(GetDesktopWindow),590,743);
      rr2:=inttostr(getrvalue(r2)) + inttostr(getgvalue(r2)) + inttostr(getbvalue(r2));
      b3 := GetPixel(GetWindowDC(GetDesktopWindow),576,758);
      bb3:=inttostr(getrvalue(b3)) + inttostr(getgvalue(b3)) + inttostr(getbvalue(b3));
      r3 := GetPixel(GetWindowDC(GetDesktopWindow),590,758);
      rr3:=inttostr(getrvalue(r3)) + inttostr(getgvalue(r3)) + inttostr(getbvalue(r3));
      b4 := GetPixel(GetWindowDC(GetDesktopWindow),576,774);
      bb4:=inttostr(getrvalue(b4)) + inttostr(getgvalue(b4)) + inttostr(getbvalue(b4));
      r4 := GetPixel(GetWindowDC(GetDesktopWindow),590,774);
      rr4:=inttostr(getrvalue(r4)) + inttostr(getgvalue(r4)) + inttostr(getbvalue(r4));
      b5 := GetPixel(GetWindowDC(GetDesktopWindow),576,790);
      bb5:=inttostr(getrvalue(b5)) + inttostr(getgvalue(b5)) + inttostr(getbvalue(b5));
      r5 := GetPixel(GetWindowDC(GetDesktopWindow),590,790);
      rr5:=inttostr(getrvalue(r5)) + inttostr(getgvalue(r5)) + inttostr(getbvalue(r5));
      b6 := GetPixel(GetWindowDC(GetDesktopWindow),576,805);
      bb6:=inttostr(getrvalue(b6)) + inttostr(getgvalue(b6)) + inttostr(getbvalue(b6));
      r6 := GetPixel(GetWindowDC(GetDesktopWindow),590,805);
      rr6:=inttostr(getrvalue(r6)) + inttostr(getgvalue(r6)) + inttostr(getbvalue(r6));
      b7 := GetPixel(GetWindowDC(GetDesktopWindow),576,821);
      bb7:=inttostr(getrvalue(b7)) + inttostr(getgvalue(b7)) + inttostr(getbvalue(b7));
      r7 := GetPixel(GetWindowDC(GetDesktopWindow),590,821);
      rr7:=inttostr(getrvalue(r7)) + inttostr(getgvalue(r7)) + inttostr(getbvalue(r7));
      b8 := GetPixel(GetWindowDC(GetDesktopWindow),576,836);
      bb8:=inttostr(getrvalue(b8)) + inttostr(getgvalue(b8)) + inttostr(getbvalue(b8));
      r8 := GetPixel(GetWindowDC(GetDesktopWindow),590,836);
      rr8:=inttostr(getrvalue(r8)) + inttostr(getgvalue(r8)) + inttostr(getbvalue(r8));
      b9 := GetPixel(GetWindowDC(GetDesktopWindow),576,852);
      bb9:=inttostr(getrvalue(b9)) + inttostr(getgvalue(b9)) + inttostr(getbvalue(b9));
      r9 := GetPixel(GetWindowDC(GetDesktopWindow),590,852);
      rr9:=inttostr(getrvalue(r9)) + inttostr(getgvalue(r9)) + inttostr(getbvalue(r9));
      b:=0; r:=0;

      if (bb1='20620660') or (rr1='6020660') then
      if (bb2='25525543') or (rr2='1725517') then
      if (bb3='19719726') or (rr3='1219412')then
      if (bb4='25525522') or (rr4='1925519')then
      if (bb5='25525528') or (rr5='2125521')then
      if (bb6='25525524') or (rr6='2125521')then
      if (bb7='25525527') or (rr7='2425524')then
      if (bb8='25525530') or (rr8='2725527')then
      //if (bb9='25525530') or (rr9='2725527')then
      b:=1;

      if (rr1='2066060') or (rr1='6020660') then
      if (rr2='2551717') or (rr2='1725517') then
      if (rr3='1941212') or (rr3='1219412') then
      if (rr4='2551919') or (rr4='1925519') then
      if (rr5='2552121') or (rr5='2125521') then
      if (rr6='2552121') or (rr6='2125521') then
      if (rr7='2552424') or (rr7='2425524') then
      if (rr8='2552727') or (rr8='2725527') then
      //if (rr9='2552727') or (rr9='2725527') then
      r:=1;

      end else p:=1;

      DecodeTime(now,Hour2, Min2, Sec2, MilSec2);
      Result2 := 3600*Hour2 + 60 * Min2 + Sec2;
      if  result2>result then o:=result2-result;
      if result>result2  then o:=86400-(result-result2);

      if o>780 then p:=1;
      SetCursorPos(888,763);
      if (b=1) or (r=1) then p:=1;
    until p=1; 


  q:=0;
  if o>780 then q:=1;

  if q=0 then
  if rr8='2552727' then
      begin
        n:=1;
        repeat
          n:=2*n;
          for i := 1 to n do
            begin
              sleep(500);
              SetCursorPos(1040,767);
              mouse_event(MOUSEEVENTF_LEFTDOWN, 1040,767, 0, 0);
              mouse_event(MOUSEEVENTF_LEFTUP, 1040,767, 0, 0); 
            end;
          SetCursorPos(930,920);
          mouse_event(MOUSEEVENTF_LEFTDOWN, 930,920, 0, 0);
          mouse_event(MOUSEEVENTF_LEFTUP, 930,920, 0, 0); 
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),664,915);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            c:=0; if rr0='255255255' then c:=1; 
          until c=1 ;
          sleep(1500);
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),590,727);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            b0 := GetPixel(GetWindowDC(GetDesktopWindow),576,727);
            bb0:=inttostr(getrvalue(b0)) + inttostr(getgvalue(b0)) + inttostr(getbvalue(b0));
            c:=0; if (bb0='20620660') or (rr0='2066060') or (rr0='6020660') then c:=1;
          until c=1;
          v:=0;
          if bb0='20620660' then begin wyg:=wyg+1; v:=1; q:=1; end;
          SetCursorPos(888,763);
        until v=1;
        SetCursorPos(1100,920);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 1100,920, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 1100,920, 0, 0); 
      end;

   if q=0 then
    if bb8='25525530' then 
      begin
        n:=1;
        repeat
          n:=2*n;
          for i := 1 to n do
            begin
              sleep(500);
              SetCursorPos(959,719);
              mouse_event(MOUSEEVENTF_LEFTDOWN, 959,719, 0, 0);
              mouse_event(MOUSEEVENTF_LEFTUP, 959,719, 0, 0); 
            end;
          SetCursorPos(930,920);
          mouse_event(MOUSEEVENTF_LEFTDOWN, 930,920, 0, 0);
          mouse_event(MOUSEEVENTF_LEFTUP, 930,920, 0, 0); 
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),664,915);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            c:=0; if rr0='255255255' then c:=1;
          until c=1 ;
          sleep(1500);
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),590,727);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            b0 := GetPixel(GetWindowDC(GetDesktopWindow),576,727);
            bb0:=inttostr(getrvalue(b0)) + inttostr(getgvalue(b0)) + inttostr(getbvalue(b0));
            c:=0; if (bb0='20620660') or (rr0='2066060') or (rr0='6020660') then c:=1;
          until c=1;
          u:=0;
          if rr0='2066060' then begin wyg:=wyg+1; u:=1; q:=1; end;
          SetCursorPos(888,763);
      until u=1;
      SetCursorPos(1100,920);
      mouse_event(MOUSEEVENTF_LEFTDOWN, 1100,920, 0, 0);
      mouse_event(MOUSEEVENTF_LEFTUP, 1100,920, 0, 0); 
    end;

    if q=0 then
      if rr8='2725527' then 
        if rr7='2552424' then 
        begin
        n:=1;
        repeat
          n:=2*n;
          for i := 1 to n do
            begin
              sleep(500);
              SetCursorPos(1040,767);
              mouse_event(MOUSEEVENTF_LEFTDOWN, 1040,767, 0, 0);
              mouse_event(MOUSEEVENTF_LEFTUP, 1040,767, 0, 0); 
            end;
          SetCursorPos(930,920);
          mouse_event(MOUSEEVENTF_LEFTDOWN, 930,920, 0, 0);
          mouse_event(MOUSEEVENTF_LEFTUP, 930,920, 0, 0);
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),664,915);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            c:=0; if rr0='255255255' then c:=1; 
          until c=1 ;
          sleep(1500);
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),590,727);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            b0 := GetPixel(GetWindowDC(GetDesktopWindow),576,727);
            bb0:=inttostr(getrvalue(b0)) + inttostr(getgvalue(b0)) + inttostr(getbvalue(b0));
            c:=0; if (bb0='20620660') or (rr0='2066060') or (rr0='6020660') then c:=1;
          until c=1;
          v:=0;
          if bb0='20620660' then begin wyg:=wyg+1; v:=1; q:=1; end;
          SetCursorPos(888,763);
      until v=1;
      SetCursorPos(1250,890);
      mouse_event(MOUSEEVENTF_LEFTDOWN, 1250,890, 0, 0);
      mouse_event(MOUSEEVENTF_LEFTUP, 1250,890, 0, 0); 
    end
    else
    if bb7='25525527' then 
      begin
        n:=1;
        repeat
          n:=2*n;
          for i := 1 to n do
            begin
              sleep(500);
              SetCursorPos(959,719);
              mouse_event(MOUSEEVENTF_LEFTDOWN, 959,719, 0, 0);
              mouse_event(MOUSEEVENTF_LEFTUP, 959,719, 0, 0); 
            end;
          SetCursorPos(930,920);
          mouse_event(MOUSEEVENTF_LEFTDOWN, 930,920, 0, 0);
          mouse_event(MOUSEEVENTF_LEFTUP, 930,920, 0, 0); 
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),664,915);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            c:=0; if rr0='255255255' then c:=1;
          until c=1 ;
          sleep(1500);
          repeat
            r0 := GetPixel(GetWindowDC(GetDesktopWindow),590,727);
            rr0:=inttostr(getrvalue(r0)) + inttostr(getgvalue(r0)) + inttostr(getbvalue(r0));
            b0 := GetPixel(GetWindowDC(GetDesktopWindow),576,727);
            bb0:=inttostr(getrvalue(b0)) + inttostr(getgvalue(b0)) + inttostr(getbvalue(b0));
            c:=0; if (bb0='20620660') or (rr0='2066060') or (rr0='6020660') then c:=1;
          until c=1;
          u:=0;
          if rr0='2066060' then begin wyg:=wyg+1; u:=1; q:=1; end;
          SetCursorPos(888,763);
      until u=1;
      SetCursorPos(1250,890);
      mouse_event(MOUSEEVENTF_LEFTDOWN, 1250,890, 0, 0);
      mouse_event(MOUSEEVENTF_LEFTUP, 1250,890, 0, 0); 
    end;
  Application.ProcessMessages;

  zli:=wyg*0.2;
  label8.caption:=FormatFloat('0.0',zli);
  if zli>stw then koniec:=true;
  if zli=stw then koniec:=true;

until q=1;

  repeat
     Flags := INTERNET_CONNECTION_MODEM or INTERNET_CONNECTION_LAN or
              INTERNET_CONNECTION_PROXY or INTERNET_CONNECTION_MODEM_BUSY;
     l:=0; if InternetGetConnectedState(@Flags, 0) then l:=1;

  until l=1;

  PlaySound('sawanna.wav', 0, SND_FILENAME);


end;


procedure TForm1.Button2Click(Sender: TObject);
    begin
        close
    end;

procedure TForm1.OnClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Form1.Handle, $0001);
end;

procedure TForm1.OnCreate(Sender: TObject);
begin
  BorderStyle:=bsSingle; //blokada rozciągania formy
  BorderIcons:=[biSystemMenu,biMinimize];  // nie ma biMaximize
  RegisterHotKey(Form1.Handle, $0001, MOD_CONTROL,  VK_TAB);
end;


procedure TForm1.Timer1Timer(Sender: TObject);
    begin
        form2.show;
        timer1.enabled:=false;
    end;

procedure TForm1.wm_HOTKEY(var Msg: TMessage);
  begin
    if Msg.WParam = $0001 then
    begin
      koniec:=true;
      PlaySound('sawanna.wav', 0, SND_FILENAME);
      Application.Restore;
    end;
  end;

end.
0

No Panowie wybaczcie, może i nie jestem doświadczonym programistą ale jak inaczej napisać program obsługujący pewną grę internetową, wykonujący kliknięcia w danym miejscu przeglądarki, które są uzależnione od wczytywanej strony (które program rozpoznaje za pomocą koloru danego piksela) ?

0

jak inaczej napisać program

  1. nie tworzyć miliarda zmiennych o nic nie mówiących nazwach:
var a,b,c,d,r,p,v,u,n,i,q,l:integer;
    aa0,s,bb0,rr0,bb1,bb2,bb3,bb4,bb5,bb6,bb7,bb8,bb9,rr1,rr2,rr3,rr4,rr5,rr6,rr7,rr8,rr9:string;
    a0,ko,r0,b0,r1,r2,r3,r4,r5,r6,r7,r8,r9,b1,b2,b3,b4,b5,b6,b7,b8,b9:TColor;

i co to jest b6?

  1. nie używać tylu magicznych liczb i grupować powtarzający się kod w funkcje i procedury:
mouse_event(MOUSEEVENTF_LEFTDOWN, 587, 1058, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 587, 1058, 0, 0);

co to jest 587 i dlaczego tyle?

  1. jak wyżej — jeśli więcej niż trzy razy piszesz to samo
      b2 := GetPixel(GetWindowDC(GetDesktopWindow),576,743);
      bb2:=inttostr(getrvalue(b2)) + inttostr(getgvalue(b2)) + inttostr(getbvalue(b2));
      r2 := GetPixel(GetWindowDC(GetDesktopWindow),590,743);
      rr2:=inttostr(getrvalue(r2)) + inttostr(getgvalue(r2)) + inttostr(getbvalue(r2));

utwórz osobną procedurę i ją wykorzystuj.

  1. wężowidło if
</ol>
-ów z jeszcze bardziej magicznymi wartościami.

> 
```delphi
      if (bb1='20620660') or (rr1='6020660') then
      if (bb2='25525543') or (rr2='1725517') then

aż się prosi o utworzenie jakiejś pętli. i co to jest 6020660 i dlaczego tyle?

nikt oprócz ciebie nie będzie wiedział o co tutaj chodzi</li> </ol>
   if q=0 then
    if bb8='25525530' then 
      begin
        n:=1;
        repeat
          n:=2*n;
          for i := 1 to n do
            begin

a i ty zapomnisz jeśli spojrzysz na ten kod za pół roku.

Nie chodzi o to, że twój kod nie działa (nie wiem czy działa) ale jest napisany bardzo nieczytelnie.

0
  1. Zmiennych jest tyle bo tyle ich potrzeba (naprawdę), ja wiem, która za co odpowiada (w tym b6) :P
  2. To nie są magiczne liczby tylko współrzędne ekranu w pikselach, czyli miejsce, w którym ma być wykonana symulacja kliknięcia lewego przycisku myszy. Z tym grupowaniem w procedury faktycznie masz rację, muszę nad tym popracować, aczkolwiek myślisz, że to dużo pomoże?
  3. Przyznam wężowidło if-ów jest dość spore aczkolwiek nie wyobrażam sobie innego sposobu by rozwiązać daną kwestie. Te jeszcze bardziej magiczne liczby to numery odpowiadające kolorom. 6020660 to odcień czerwonego :P
  4. Nikt nie musi rozumieć co ten program tak naprawdę robi i wnikać w niego dokładnie gdyż napisałem na początku, że do działania programu nie mam zastrzeżeń tzn. działa tak jak to sobie wcześniej wymyśliłem. Gdyż jestem początkującym w kwestii programowania moje pytanie było dlaczego program blokuje pracę komputera. Teraz już wiem, że kod jest troszkę chaotyczny :) ale oprócz rozwiązania w stylu zastosowania procedur zaproponowanych przez Ciebie nie mam żadnych innych pomysłów aby zmienić ten kod tak aby wszystko było ok.
0

chodzi raczej o to, żeby zamiast takich zmiennych stosować tablice, żeby zamiast dziwnych "magicznych" liczb opisać je jakoś, np w postaci zmiennej TPoint, TColor tak samo. A to ze TERAZ wiesz co się kryje pod b6, nie znaczy ze za pół roku też będziesz wiedział. Uwierz, jak sie jakiś projekt odstawi na jakiś czas na półkę, a potem się człowiek zabierze do niego z powrotem, to zanim człowiek dojdzie do tego co która taka "dziwna" zmienna oznacza to mija sporo czasu...

0

wywolujesz to z milion razy w swoim programie..:
GetPixel(GetWindowDC(GetDesktopWindow),664,915);
nie uwazasz ze bardziej optymalne byloby uzycie globalnej zmiennej zamiast za kazdym razem wywolywac GetWindowDC(GetDesktopWindow)?
wydaje mi sie ze juz samo to moze niepotrzebnie obciazac system.

co do samego problemu...
czy pamiec uzywana przez Twoj program wzrasta?

poza tym:
nie wiem dokladnie z jaka prekoscia dziala GetPixel(), ale moim zdaniem powinienes to rozwiazac inaczej (przynajmniej ja bym tak zrobil):
pobierz do TBitmap jakis wycinek ekranu, a potem uzyj scanline ktory jest pewnie wiele pszybszy od GetPixel().

0
cimak napisał(a)

wywolujesz to z milion razy w swoim programie..:
GetPixel(GetWindowDC(GetDesktopWindow),664,915);
nie uwazasz ze bardziej optymalne byloby uzycie globalnej zmiennej zamiast za kazdym razem wywolywac GetWindowDC(GetDesktopWindow)?
wydaje mi sie ze juz samo to moze niepotrzebnie obciazac system.
.

No właśnie a nigdzie nie ma ReleaseDC a więc to chyba będzie przyczyna.

0
  1. Zmiennych jest tyle bo tyle ich potrzeba (naprawdę)
    nieprawda.
  1. To nie są magiczne liczby tylko współrzędne ekranu w pikselach, czyli miejsce, w którym ma być wykonana symulacja kliknięcia lewego przycisku myszy.
    należy je trzymać pogrupowane w rekordach, tablicach, ponazywane, ponumerowane.
  1. Przyznam wężowidło if-ów jest dość spore aczkolwiek nie wyobrażam sobie innego sposobu by rozwiązać daną kwestie.
    tablica i szukanie wartości w tablicy.

Te jeszcze bardziej magiczne liczby to numery odpowiadające kolorom. 6020660 to odcień czerwonego
więc powinny być utworzone stałe, o sensownych nazwach.

Gdyż jestem początkującym w kwestii programowania moje pytanie było dlaczego program blokuje pracę komputera. Teraz już wiem, że kod jest troszkę chaotyczny
Pisać dobrze należy się uczyć od razu ;-)

ale oprócz rozwiązania w stylu zastosowania procedur zaproponowanych przez Ciebie nie mam żadnych innych pomysłów aby zmienić ten kod tak aby wszystko było ok.
Mało kto będzie chętny się zagłębiać w taki kod, by ci pomóc.

0

Mimo, że kod nie jest profesjonalny to problem leżał w braku zastosowania ReleaseDC. Na razie nie mam za bardzo czasu na dłuższe testowanie, aczkolwiek program działał 45 minut i nie zablokował pracy komputera. Zostawię go na noc i w tedy się ostatecznie okaże. Dzięki kAzek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1