2008-10-01 16 views
22

पर कोई प्रोग्राम चल रहा है या नहीं, क्या कोई तरीका है कि मेरा प्रोग्राम दूरस्थ डेस्कटॉप (टर्मिनल सेवा) पर चलने पर निर्धारित कर सकता है?निर्धारित करें कि एक दूरस्थ डेस्कटॉप

मैं रिमोट डेस्कटॉप सत्र पर चल रहे प्रोग्राम पर "निष्क्रियता टाइमआउट" सक्षम करना चाहता हूं। चूंकि उपयोगकर्ता रिमोट डेस्कटॉप सत्रों को खोलने के लिए कुख्यात हैं, इसलिए मैं चाहता हूं कि मेरा प्रोग्राम निष्क्रियता की निर्दिष्ट अवधि के बाद समाप्त हो जाए। लेकिन, मैं नहीं चाहता कि गैर-आरडी उपयोगकर्ताओं के लिए निष्क्रियता टाइमआउट सक्षम हो।

उत्तर

10

यहाँ सी # प्रबंधित कोड मैं का उपयोग करें:

/// <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

निम्नलिखित काम करता है अगर आप अपने आवेदन के बारे में जानना चाहते हैं जो अपने सत्र में चल रहा है :

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

लेकिन किसी भी प्रक्रिया आईडी के लिए सामान्य रूप से नहीं।


आप किसी भी मनमाने ढंग से प्रक्रिया है जो किसी भी मनमाने ढंग से सत्र में चल रहा हो सकता है तो आप नीचे दी गई विधि का उपयोग कर सकते के बारे में जानना चाहते हैं।

आप पहले 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); 
} 
+0

ऐसी परिस्थितियां क्या हैं जो एक अलग सत्र में प्रक्रिया का कारण बन सकती हैं? क्या यह है यदि मैं सेवाओं के बारे में पूछ रहा हूं, या अन्य लॉग इन उपयोगकर्ताओं के तहत चल रहा प्रसंस्करण कर रहा हूं? –

+0

जब आप एक नया लॉगिन करते हैं, या तो स्थानीय मशीन से या आरएसपी के माध्यम से/कंसोल स्विच के बिना, एक नया सत्र बनाया जाता है। जब कोई नया सत्र बनाया जाता है तो बनाई गई कोई भी प्रक्रिया डिफ़ॉल्ट रूप से उस सत्र में शुरू की जाएगी। जब आप Win32 API CreateProcessAsUser के माध्यम से कोई प्रक्रिया बनाते हैं तो आप सत्रों को भी लक्षित कर सकते हैं। –

संबंधित मुद्दे