2008-08-20 17 views
7

Trong một ứng dụng mà tôi hiện đang làm việc, yêu cầu là mang một cửa sổ của một ứng dụng bên ngoài lên nền trước. Thực hiện các cuộc gọi API Win32 như BringWindowToTop và cửa sổ SetForeground không hoạt động mọi lúc. Điều này là do một số hạn chế trong Windows XP. Những gì tôi muốn làm thay vào đó là gửi mô phỏng một con chuột bấm vào nút của cửa sổ trên thanh tác vụ mà tôi hy vọng sẽ mang lại cho cửa sổ phía trước. Có ai biết làm thế nào điều này là có thể?Gửi một cú click chuột vào một nút trong thanh tác vụ bằng cách sử dụng C#

Trả lời

5

Kiểm tra phần "Cách lấy tiêu điểm trên 2K/XP" tại http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, vì đây chính xác là những gì bạn cần. Tôi sẽ không đi các tuyến đường thanh tác vụ như thanh tác vụ có thể được ẩn hoặc chỉ đơn giản là không có.

2

Có thể. Nhưng nó rất sơ sài. Ứng dụng của bạn cũng có thể bị hỏng với phiên bản Windows tiếp theo, vì nó không có giấy tờ. Những gì bạn cần làm là tìm cửa sổ xử lý của thanh tác vụ, sau đó tìm cửa sổ xử lý của cửa sổ con đại diện cho nút, sau đó gửi cho nó một tin nhắn WM_MOUSEDOWN (tôi nghĩ).

Dưới đây là một chút vào việc tìm kiếm các cửa sổ xử lý của thanh tác vụ:

http://www.codeproject.com/

FWIW, các hạn chế về BringWindowToTop/SetForeground đang có bởi vì nó khó chịu khi một đánh cắp sổ tập trung. Điều đó có thể không quan trọng nếu bạn đang làm việc trên môi trường doanh nghiệp. Hãy ghi nhớ điều đó. :)

1

Tôi đã sử dụng điều này trong chương trình mà tôi cần để mô phỏng các chuyển động của chuột và chuột;

Global Mouse and Keyboard Library

1

Thành thật mà nói tôi chưa bao giờ có một vấn đề mang một cửa sổ để foreground trên XP/Vista/2003/2000.

Bạn cần phải chắc chắn rằng bạn làm như sau:

  1. Kiểm tra nếu IsIconic (giảm thiểu)
  2. Nếu # 1 kết quả trong đúng thì gọi ShowWindow qua SW_RESTORE
  3. Sau đó gọi SetForegroundWindow

Tôi chưa từng gặp vấn đề gì mà tôi có thể nghĩ đến khi thực hiện các bước đó.

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