Frage

In Windows Server 2003, wie kann ich überprüfen, ob mein Programm in der lokalen Konsole ( „auf dem Bildschirm des Server-Rechners“) anstelle von Remote-Sitzung ausgeführt wird?

Ich bin mit Delphi Win32, so sollte jede Windows-API-basierte Methode arbeiten ..

War es hilfreich?

Lösung

Würde nicht die Sitzungsnummer sagen Sie das?

ProcessIdToSessionId (GetCurrentProcessId () & dwSessionNum)

würden Sie haben die OS-Version als auch zu überprüfen, GetVersionEx mit: für alles, was bis zu XP / Server 2003 Sitzung 0 lokal ist (Service oder interaktive Konsole), etwas höher virtuell sind. Für Vista / 2008-Sitzung 0 und 1 sind lokal beide (0 ist der Dienst, 1 Konsole), alles andere virtuell ist.

Ich bin Ihre Delphi-Einheiten zu raten würde die Sitzungsnummer als var deklariert, so würden Sie die Und-Zeichen nicht benötigen.

Andere Tipps

WTSGetActiveConsoleSessionId () sollte die Rückkehr ID der Sitzung, an der Konsole angebracht. Sie können dann die Session-ID mit der Anwendung der aktuellen Session-ID vergleichen, um festzustellen, ob Sie sich auf der Konsole oder nicht ausgeführt werden. Vista (nicht sicher über Windows Server 2008) nicht unbedingt gibt der Konsole-Sitzung die ID 1 (Fast User Switching, anyone?).

Für mich zurück ProcessIdToSessionId 0 beide, wenn sie direkt an der physischen Konsole ausführen und wenn angemeldet, um die Verwaltungssitzung (mstsc / admin).

Wenn Sie jedoch über RDP anmelden, Windows (XP Pro in diesem Fall) erstellt eine neue Sitzung, die es auf der physischen Konsole zeigt, der gerade das hat „dieser Computer ist gesperrt“ angezeigt. WTSGetActiveConsoleSessionId gibt die Session-ID für die zweite Sitzung, die in meinem Fall 2 war.

Also auch wenn die App auf der Konsole ausgeführt wird, gibt es nun zwei Konsolensitzungen und die App ist auf dem aktiven nicht aktiv. In meinem Code vergleiche ich Session-ID gegen 0 statt.

Brian ist richtig, ich habe Vista da begegnet eine Session-ID von 2 für eine interaktive Konsole berichtet, trotz der Tatsache, dass die schnelle Benutzerumschaltung war nicht in Gebrauch ist. Natürlich kann dies nur ein Fehler sein werden: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top