SRL Archive - Suggestions

GetRealMousePos(var x, y: Integer);


Gu3st...

2010-05-18 15:59:26

The current GetMousePos() does not work if you are using SMART… In SRL, it get's replaced with SmartGetMousePos().

Calling GetRealMousePos() works:
{$i SRL/SRL.simba}

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
end;

var
X, Y : Integer;

begin
GetRealMousePos(X, Y);
WriteLn([X, Y]);
end.

mastaraymond

2010-05-18 17:55:13

From: Zyt3x
The current GetMousePos() does not work if you are using SMART… In SRL, it get's replaced with SmartGetMousePos(), but even if you comment out the procedure in smart.scar, it still wont work.

Comment out GetMousePos() in smart.scar and then try running this script:
{$DEFINE SMART}
{$i SRL/SRL.scar}
var M : TPoint;
begin
Smart_Server := 32;
Smart_Signed := True;
SetupSRL;
while True do
begin
ClearDebug;
GetMousePos(M.Y, M.Y);
WriteLn('Real: ' + ToStr(M));
SmartGetMousePos(M.X, M.Y);
WriteLn('Smart: ' + ToStr(M));
Wait(50);
end;
end.
As you can see. When you move the mouse, the y-axis are correct, but the x-axis stays the same (the x will always be the same as smart's mouse).

What I want is that you 'fix' GetMousePos (make it work with smart) or make a new one that will give the current cursor position which aren't to be used in smart.scar :)

Why would you want to know the position of the 'real' mouse when your target is Smart? None of the input/output/client functions would work with the 'real' input/output/windows if you know what I mean?

Gu3st...

2010-05-22 21:22:19

From: mastaraymond
Why would you want to know the position of the 'real' mouse when your target is Smart? None of the input/output/client functions would work with the 'real' input/output/windows if you know what I mean?
Yeah, I understand that, but I want to make a 'form' on the smart canvas and let the user move the mouse over buttons to show text and such :p
Sort of like this:

Sex

2010-05-22 23:02:31

From: Zyt3x
Yeah, I understand that, but I want to make a 'form' on the smart canvas and let the user move the mouse over buttons to show text and such :p
Sort of like this:

Like RSBot?

i luffs yeww

2010-05-22 23:08:07

^ Why would it matter? :p

Gu3st...

2010-05-22 23:52:59

From: Sex
Like RSBot?
Maybe? Idk.. I only use SRL

Sir R. M8gic1an

2011-11-19 07:18:54

Your code is wrong

{$DEFINE SMART}
{$i SRL/SRL.scar}
var M : TPoint;
begin
Smart_Server := 32;
Smart_Signed := True;
SetupSRL;
while True do
begin
ClearDebug;
GetMousePos(M.Y, M.Y);
WriteLn('Real: ' + ToStr(M));
SmartGetMousePos(M.X, M.Y);
WriteLn('Smart: ' + ToStr(M));
Wait(50);
end;
end.


…. M.Y, M.Y ? its supposed to be M.X, M.Y

-RM

YoHoJo

2011-11-19 07:24:33

Can't flippin WAIT to see that.
Advanced/RealTime/Awesome/Canvas progress reports are THE SHIT

Sir R. M8gic1an

2011-11-19 07:37:26

From: YoHoJo
Can't flippin WAIT to see that.
Advanced/RealTime/Awesome/Canvas progress reports are THE SHIT


Couldn't agree more, this will make SMART sexy as hell.

-RM

euphemism

2011-11-19 10:01:45

I was wondering if this was possible. Could we also detect the mouse buttons?

mastaraymond

2011-11-19 10:04:52

Just temporarily switch targets?

Gu3st...

2011-11-19 10:16:52

From: Sir R. M8gic1an
Your code is wrong

{$DEFINE SMART}
{$i SRL/SRL.scar}
var M : TPoint;
begin
Smart_Server := 32;
Smart_Signed := True;
SetupSRL;
while True do
begin
ClearDebug;
GetMousePos(M.Y, M.Y);
WriteLn('Real: ' + ToStr(M));
SmartGetMousePos(M.X, M.Y);
WriteLn('Smart: ' + ToStr(M));
Wait(50);
end;
end.


…. M.Y, M.Y ? its supposed to be M.X, M.Y

-RM
Woah dude :o so that's why only the Y axis were working! :p

YoHoJo

2011-12-04 07:16:57

Bumb, get it working right Zyt3x?
I'd LOVE to see a GUI/Progress report like that!

Mark

2011-12-04 07:23:19

i've been wanting something like this to happen has been mentioned before but someone asked about mouse clicks like euphemism said

Wizzup?

2011-12-04 07:24:09

From: mastaraymond
Just temporarily switch targets?


This.



var kmtarget, itarget, x, y: integer;

begin
kmtarget := GetKeyMouseTarget;
itarget := GetImageTarget;
SetDesktopAsClient;
GetMousePos(x, y);
writeln(format('(%d, %d)', [x, y]));
SetKeyMouseTarget(kmtarget);
SetImageTarget(itarget);
movemouse(0,0);
GetMousePos(x, y);
writeln(format('(%d, %d)', [x, y]));
end.

Should work.

Gu3st...

2011-12-04 07:41:36

From: Wizzup?
This.



var kmtarget, itarget, x, y: integer;

begin
kmtarget := GetKeyMouseTarget;
itarget := GetImageTarget;
SetDesktopAsClient;
GetMousePos(x, y);
writeln(format('(%d, %d)', [x, y]));
SetKeyMouseTarget(kmtarget);
SetImageTarget(itarget);
movemouse(0,0);
GetMousePos(x, y);
writeln(format('(%d, %d)', [x, y]));
end.

Should work.
Awesome.

We could make a GetRealMousePos(); and add it to smart.simba in /misc/

Sir R. M8gic1an

2011-12-04 07:51:22

Actually with desktop as client the x,y might be different with each user… and the other method was already working…

~RM

Wizzup?

2011-12-04 08:01:04

From: Sir R. M8gic1an
Actually with desktop as client the x,y might be different with each user… and the other method was already working…

~RM


I also made GetClientPosition. But that will probably not work on smart. So if you want the mouse position relative TO SMART, you'll need to do some find window tricks (Use GetProcesses in Simba, example here: http://docs.wizzup.org/simba/scriptref/window.html) and instead of SetDesktopAsClient, use SetTarget(handle of the smart window) and then call GetMousePosition.

Gu3st...

2011-12-04 08:08:11

From: Sir R. M8gic1an
Actually with desktop as client the x,y might be different with each user… and the other method was already working…

~RM
Which one? The one in OP?
That one works the same way; GetMousePos() will get the mouse position with desktop as the client

Wizzup?

2011-12-04 08:23:02

From: Zyt3x
Which one? The one in OP?
That one works the same way; GetMousePos() will get the mouse position with desktop as the client


Yes, but if you want the position of the mouse window relative to the smart window you'll need to know the position of the smart window. Plus, the method you posted isn't exactly… usable with SRL currently. The one I posted can be modified to work with whatever target (so say smart window instead of desktop) you want.

E: Wait, GetMousePos will still be overriden by SMART.

Use this:


GetTClient.IOManager.GetMousePos()

Gu3st...

2011-12-04 08:37:34

{$i SRL/SRL.simba}

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
end;

var
X, Y : Integer;

begin
GetRealMousePos(X, Y);
WriteLn([X, Y]);
end.
Works for me

Mark

2011-12-05 17:06:34

From: Zyt3x



What am i missing here all that happens is smart crashes on me……any ideas
top use hover mouse over top left corner of smart screen

program test;
{$I SRL/SRL/misc/SMART.SCAR}
{$I SRL/SRL.scar}
{$i srl/srl/misc/paintsmart.scar}
var
x,y:integer;

procedure SetupPlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer:= 0;
Players[0].Name :='';
Players[0].Pass :='';
Players[0].Active:=True;
end;

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

function IsMouseOnBox(x1, y1, x2, y2:Integer):Boolean;
var
Cx, Cy, KMTarget, ITarget: Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(Cx, Cy);
if (Cx >= x1) and (Cy >= y1) and (Cx <= x2) and (Cy <= y2) then
begin
Result := True;
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
end else
Result := False;
end;

procedure CanvasProg;
begin
SMART_DrawTextEx(true,0,17,'UpChars','it has worked',16777215);

end;

Procedure main;
begin
repeat
if IsMouseOnBox(0,0,104,60)then
begin
CanvasProg;
end;
until(False)
end;

begin
SetupSRL;
ActivateClient;
end.

Gu3st...

2011-12-05 17:56:09

Try this:
{$DEFINE SMART}
{$i SRL/SRL.simba}
{$i SRL/SRL/misc/PaintSmart.simba}

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

begin
Smart_Server := 32;
SetupSRL;
while True do
begin
SMART_DrawBox(MSBox);
if IsRealMouseInBox(MSBox) then
SMART_DrawBoxEx(False, MSBox, clLime);
Wait(100);
end;
end.

YoHoJo

2011-12-05 18:07:03

Damn that's some sexy stuff Zyt3x, can't wait to see that sexy ass progress report!
Can smart draw pretty things besides just text?

Gu3st...

2011-12-05 18:12:29

From: YoHoJo
Damn that's some sexy stuff Zyt3x, can't wait to see that sexy ass progress report!
Can smart draw pretty things besides just text?
Well, with DrawDotsEx you can draw pretty much anything :p

Even bitmaps. And I think someone made an actual form on the smart canvas… You could try searching for it :)

mormonman

2011-12-05 18:20:33

From: Zyt3x
Well, with DrawDotsEx you can draw pretty much anything :p

Even bitmaps. And I think someone made an actual form on the smart canvas… You could try searching for it :)


A bitmap would probably be faster than trying to draw a bunch of dots on the screen….

Gu3st...

2011-12-05 18:24:05

From: mormonman
A bitmap would probably be faster than trying to draw a bunch of dots on the screen….
I did mention bitmaps in there, didn't I?
From: Zyt3x
Even bitmaps.


E: Ah, I see where I was misleading. The post makes it look like I'm talking about drawing bitmaps on the canvas using Smart_DrawDots..

Mark

2011-12-05 18:25:32

cheers zyt3x will try that now

i use bitmaps myself already work pretty well

mormonman

2011-12-05 18:42:59

Proper offsets for SMART
procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
x := x - 8;
y := y - 25;
end;


EDIT: Quick Proof of Concept:
Images are here: http://imgur.com/a/2e42O

{$DEFINE SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/misc/PaintSmart.scar}

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
x := x - 8;
y := y - 25;
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

procedure SMART_DrawBitmapEx(Clear: Boolean; bmp, x, y: Integer);
begin
if (not SMART_DebugSetup) then
SMART_SetupDebug();

if Clear then ClearRSCanvas(SMART_Canvas.canvas);

DrawBitmap(bmp, SMART_Canvas.Canvas, x, y);
end;

var
white, black, w, h: Integer;
tpa: TPointArray;
LI: Boolean;

begin
Smart_Server := 32;
SetupSRL;
if (not SMART_DebugSetup) then
SMART_SetupDebug();
ClearRSCanvas(SMART_Canvas.canvas);
white := LoadBitmap('C:\Users\T-Dog\Pictures\Runescape\btnoff.png');
black := LoadBitmap('C:\Users\T-Dog\Pictures\Runescape\btnon.png');
tpa := TPAFromText('On', 'FriendChars', w, h);
OffsetTPA(tpa, Point((75-w)/2, 5));
DrawTPABitmap(black, tpa, 13387839);
tpa := TPAFromText('Off', 'FriendChars', w, h);
OffsetTPA(tpa, Point((75-w)/2, 5));
DrawTPABitmap(white, tpa, 13387839);
writeln(w);
writeln(h);

LI := True;
while True do
begin
if IsRealMouseInBox(IntToBox(10, 10, 85, 30)) then
begin
if not LI then SMART_DrawBitmapEx(true, black, 10, 10);
LI := True;
end else
begin
if LI then SMART_DrawBitmapEx(True, white, 10, 10);
LI := False;
end;
Wait(25);
end;
FreeBitmap(white);
FreeBitmap(black);
end.

mormonman

2011-12-05 19:28:14

Cooler stuff needs new post:
Images here:
off - http://i.imgur.com/Y1PXc.png
on - http://i.imgur.com/XUJ0X.png
sel - http://i.imgur.com/oSgfS.png

{$DEFINE SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/misc/PaintSmart.scar}

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
x := x - 8;
y := y - 25;
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

procedure SMART_DrawBitmapEx(Clear: Boolean; bmp, x, y: Integer);
begin
if (not SMART_DebugSetup) then
SMART_SetupDebug();

if Clear then ClearRSCanvas(SMART_Canvas.canvas);

DrawBitmap(bmp, SMART_Canvas.Canvas, x, y);
end;

var
bon, boff, bsel, w, h: Integer;
tpa: TPointArray;
LI, sel: Boolean;

begin
Smart_Server := 32;
SetupSRL;
if (not SMART_DebugSetup) then
SMART_SetupDebug();
ClearRSCanvas(SMART_Canvas.canvas);
boff := LoadBitmap('C:\Users\T-Dog\Pictures\Runescape\btnoff.png');
bon := LoadBitmap('C:\Users\T-Dog\Pictures\Runescape\btnon.png');
bsel := LoadBitmap('C:\Users\T-Dog\Pictures\Runescape\btnsel.png');
tpa := TPAFromText('On', 'FriendChars', w, h);
OffsetTPA(tpa, Point((75-w)/2, 5));
DrawTPABitmap(bon, tpa, 2909203);
tpa := TPAFromText('Off', 'FriendChars', w, h);
OffsetTPA(tpa, Point((75-w)/2, 5));
DrawTPABitmap(boff, tpa, 13387839);
tpa := TPAFromText('Selected', 'FriendChars', w, h);
OffsetTPA(tpa, Point((75-w)/2, 5));
DrawTPABitmap(bsel, tpa, 1117058);

LI := True;
SMART_DrawBitmapEx(True, boff, 10, 10);
while True do
begin
if IsMouseButtonDown(mouse_Left) then
begin
if IsRealMouseInBox(IntToBox(10, 10, 85, 30)) then
begin
if not sel then
Smart_DrawBitmapEx(True, bsel, 10, 10);
sel := not sel;
end;
while IsMouseButtonDown(mouse_Left) do Wait(5);
LI := not IsRealMouseInBox(IntToBox(10, 10, 85, 30));
end;

if not sel then
if IsRealMouseInBox(IntToBox(10, 10, 85, 30)) then
begin
if not LI then SMART_DrawBitmapEx(true, bon, 10, 10);
LI := True;
end else
begin
if LI then SMART_DrawBitmapEx(True, boff, 10, 10);
LI := False;
end;
Wait(25);
end;
end.

mormonman

2011-12-05 19:50:52

Leak in GetRealMousePos…Target wasn't freed.
procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
FreeTarget(GetImageTarget);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
x := x - 8;
y := y - 25;
end;

Mark

2011-12-05 19:53:17

Here's what i have now still alot to work on but just getting used to it

{$DEFINE SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/misc/PaintSmart.scar}
var
ProgBmp,Prog2Bmp:integer;
B:TBox;

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

procedure CanvasProg;
begin
SMART_DrawTextEx(False,10,17,'UpChars','',16777215);
DrawBitmap(ProgBmp,SMART_Canvas.canvas,6,345);
FreeBitmap(ProgBmp);
end;

begin
Smart_Server := 32;
SetupSRL;
while True do
begin
ProgBmp := BitmapFromString(131, 21, 'meJztlzGugzAMhn3B3IND9AicIBfo3p25K2tHRjZukPfkyJZNaRT0VGwe+ZWh8e+GkE+JCUCTH6XWrFsD4aQdA+JdHcBg/e6umhWIrMbCBISMPGhfmK+Ak2YFYhXMGgGCoDMDRLIiduXfX5j5qx6t1SM+uYCPWM0kOCiUTnaEVI+RhdaHFTCY8ydtdfoRBfdOxHkmI0buVwLxrlEnPAgBr1ikhKiXa7MLFe5EaHhuGdN0VRA9nh6rhEVEgo4s2A0f8hf9ImVXrnzmcrOmcDCIXQnlyF/cAX/nvZY3y1ic28VBfG9HcHfSYzYQmwm7akSvRyi7SVQNcFCmnYOY93w13fQIZTdheWLNda9gvkRWIFL1PSJujVB2E7keyvSRIL40bf7mfGK3q3OTuKR4KNOnBsHHvtRQ57KclOlTg0hYZPnK3NFlsMYNdCg5qQ5nB/HPWgPhpDV50Q9wAYb7');
CanvasProg;
if IsRealMouseInBox(IntToBox(6, 370, 134, 388)) then
begin
Prog2Bmp := BitmapFromString(154, 191, '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');
DrawBitmap(ProgBmp,SMART_Canvas.canvas,10,17);
FreeBitmap(Prog2Bmp);
Wait(100);
end else
if not IsRealMouseInBox(IntToBox(6, 370, 134, 388)) then
SMART_DrawTextEx(True,10,17,'UpChars','',16777215);
end;
end.

mormonman

2011-12-05 19:54:15

From: CRU1Z1N
Here's what i have now still alot to work on but just getting used to it

{$DEFINE SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/misc/PaintSmart.scar}
var
ProgBmp,Prog2Bmp:integer;
B:TBox;

function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T: TSysProcArr;
I: Integer;
begin
T:= GetProcesses();
for I := 0 to high(T) do
if StartsWith(TitlePrefix, T[i].Title) then
begin
Result := True;
if SetAsTarget then
SetTarget(T[i]);
Exit;
end;
end;

procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

procedure CanvasProg;
begin
SMART_DrawTextEx(False,10,17,'UpChars','',16777215);
DrawBitmap(ProgBmp,SMART_Canvas.canvas,6,345);
FreeBitmap(ProgBmp);
end;

begin
Smart_Server := 32;
SetupSRL;
while True do
begin
ProgBmp := BitmapFromString(131, 21, 'meJztlzGugzAMhn3B3IND9AicIBfo3p25K2tHRjZukPfkyJZNaRT0VGwe+ZWh8e+GkE+JCUCTH6XWrFsD4aQdA+JdHcBg/e6umhWIrMbCBISMPGhfmK+Ak2YFYhXMGgGCoDMDRLIiduXfX5j5qx6t1SM+uYCPWM0kOCiUTnaEVI+RhdaHFTCY8ydtdfoRBfdOxHkmI0buVwLxrlEnPAgBr1ikhKiXa7MLFe5EaHhuGdN0VRA9nh6rhEVEgo4s2A0f8hf9ImVXrnzmcrOmcDCIXQnlyF/cAX/nvZY3y1ic28VBfG9HcHfSYzYQmwm7akSvRyi7SVQNcFCmnYOY93w13fQIZTdheWLNda9gvkRWIFL1PSJujVB2E7keyvSRIL40bf7mfGK3q3OTuKR4KNOnBsHHvtRQ57KclOlTg0hYZPnK3NFlsMYNdCg5qQ5nB/HPWgPhpDV50Q9wAYb7');
CanvasProg;
if IsRealMouseInBox(IntToBox(6, 370, 134, 388)) then
begin
Prog2Bmp := BitmapFromString(154, 191, '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');
DrawBitmap(ProgBmp,SMART_Canvas.canvas,10,17);
FreeBitmap(Prog2Bmp);
Wait(100);
end else
if not IsRealMouseInBox(IntToBox(6, 370, 134, 388)) then
SMART_DrawTextEx(True,10,17,'UpChars','',16777215);
end;
end.


You've got a bitmap leak and a target leak. Look at my last post to fix the target leak.

Mark

2011-12-05 20:00:15

From: mormonman
You've got a bitmap leak and a target leak. Look at my last post to fix the target leak.

Cheers for that cant find where my Bitmap is leaking

mormonman

2011-12-05 20:05:37

Load your two bitmaps just once before the loop, then you will eliminate leak.
Small video of functionality: http://uppit.com/yhtr2w4byg9z/cool.avi

Flight

2011-12-05 22:03:07

Looking great, Mormonman. :)

Wizzup?

2011-12-06 08:00:29

From: mormonman
Leak in GetRealMousePos…Target wasn't freed.
procedure GetRealMousePos(var x, y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
FreeTarget(GetImageTarget);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);
x := x - 8;
y := y - 25;
end;


Good find. I was wondering whether I should be freeing the target as well… Sometimes I just forget how EIOS works… :p

mormonman

2011-12-06 13:34:52

From: Wizzup?
Good find. I was wondering whether I should be freeing the target as well… Sometimes I just forget how EIOS works… :p


Only reason I found it was Simba crashing :)

Wizzup?

2011-12-07 10:31:37

From: mormonman
Only reason I found it was Simba crashing :)


Hehe. ;)

Gu3st...

2011-12-07 12:58:23

Here's all the (newest) functions posted in this thread combined (minus testing functions):
function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T : TSysProcArr;
I : Integer;
begin
T := GetProcesses;
for I := High(T) downto 0 do
if StartsWith(TitlePrefix, T[I].Title) then
begin
Result := True;
if SetAsTarget then SetTarget(T[I]);
Exit;
end;
end;

procedure GetRealMousePos(var X, Y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
FreeTarget(GetImageTarget);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);

// These are not universial offsets, but works somewhat for some Windows themes.
X := X - 8;
Y := Y - 25;
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

I'll add them to SRL5, but I'm unsure where to put FindAndSetTarget()…

Nava2

2011-12-07 16:12:41

From: Zyt3x
Here's all the (newest) functions posted in this thread combined (minus testing functions):
function FindAndSetTarget(TitlePrefix: String; SetAsTarget: Boolean): Boolean;
var
T : TSysProcArr;
I : Integer;
begin
T := GetProcesses;
for I := High(T) downto 0 do
if StartsWith(TitlePrefix, T[I].Title) then
begin
Result := True;
if SetAsTarget then SetTarget(T[I]);
Exit;
end;
end;

procedure GetRealMousePos(var X, Y : Integer);
var
KMTarget, ITarget : Integer;
begin
KMTarget := GetKeyMouseTarget;
ITarget := GetImageTarget;
FindAndSetTarget('Public SMART', True);
GetTClient.IOManager.GetMousePos(X, Y);
FreeTarget(GetImageTarget);
SetKeyMouseTarget(KMTarget);
SetImageTarget(ITarget);

// These are not universial offsets, but works somewhat for some Windows themes.
X := X - 8;
Y := Y - 25;
end;

function IsRealMouseInBox(B : TBox): Boolean;
var
P : TPoint;
begin
GetRealMousePos(P.X, P.Y);
Result := PointInBox(P, B);
end;

I'll add them to SRL5, but I'm unsure where to put FindAndSetTarget()…


I feel like all of this could go in a SMART additions file.

Gu3st...

2011-12-07 16:50:25

From: Nava2
I feel like all of this could go in a SMART additions file.
Problem is the line with "StartsWith" returns an error. ("StartsWith" Not found)

Nava2

2011-12-07 18:15:03

From: Zyt3x
Problem is the line with "StartsWith" returns an error. ("StartsWith" Not found)


StartsWith is in SRL I believe.

Just switch it for pos(substr, str) = 1.

Thats all StartsWith is. :)

Gu3st...

2011-12-07 18:47:54

Committed :)
They're all in smart.simba now

Mark

2011-12-07 19:32:53

great work i love this already added it to my smelter :D

Coh3n

2011-12-07 19:42:04

Very cool. :)

euphemism

2011-12-07 19:48:38

From: Coh3n
Very cool. :)


Indeed. I can have an alternate user-friendly generator for Object DTMs now. :)