두 좌표간에 마우스를 프로그래밍 방식으로 이동하려고합니다. 그러나 모든 고속 또는 저속 처리 기계에서 안정적으로 속도를 유지하려고합니다. this link here을 봤습니다. 그러나 두 좌표 사이의 이동을 시뮬레이션 할 때 커서의 최적의 부드럽고 보이는 속도를 보장하지는 못합니다. 나는 누군가가 지연과 같은 매개 변수를 결정하는 트릭을 아는 지 궁금해하고 다양한 기계에 대한 최적의 값을 단계 내 첫 번째 생각처럼 특정 iteraton에 대한 fororop을 사용하여 기계의 성능을 결정한 다음 얼마나 많은 시간을 기준으로 매개 변수의 등급을 매기는지 -loop은 아이디어를 얻었습니까? 또는 나는 이것에 완전히 틀린가? 감사합니다.두 좌표 사이의 C#에서 마우스 커서 이동을 시뮬레이트합니다.
3
A
답변
3
운동을 시간의 함수로 만들어야합니다. C# moving the mouse around realistically에서 답을 시작하고 경과 시간을 측정하는 스톱워치 클래스를 사용하여 :
public void LinearSmoothMove(Point newPosition, TimeSpan duration)
{
Point start = GetCursorPosition();
// Find the vector between start and newPosition
double deltaX = newPosition.X - start.X;
double deltaY = newPosition.Y - start.Y;
// start a timer
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
double timeFraction = 0.0;
do
{
timeFraction = (double)stopwatch.Elapsed.Ticks/duration.Ticks;
if (timeFraction > 1.0)
timeFraction = 1.0;
PointF curPoint = new PointF(start.X + timeFraction * deltaX,
start.Y + timeFraction * deltaY);
SetCursorPosition(Point.Round(curPoint));
Thread.Sleep(20);
} while (timeFraction < 1.0);
}
0
좀 물리학을 추천 할 것입니다. 속도는 거리를 시간으로 나눈 것입니다. 모든 컴퓨터에 적절한 마우스 속도를 원하면 정확한 시간을 가져야합니다.
당신은 600분의 400 지점으로 0/0에서 마우스를 이동할 및 엔드 포인트는 항상 삼초 후에 도달해야합니다
는 다음의 예제를 만들어 보자.시작 시간을 저장하고 starttime + 3s에 끝나는 while 루프를 만들어야합니다. 루프에서 경과 시간과 총 시간에서 X와 Y 좌표를 계산합니다.
X = 400/3s * ElapsedTime
Y = 600/3s * ElapsedTime
이것은 기계에 의존하지 않습니다. 좋은 결과를 얻으려면 Stopwatch과 같이 정확한 시간을 사용해야합니다.
0
나는 이것을 시도했지만 아직 최적이 아니다. 여전히 기계 처리 능력에 따라 다릅니다. @ 저스틴, 지속 시간과 절전 시간에 다른 값을 사용하십시오. 테스트 한 후에 더 나은 솔루션을 제안한다면 알려주세요. 감사합니다.
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace ConsoleApplication11
{
class Program
{
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
public static void LinearSmoothMove(Point newPosition, TimeSpan duration)
{
Point start = Cursor.Position;
int sleep = 10;
//PointF iterPoint = start;
// Find the vector between start and newPosition
double deltaX = newPosition.X - start.X;
double deltaY = newPosition.Y - start.Y;
// start a timer
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
double timeFraction = 0.0;
do
{
timeFraction = (double)stopwatch.Elapsed.Ticks/duration.Ticks;
if (timeFraction > 1.0)
timeFraction = 1.0;
PointF curPoint = new PointF((float)(start.X + timeFraction * deltaX), (float)(start.Y + timeFraction * deltaY));
SetCursorPos(Point.Round(curPoint).X, Point.Round(curPoint).Y);
Thread.Sleep(sleep);
} while (timeFraction < 1.0);
}
static void Main(string[] args)
{
TimeSpan delayt = new TimeSpan(0, 0, 3);
LinearSmoothMove(new Point(20, 40), delayt);
Console.Read();
}
}
}
관련 문제
- 1. Mac OS X에서 실제 마우스 이동을 시뮬레이트합니다.
- 2. 두 좌표 사이의 길이를 가져 옵니까?
- 3. 마우스 커서
- 4. 마우스 이동을 하나의 창으로 제한
- 5. JavaScript : 마우스 좌표
- 6. HTML5 캔버스의 마우스 좌표
- 7. 현재 마우스 좌표 얻기
- 8. 마우스 좌표 및 회전
- 9. VB.NET - 마우스 좌표
- 10. Windows 환경에서 마우스 클릭의 좌표 (좌표)를 얻는 방법
- 11. 마우스 위치에서 X 좌표 설정
- 12. 마우스 커서 이동 Javascript
- 13. Windows에서 마우스 커서 대체
- 14. PeekMessage() 마우스 커서 재설정
- 15. WPF - 화면 밖에서 렌더링 된 격자에서 마우스 이벤트를 시뮬레이트합니다.
- 16. Google지도에서 좌표 사이의 드로잉 경로
- 17. 자바 스크립트에서 마우스 커서 위치?
- 18. 두 세트의 위도/경도 좌표 사이의 거리를 어떻게 결정합니까?
- 19. 자바 스크립트에서 탐색기의 마우스 좌표
- 20. ActionScript - 부정확 한 마우스 좌표?
- 21. 마우스 움직임을 차단/무효화/C에서 클릭
- 22. 동적으로 마우스 커서 크기를 변경합니다.
- 23. .NET에서 글로벌 마우스 커서 변경
- 24. 네트워크를 통한 마우스 커서 직렬화
- 25. C# 글로벌 마우스 커서 변경
- 26. 웹 브라우저 : 마우스 커서 숨기기
- 27. 공유 지점에서 마우스 커서 변경
- 28. QWidget의 일관된 마우스 커서 설정
- 29. 안드로이드 EditText의 커서 좌표 (절대 위치)
- 30. JScrollPane 내의 JPanel에서 마우스 좌표 옵셋
이 좋아 보인다하지만 난이 알고리즘으로도 느린 속도에 잡을 수 없었다. 그것은 단지 즉시가됩니다. 나는 그것을 측정하기 위해 다른 Timespan과 지연 값을 사용했다. – Deku
@Deku - 귀하의 의견을 듣고 1 시간에서 2 시간 이내에 대답을 받았다는 것을 알았습니다. 뭐가 잘못 됐는지 알아 냈어? 나는이 코드를 테스트하지 않았다. 어떤 변화가 필요 했습니까? – Justin
.. 더 나은 솔루션이기 때문에 답변을주었습니다. 하지만 정확히 위 질문에 대한 내 질문에 대답하지 않았다. 여기에 그것을 테스트하는 코드가있다. – Deku