La he simplificado un poco.
procedure MouseLoco(Ms: integer);
var
Tipo: byte;
Tiempo: dword;
begin
Tiempo:= gettickcount;
while gettickcount - Tiempo < Ms do
begin
Tipo:= random(4);
case Tipo of
0: setcursorpos(mouse.CursorPos.X + 4, mouse.CursorPos.Y + 4);
1: setcursorpos(mouse.CursorPos.X + 4, mouse.CursorPos.Y - 4);
2: setcursorpos(mouse.CursorPos.X - 4, mouse.CursorPos.Y - 4);
3: setcursorpos(mouse.CursorPos.X - 4, mouse.CursorPos.Y + 4);
end;
sleep(10);
end;
end;
Ejemplo:MouseLoco(20000); //20 segundos
Saludos.