تحديد ما إذا كان البرنامج قيد التشغيل على سطح المكتب البعيد
-
03-07-2019 - |
سؤال
هل هناك طريقة برنامجي يمكن تحديد متى انها تعمل على سطح المكتب البعيد (Terminal Services)؟
وأود أن تمكين "مهلة الخمول" في البرنامج عند تشغيله على جلسة سطح المكتب البعيد. منذ المستخدمين، كما هو معروف لترك جلسات سطح المكتب البعيد مفتوحة، أريد برنامجي لإنهاء بعد فترة محددة من الخمول. ولكن، لا أريد مهلة الخمول تمكين المستخدمين غير RD.
المحلول
وGetSystemMetrics (SM_REMOTESESSION) (كما هو موضح في http://msdn.microsoft. كوم / EN-US / مكتبة / aa380798.aspx )
نصائح أخرى
وهنا يكمن C # التعليمات البرمجية المدارة يمكنني استخدام:
/// <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;
}
}
والأعمال التالية إذا كنت تريد أن تعرف عن تطبيق الخاص بك الذي يعمل في جلسة العمل الخاصة بك:
BOOL IsRemoteSession(void)
{
return GetSystemMetrics( SM_REMOTESESSION );
}
ولكن ليس بشكل عام لأي ID العملية.
إذا كنت تريد أن تعرف عن أي عملية التعسفية التي يمكن أن تعمل في أي دورة التعسفية ثم يمكنك استخدام الأسلوب أدناه.
ويمكنك أولا تحويل معرف العملية إلى معرف جلسة عمل عن طريق الاتصال <لأ href = "http://msdn.microsoft.com/en-us/library/aa382990(VS.85).aspx" يختلط = "noreferrer "> ProcessIdToSessionId . مرة واحدة لديك معرف جلسة يمكنك استخدامه للاتصال: WTSQuerySessionInformation . يمكنك تحديد WTSInfoClass
كما WTSIsRemoteSession
قيمة، وهذا سوف تعطيك معلومات حول ما إذا كان هذا التطبيق هو اتصال سطح المكتب البعيد أم لا.
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);
}