2009-08-03 20 views
7

Tôi muốn tạo một chương trình hoặc sử dụng một chương trình sẽ đọc các giá trị bộ nhớ từ một ứng dụng khác. Có ai biết về một ứng dụng/thư viện mà sẽ làm điều này?Làm thế nào bạn có thể đọc các giá trị từ một ứng dụng đang mở trong Windows?

Ứng dụng mục tiêu là this. Tôi muốn đọc các giá trị tỷ giá hối đoái từ nó.

Tôi là một lập trình viên C# kinh nghiệm, nhưng chưa bao giờ làm việc với api Win32/user32 mà tôi cho rằng tôi sẽ phải giải quyết vấn đề này.

Bất kỳ trợ giúp nào giúp tôi đi đúng hướng đều được đánh giá cao.

Cập nhật: Tôi đã quản lý để sử dụng Spy ++ để có được cửa sổ xử lý, vì vậy tôi chắc chắn rằng tôi có thể nhận được các giá trị một số cách.

Trả lời

1

Nó có thể dễ dàng hơn để loại bỏ dữ liệu của chúng bằng cách tự động hóa một ảnh chụp màn hình và sau đó là quá trình ocr. Nếu đó là mục tiêu của bạn.

liên kết có khả năng liên quan:

+0

Mặc dù giải pháp này có mùi một chút nhưng đây có thể là giải pháp đơn giản nhất với thư viện OCR tốt. –

0

Có thể bài viết này sẽ giúp - http://msdn.microsoft.com/en-us/magazine/cc163617.aspx, nhưng tôi nghĩ rằng nó không phải là phổ quát và cho nhiệm vụ của bạn là tốt hơn để có thể truy cập trực tiếp đến Forex API/Web-Service hoặc cố gắng nắm bắt dữ liệu cần thiết trên mạng.

2

Thông thường một ứng dụng tạo điều khiển trong hộp thoại trong một trang viên nhất quán, cùng một ID, cùng thứ tự vv, do đó việc tìm kiếm điều khiển theo chương trình khá đơn giản. Sử dụng Spy ++ tìm ID của kiểm soát và sau đó bạn có thể tìm kiếm các cửa sổ do ứng dụng tạo để điều khiển mong muốn. Không quen thuộc với ứng dụng được đề cập đến, tôi không thể cung cấp chi tiết cụ thể, nhưng nếu Spy ++ hiển thị giá trị bạn mong muốn, có thể không khó để có được giá trị trong mã của bạn.

Loại kiểm soát nào là giá trị được hiển thị trong? Bạn có thể sử dụng GetDlgItemText để nhận giá trị khi bạn có trình điều khiển cửa sổ chính và ID kiểm soát? Để có cửa sổ chính, hãy thử sử dụng EnumWindows.

+0

Tôi không thể nhận được giá trị mong muốn, nhưng tôi đã có thể có được một xử lý cho các container của nơi mà tất cả các tỷ giá hối đoái khác nhau được. Các điều khiển duy nhất hiển thị trong vùng chứa, là các hộp tổ hợp để chọn một giá trị (kích thước lô). –

+0

Khi sử dụng Spy ++, thực hiện tất cả các điều khiển hiển thị dưới cùng một bố mẹ? –

+0

Các điều khiển duy nhất mà tôi thấy là các hộp kết hợp để chọn kích thước lô, được hiển thị ngay bên cạnh các chữ số tôi muốn đọc, nhưng các điều khiển chữ số không được hiển thị trong gián điệp ++. Bất kỳ đề xuất về cách để có được những người? –

1

Bạn đã xem xét AutoIT hoặc AutoHotKey? Cả hai tùy chọn nguồn mở này đều có khả năng tài liệu tốt để đọc văn bản từ các cửa sổ ứng dụng (và gửi tổ hợp phím hoặc mouseclicks cho chúng).

AutoIT rất dễ sử dụng và được ghi lại tài liệu. Ví dụ về văn bản đọc từ cửa sổ sẽ là:

$text = WinGetText("title of window", "") 
MsgBox(0, "Text read was:", $text) 

Điều này có thể được biên dịch thành tệp thực thi.

0

Có thể sàng lọc màn hình những thứ được tạo bằng các điều khiển cửa sổ gốc; nếu đó là trường hợp, bạn sẽ có thể thấy các điều khiển bằng cách sử dụng Spy ++. Nhưng một số lần điều khiển được thực hiện "bằng tay" và không có cách nào để sàng lọc màn hình (ví dụ: một số bộ công cụ đồ họa Java phát trực tiếp với đồ họa, vì vậy mọi thứ trong ngày là vô nghĩa từ bên ngoài hoặc thậm chí một số menu Office được triển khai mà không cần sử dụng điều khiển menu).

API trợ năng của Windows là cách có thể để sàng lọc màn hình các giá trị; kiểm tra xem "Người kể chuyện", trình đọc màn hình đi kèm với cửa sổ, có thể đọc to ứng dụng đích của bạn không.

Các vấn đề liên quan