كيفية التحقق مما إذا كان البرنامج يعمل في وحدة التحكم المحلية؟

StackOverflow https://stackoverflow.com/questions/244397

  •  04-07-2019
  •  | 
  •  

سؤال

في Windows Server 2003، كيف يمكنني التحقق مما إذا كان برنامجي يعمل في وحدة التحكم المحلية ("على شاشة جهاز الخادم") بدلاً من الجلسة البعيدة؟

أنا أستخدم Delphi Win32، لذلك يجب أن تعمل أي طريقة تعتمد على Windows API.

هل كانت مفيدة؟

المحلول

ألن يخبرك رقم الجلسة بذلك؟

ProcessIdToSessionId (GetCurrentProcessId()،&dwSessionNum)

سيتعين عليك التحقق من إصدار نظام التشغيل أيضًا باستخدام GetVersionEx:بالنسبة لكل شيء حتى جلسة XP/Server 2003 0 يكون محليًا (خدمة أو وحدة تحكم تفاعلية)، وأي شيء أعلى يكون افتراضيًا.بالنسبة لجلسة Vista/2008، 0 و1 كلاهما محلي (0 هو الخدمة، 1 هو وحدة التحكم)، وكل شيء آخر افتراضي.

أعتقد أن وحدات دلفي الخاصة بك ستعلن عن رقم الجلسة كـ var، لذلك لن تحتاج إلى علامة العطف.

نصائح أخرى

WTSGetActiveConsoleSessionId() يجب أن يُرجع معرف الجلسة المرفق بوحدة التحكم.يمكنك بعد ذلك مقارنة معرف الجلسة بمعرف الجلسة الحالية لتطبيقك لتحديد ما إذا كنت تعمل على وحدة التحكم أم لا.نظام التشغيل Vista (لست متأكدًا من Windows Server 2008) لا يمنح بالضرورة جلسة وحدة التحكم معرف 1 (التبديل السريع بين المستخدمين، هل هناك أحد؟).

بالنسبة لي، أرجعت ProcessIdToSessionId 0 عند التشغيل مباشرة على وحدة التحكم الفعلية وعند تسجيل الدخول إلى الجلسة الإدارية (mstsc /admin).

ومع ذلك، عند تسجيل الدخول عبر RDP، يقوم Windows (XP Pro في هذه الحالة) بإنشاء جلسة جديدة يتم عرضها على وحدة التحكم الفعلية التي تحتوي فقط على شاشة "هذا الكمبيوتر مغلق".تقوم WTSGetActiveConsoleSessionId بإرجاع معرف الجلسة لتلك الجلسة الثانية والتي كانت في حالتي 2.

لذا، على الرغم من أن تطبيقك يعمل على وحدة التحكم، فهناك الآن جلستان لوحدة التحكم ولا يعمل تطبيقك على الجلسة النشطة.في الكود الخاص بي أقارن معرف الجلسة بـ 0 بدلاً من ذلك.

براين على صواب، لقد واجهت منذ ذلك الحين نظام التشغيل Vista يبلغ عن معرف جلسة رقم 2 لوحدة التحكم التفاعلية، على الرغم من حقيقة أن ميزة التبديل السريع بين المستخدمين لم تكن قيد الاستخدام.بالطبع قد يكون هذا مجرد خطأ :-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top