2013-06-05 31 views
1

我在VB.NET中編寫了一個服務,但是它調用一個需要HWND的DLL。有沒有辦法獲得服務的hwnd,如果它存在的話?服務是否有hwnd?

另外,只是一個簡單的問題,服務和程序作爲SYSTEM運行的任務調度程序之間的區別是什麼。

+0

如果需要CreateWindow的託管版本,還可以使用[NativeWindow](http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.aspx)。 –

回答

0

服務不在Windows上運行,因此它們沒有hWnd。也許你可以傳遞0作爲一個值? DLL應該用hWnd做什麼?

+0

它的確如此:\t struct cengine * engine =(struct cengine *)handle; – user2444615

0

HWND是一個窗口句柄。如果亞歷山大的解決方案不起作用,您可以讓您的服務創建一個窗口(CreateWindow)。

+0

將HWND轉換爲其他結構通常不是一個好主意(請參閱Alexander的回答評論),你確定它需要一個窗口句柄嗎? – Pruyque

+0

由任務調度程序以SYSTEM身份運行的服務和程序之間有什麼區別? – user2444615

+0

根據[Wikipedia](http://en.wikipedia.org/wiki/Windows_Task_Scheduler),由taskscheduler運行的程序運行在與服務不同的會話中。但是它們都是運行在某個受到用戶保護的地方的進程。 – Pruyque

0

服務也是一個程序,它只是(通常)運行而不會在窗口中看到。所以通常服務不會有窗口句柄。

如果您的程序想要創建一個窗口,您可以,但是如果它作爲服務運行,它將不可見。