2010-05-07 58 views
11

Tôi có một chương trình cần đặt trong nền và khi người dùng kết nối với phiên RDP, nó sẽ thực hiện một số thiết lập môi trường rồi khởi chạy chương trình. Khi chương trình được đóng, nó sẽ thực hiện một số dịch vụ vệ sinh và đăng xuất phiên.Cách tạo chương trình không hiển thị trong Alt-Tab hoặc trên thanh tác vụ

Cách hiện tại tôi đang làm là tôi có máy chủ đầu cuối khởi chạy ứng dụng này. Điều này được xây dựng dưới dạng ứng dụng biểu mẫu cửa sổ để ngăn cửa sổ bảng điều khiển hiển thị:

public static void Main() 
{ 
    //(Snip...) Do some setup work 

    Process proc = new Process(); 
    //(Snip...) Setup the process 
    proc.Start(); 
    proc.WaitForExit(); 

    //(Snip...) Do some housecleaning 

    NativeMethods.ExitWindowsEx(0, 0); 
} 

Tôi thực sự thích điều này vì không có mục nào trên thanh tác vụ và không có gì hiển thị trong tab alt. Tuy nhiên để làm điều này tôi đã từ bỏ quyền truy cập vào các chức năng như void WndProc(ref Message m) Vì vậy, bây giờ tôi không thể nghe các tin nhắn cửa sổ (Giống như WTS_REMOTE_DISCONNECT hoặc WTS_SESSION_LOGOFF) và không có xử lý để sử dụng cho bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags); Tôi muốn mã của tôi mạnh mẽ hơn sẽ làm việc dọn dẹp nếu người dùng đăng xuất hoặc ngắt kết nối khỏi phiên trước khi đóng chương trình.

Bất kỳ đề nghị nào về cách tôi có thể ăn bánh của mình?

Trả lời

10

Bạn có thể tạo một cửa sổ ẩn mà bạn sử dụng để xử lý các tin nhắn.

using System; 
using System.Windows.Forms; 

namespace WindowsApplication1 
{ 
    class Program 
    { 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Application.Run(new MessageWindow());   
    } 
    } 

    class MessageWindow : Form 
    { 
    public MessageWindow() 
    { 
     this.ShowInTaskbar = false; 
     this.WindowState = FormWindowState.Minimized; 
     // added by MusiGenesis 5/7/10: 
     this.FormBorderStyle = FormBorderStyle.FixedToolWindow; 
    } 

    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 
    } 
    } 
} 
+0

Đã thử rằng, nó xuất hiện trong Alt-Tab. Đó là giải pháp sao lưu của tôi nhưng tôi thực sự thích một giải pháp không hiển thị trong menu tab alt. –

+0

Nếu bạn đã đặt làm ứng dụng Windows này, ứng dụng sẽ không hiển thị trong Alt-Tab. –

+1

Tôi đã thêm một dòng sẽ thực hiện công việc này (và giữ cửa sổ ra khỏi danh sách Alt-Tab). – MusiGenesis

7

Xem câu hỏi này: Best way to hide a window from the Alt-Tab program switcher?

Tôi thử tất cả các giải pháp, nhưng không có vấn đề gì tôi làm cửa sổ vẫn hiển thị trong danh sách Alt-Tab (Tôi đang chạy Vista).

Trong Windows Mobile, bạn đặt thuộc tính Văn bản của biểu mẫu để trống để giữ nó khỏi danh sách chương trình đang chạy (tương đương WinMo của danh sách tab alt). Có lẽ điều này sẽ làm việc cho bạn, nhưng tôi nghi ngờ nó.

Cập nhật: OK, trước hết, làm. Nếu bạn tạo và hiển thị biểu mẫu có FormBorderStyle được đặt thành FixedToolWindowShowInTaskbar được đặt thành false, nó sẽ không xuất hiện trong danh sách Alt-Tab.

7

Dán này, vào mã của bạn:

protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams pm = base.CreateParams; 
       pm.ExStyle |= 0x80; 
       return pm; 
      } 
     } 

đơn giản như vậy. Hoạt động hoàn hảo trên win7 64bit và điều quan trọng hơn - nó không yêu cầu, thay đổi kiểu dáng đường viền (tôi đã tạo ra một ứng dụng giống như widget để thiết lập style thành fixedToolWindow không phải là một lựa chọn, với giải pháp này vẫn không biên giới và vô hình cho alt- chuyển hướng).

+0

Tôi đã làm nó và bây giờ các hình thức trông như thể tôi đặt FormBorderStyle để FixedToolWindow – foxneSs

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