да, действительно. смотря под какой осью.
хотя... если "службы" - то, скорее всего, венда.
а если венда, то отличный и простой пример мелкого сервиса - программа ReXeCutioner. это буквально один-два файла. на сорцфорже лежит код его потомка (TheGrimLinker), который посложнее, но там есть и исходники ReXeCutioner'а:
http://sourceforge.net/projects/thegrimlinker/files/ReXeCutioner ставится сервисом на машину и позволяет удалённо цепляться к нему из консоли другой машины, запуская на удалённой машине любые программы и выводя в локальную консоль содержимое консоли на удалённой машине. там как раз пример сервиса, и пайпов, и всего остального.
есть ещё более ранний вариант: xCmd (http://www.codeguru.com/cpp/i-n/network/remoteinvocation/article.php/c5433/). это "предок" ReXeCutioner'а. Он ещё примитивнее.
что касается определения, вошёл юзер или нет - это сложнее. сервисы запускаются от имени системных юзеров, крутятся отдельно от юзерских пространств и у них очень ограниченный доступ к юзерской информации. сервисы с каким-либо выводом на экран - это значительный геморрой и всё равно работает это нестабильно, ибо никогда не известно, какой юзер получит сообщение от сервиса. можно, конечно, поставить сервис так, чтобы от него зависела какая-то вендозная служба, которая осуществляет логин, и он будет стартовать до входа юзера в систему, но это надо ковырять в деталях, как там что устроено и в каком порядке запускается, чтобы вклиниться в нужное место.
P.S. да, к QT это не имеет никакого отношения. ибо просто системная фича, к тому же вовсе не кроссплатформенная.