2009-03-11 22 views
2

Şu anda oturum açmış olan kullanıcıdan etkin pencere veya son fare hareketi gibi bilgileri alması gereken bir C# hizmeti yazıyorum. Zaten kullanıcı bilgilerini user32.dll kullanarak alabildiğimi öğrendim, ancak bu yalnızca yöntemleri çağıran kullanıcı bağlamında çalışır.Oturum açmış bir kullanıcının etkin penceresini bir hizmetten alma

Bu sayede hizmetim yalnızca "gerçek dünya" kullanıcısı hakkında değil, yalnızca kendisiyle ilgili bilgileri alabilir. Bunun WTSEnumerateSessions, OpenWindowStation, EnumDesktops, vb. Kullanılarak mümkün olabileceğini de duydum ama nasıl yapılacağını gösteren bir örnek bulamadım.

Hedefimin nasıl gerçekleştirileceğine dair bir ipucu (veya bazı kod örnekleri) olan var mı?

cevap

4

Bu, kullanıcının oturumunda çalışan bir uygulama için bir işe çok benziyor. İyi huylu bir hizmet, kullanıcıya böyle göz kulak olmamalıdır. Orada olabilir yapmak için yollar (dürüst bilmiyorum), ama pek de uygun değil.

Windows'un son sürümlerinde, konsol oturumunun (oturum 0) yönetici amaçlarıyla sınırlı olduğunu ve kullanıcının (normalde) orada olmayacağını unutmayın. Sıfır, bir veya pek çok konsol dışı oturumunuz olabilir.

+0

Gerçekten. Bu şekilde çok sevmiyorum ama uygulama kullanıcının oturumunda çalışırsa, kullanıcı bunu iptal edebilir. Hizmet olarak çalıştığı takdirde bu durum önlenebilir. – Marcus

+0

Sadece servisin uygulamayı yeniden başlatmasını sağlayın. – Samuel

+0

Bir kullanıcı uygulaması ve ek bir hizmet oluşturmayı da düşündüm ama bir kullanıcının kullanıcı oturumunda bir kullanıcının oturumu açmadan bir uygulamayı nasıl yeniden başlatması gerekir? – Marcus