2008-10-01 39 views
22

Có cách nào chương trình của tôi có thể xác định khi chương trình đang chạy trên Máy tính Từ xa (Dịch vụ Đầu cuối) không?Xác định xem chương trình có đang chạy trên Máy để bàn Từ xa

Tôi muốn bật "thời gian chờ không hoạt động" trên chương trình khi chương trình đang chạy trên phiên Máy tính từ xa. Vì người dùng rất nổi tiếng vì đã thoát phiên Remote Desktop, tôi muốn chương trình của tôi chấm dứt sau một khoảng thời gian không hoạt động được chỉ định. Nhưng, tôi không muốn thời gian chờ không hoạt động được kích hoạt cho người dùng không phải RD.

Trả lời

10

Đây là C# quản lý mã tôi sử dụng:

/// <summary> 
/// Indicates if we're running in a remote desktop session. 
/// If we are, then you MUST disable animations and double buffering i.e. Pay your taxes! 
/// 
/// </summary> 
/// <returns></returns> 
public static Boolean IsRemoteSession 
{ 
    //This is just a friendly wrapper around the built-in way 
    get 
    { 
     return System.Windows.Forms.SystemInformation.TerminalServerSession; 
    } 
} 
5

Các công trình sau đây nếu bạn muốn biết về ứng dụng của bạn đang chạy trong phiên BẠN :

BOOL IsRemoteSession(void) 
{ 
    return GetSystemMetrics(SM_REMOTESESSION); 
} 

Nhưng không nói chung đối với bất kỳ ID tiến trình nào.


Nếu bạn muốn biết về bất kỳ quá trình tùy ý nào có thể chạy trong bất kỳ phiên tùy ý nào thì bạn có thể sử dụng phương thức dưới đây.

Trước tiên, bạn có thể chuyển đổi ID tiến trình thành ID phiên bằng cách gọi ProcessIdToSessionId. Khi bạn có ID phiên, bạn có thể sử dụng nó để gọi: WTSQuerySessionInformation. Bạn có thể chỉ định WTSInfoClass làm giá trị WTSIsRemoteSession và điều này sẽ cung cấp cho bạn thông tin về ứng dụng đó có phải là kết nối máy tính từ xa hay không.

BOOL IsRemoteSession(DWORD sessionID) 
{ 
    //In case WTSIsRemoteSession is not defined for you it is value 29 
    return WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionID, WTSIsRemoteSession, NULL, NULL); 
} 
+0

Các tình huống nào có thể khiến quá trình ở một phiên khác? Đây có phải là nếu tôi hỏi về các dịch vụ hoặc xử lý đang chạy dưới những người dùng đã đăng nhập khác không? –

+0

Khi bạn thực hiện đăng nhập mới, hoặc từ máy cục bộ hoặc qua RDP mà không cần chuyển đổi/bàn điều khiển, một phiên mới sẽ được tạo. Khi một phiên mới được tạo ra, bất kỳ quá trình nào được tạo sẽ được bắt đầu trong phiên đó theo mặc định. Bạn cũng có thể nhắm mục tiêu các phiên khi bạn tạo một quy trình qua Win32 API CreateProcessAsUser. –

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