2013-06-05 2 views
1

J'ai écrit un service dans VB.NET, mais il appelle une DLL qui nécessite un HWND. Y a-t-il un moyen d'obtenir le service d'un service, s'il existe?Les services sont-ils disponibles?

Aussi, juste une question rapide, quelle est la différence entre un service et un programme exécuté en tant que système par le planificateur de tâches.

+0

Vous pouvez également utiliser [NativeWindow] (http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.aspx) si vous avez besoin d'une version gérée de CreateWindow. –

Répondre

0

Les services ne s'exécutent pas dans les fenêtres, par conséquent ils n'ont pas de hWnd. Peut-être que vous pouvez passer 0 comme une valeur? Qu'est-ce que la DLL est censée faire avec le hWnd?

+0

Il fait quelque chose comme ceci: \t struct cengine * engine = (struct cengine *) handle; – user2444615

0

HWND est une poignée de fenêtre. Si la solution d'Alexander ne fonctionne pas, vous pouvez demander à votre service de créer une fenêtre (CreateWindow).

+0

Fondre HWND à une autre structure n'est généralement pas une bonne idée (voir le commentaire à la réponse d'Alexandre), êtes-vous sûr qu'il veut un handle de fenêtre? – Pruyque

+0

Quelle est la différence entre un service et un programme exécuté en tant que SYSTEM par le planificateur de tâches? – user2444615

+0

Selon [Wikipedia] (http://en.wikipedia.org/wiki/Windows_Task_Scheduler), les programmes exécutés par taskscheduler s'exécutent dans une session différente de celle des services. Mais ce sont deux processus qui s'exécutent dans un endroit protégé de l'utilisateur ... – Pruyque

0

Un service est aussi un programme, il fonctionne (habituellement) sans être vu dans une fenêtre. Donc, habituellement, un service n'aura pas de poignée de fenêtre.

Si votre programme veut créer une fenêtre, vous pouvez le faire, mais il ne sera pas visible s'il est exécuté en tant que service.

Questions connexes