Tôi đang mã hóa giải pháp điều khiển trực tiếp/máy tính để bàn từ xa bằng trình điều khiển gương miễn phí của DFMirage. Có một mẫu C# về cách giao diện và điều khiển trình điều khiển gương here. Bạn sẽ cần trình điều khiển gương được cài đặt trước, tất nhiên, here. Vì vậy, khái niệm là, máy khách (helper) yêu cầu cập nhật màn hình và máy chủ (nạn nhân) gửi một, sử dụng mã hóa pixel thô. Khái niệm về một trình điều khiển gương loại bỏ sự cần thiết phải thăm dò ý kiến rộng rãi cho các thay đổi màn hình, bởi vì một trình điều khiển gương được thông báo về tất cả các hoạt động vẽ màn hình trong thời gian thực. Trình điều khiển gương nhận vị trí và kích thước của hình chữ nhật cập nhật và chỉ có thể truy vấn bộ nhớ cho các byte pixel mới và gửi chúng.Dòng dữ liệu bitmap thô/quét (dữ liệu thô của trình điều khiển gương)?
Nên dễ dàng, ngoại trừ việc tôi không biết cách thực hiện phần đó nơi chúng tôi bộ nhớ truy vấn cho byte pixel mới. Các mẫu trình bày cách truy vấn bộ nhớ để lấy các điểm ảnh của màn hình toàn bộ sử dụng một cái gì đó với dữ liệu bitmap liệu và dòng quét và sải chân và tất cả những thứ tốt:
Bitmap result = new Bitmap(_bitmapWidth, _bitmapHeight, format);
Rectangle rect = new Rectangle(0, 0, _bitmapWidth, _bitmapHeight);
BitmapData bmpData = result.LockBits(rect, ImageLockMode.WriteOnly, format);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = bmpData.Stride * _bitmapHeight;
var getChangesBuffer = (GetChangesBuffer)Marshal
.PtrToStructure(_getChangesBuffer, typeof (GetChangesBuffer));
var data = new byte[bytes];
Marshal.Copy(getChangesBuffer.UserBuffer, data, 0, bytes);
// Copy the RGB values into the bitmap.
Marshal.Copy(data, 0, ptr, bytes);
result.UnlockBits(bmpData);
return result;
này là rất tốt và hoạt động tốt. Đối tượng Bitmap
kết quả hiện có các pixel của toàn bộ màn hình. Nhưng nếu tôi muốn trích xuất một hình chữ nhật của dữ liệu pixel thay vì lấy dữ liệu pixel từ toàn bộ màn hình, tôi có thể làm như thế nào? Tôi đoán đây là một câu hỏi về rawbitmap-scan-stride, nhưng tôi đã gõ tất cả những câu hỏi này để bạn có thể biết nó đến từ đâu. Vì vậy, bất kỳ thông tin chi tiết nào về cách lấy chỉ một phần dữ liệu pixel thay vì dữ liệu pixel toàn màn hình?
Cập nhật: Tìm thấy thứ gì đó interesting (chỉ phần mã).