You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

鼠标坐标录制保存与加载复现功能实现技术问询

Hey there! Let's get this mouse trajectory recording and playback feature working properly. I can see you've started with the save dialog setup, so let's expand on that and fill in the missing pieces step by step.

1. First, Set Up Mouse Trajectory Recording

Instead of using a fixed-size array (like your string[] cvsArray = new string[10000];), a List<Point> is way more flexible for storing mouse coordinates. You'll need to hook into the MouseMove event to capture positions as the mouse moves.

Here's how to add the recording logic:

// Declare this at the class level to store coordinates
private List<Point> recordedMousePoints = new List<Point>();
private bool isRecording = false;

// Add a button to start/stop recording
private void btnStartRecording_Click(object sender, EventArgs e)
{
    if (!isRecording)
    {
        recordedMousePoints.Clear();
        isRecording = true;
        btnStartRecording.Text = "Stop Recording";
        // Hook into the form's MouseMove event (or use a global hook for full screen capture)
        this.MouseMove += Form1_MouseMove;
    }
    else
    {
        isRecording = false;
        btnStartRecording.Text = "Start Recording";
        this.MouseMove -= Form1_MouseMove;
    }
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (isRecording)
    {
        recordedMousePoints.Add(e.Location);
        // Optional: Update a label to show progress
        lblRecordedCount.Text = $"Recorded {recordedMousePoints.Count} points";
    }
}
2. Complete the Save Functionality

Your existing save dialog code is a good start—let's finish it to write the recorded points to a file. We'll store each coordinate as a simple X,Y line format for easy parsing later:

private void button3_Click_1(object sender, EventArgs e)
{
    if (recordedMousePoints.Count == 0)
    {
        MessageBox.Show("No mouse trajectory recorded yet!");
        return;
    }

    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
    saveFileDialog1.Title = "Save Mouse Trajectory";
    saveFileDialog1.FileName = "MouseTrajectory.txt";

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
        // Use 'using' to automatically dispose the StreamWriter
        using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
        {
            foreach (Point point in recordedMousePoints)
            {
                writer.WriteLine($"{point.X},{point.Y}");
            }
        }
        MessageBox.Show("Trajectory saved successfully!");
    }
}
3. Implement Trajectory Loading & Mouse Playback

To load the saved points and move the mouse along them, we'll use an OpenFileDialog to read the file, parse the coordinates, then use either Cursor.Position or Windows API calls for smoother movement. We'll run playback in a background thread to avoid freezing the UI:

First, add the Windows API import (optional but gives more direct control over the cursor):

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetCursorPos(int x, int y);

Then the load and playback code:

private void btnLoadPlayback_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
    openFileDialog1.Title = "Load Mouse Trajectory";

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        List<Point> loadedPoints = new List<Point>();
        try
        {
            string[] lines = File.ReadAllLines(openFileDialog1.FileName);
            foreach (string line in lines)
            {
                if (!string.IsNullOrWhiteSpace(line))
                {
                    string[] coords = line.Split(',');
                    if (coords.Length == 2 && 
                        int.TryParse(coords[0], out int x) && 
                        int.TryParse(coords[1], out int y))
                    {
                        loadedPoints.Add(new Point(x, y));
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Error loading file: {ex.Message}");
            return;
        }

        if (loadedPoints.Count == 0)
        {
            MessageBox.Show("No valid coordinates found in the file!");
            return;
        }

        // Run playback in a background task so the UI stays responsive
        Task.Run(() =>
        {
            foreach (Point point in loadedPoints)
            {
                // Use SetCursorPos for direct system-level control
                SetCursorPos(point.X, point.Y);
                // Add a small delay to mimic natural mouse movement (adjust as needed)
                System.Threading.Thread.Sleep(10);
            }
            // Show completion message on the UI thread
            this.Invoke(() => MessageBox.Show("Playback completed!"));
        });
    }
}

Quick tips to refine this further:

  • If you need to record mouse movement across the entire screen (not just your form), you'll need to set up a global mouse hook instead of using the form's MouseMove event.
  • Adjust the Thread.Sleep(10) value to make playback faster or slower—lower numbers mean quicker movement.
  • Add error handling for edge cases (like corrupted save files or empty recordings) to make the app more robust.

内容的提问来源于stack exchange,提问作者Fajer Albloushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:05:21