2010-06-25 16 views
6

Tôi đang viết ứng dụng .NET có cửa sổ trong C#, chạy ứng dụng bảng điều khiển của bên thứ ba thông qua lớp Xử lý, càng ẩn càng tốt (CreateNoWindow) , RedirectStandardOutput, v.v.).Cách gửi chức năng nhấn phím (F1..F12) sang ứng dụng giao diện điều khiển trong .NET

Tôi đã chuyển hướng nó là StandardInput, vì vậy tôi có thể viết bất kỳ chuỗi nào mình muốn, nhưng không phải phím chức năng hoặc loại khóa đặc biệt khác vì chúng không có biểu diễn ký tự. Đối với tôi, tôi phải gửi các phím F1 đến F4 cho ứng dụng giao diện điều khiển. Các giải pháp tôi đã tìm thấy là dành cho ứng dụng cửa sổ (PostMessage, SendMessage).

Tôi làm cách nào để thực hiện điều này cho ứng dụng bảng điều khiển của mình?

Có liên quan gì đến Xử lý của quy trình không?

Trả lời

0

Sendkeys.SendWait có thể giải quyết được sự cố của bạn.

+0

SendKeys chỉ có thể gửi các lần nhấn phím đến ứng dụng đang hoạt động, rất tiếc là không phải như vậy ở đây. – ifroz

0

SendKeys hoạt động ("{F1}")? (giao diện điều khiển sẽ phải hoạt động, mặc dù).

+1

Bản thân bảng điều khiển không tồn tại dưới dạng cửa sổ (Process.CreateNoWindow), vì vậy SendKeys không áp dụng trong trường hợp này. – ifroz

1

Bạn không thể. Các phím chức năng không thể hoạt động với stdin, một ứng dụng phải gọi ReadConsoleInput() để có thể phát hiện chúng. Điều đó không còn hoạt động khi bạn bắt đầu quá trình mà không có cửa sổ bảng điều khiển.

+0

Không có cách nào để đẩy một số dữ liệu vào bộ đệm mà nó đọc, phải không? – ifroz

+0

Không có cửa sổ bảng điều khiển == không có bộ đệm. –

+0

Tôi không mua câu trả lời này. Ứng dụng của tôi bị chấm dứt khi tôi nhấn CTRL-BREAK, nhưng nó không có cuộc gọi như vậy để ReadConsoleInput, do đó không thể có bất cứ điều gì để làm với nó. Vì bảng điều khiển lệnh có khả năng bắt đầu quá trình và gửi tín hiệu ngắt cho nó, tôi không thể thấy bất kỳ lý do nào khiến một số ứng dụng khác bắt đầu quá trình không thể gửi cùng một loại tín hiệu. – Triynko

0

Đây không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng bạn đã cân nhắc sử dụng MSMQ chưa?

Nếu ứng dụng cửa sổ của bạn có thể nhận các lần nhấn phím đó, nó có thể chuyển thực tế đó vào ứng dụng bảng điều khiển của bạn bằng MSMQ. Bạn có thể không phải thực sự vượt qua phím bấm, chỉ là một thực tế rằng họ đã được ép.

Tôi đã tìm thấy điều này techrepublic article hữu ích trong việc tìm hiểu các khái niệm cơ bản về MSMQ.