簡而言之,我試圖將一些功能添加到作爲Windows服務運行的自定義更新程序中。我遇到了一些我嘗試更新的應用程序可能正在運行的問題,如果是,我需要執行一些自定義操作。Windows服務中的EnumDesktopWindows
我遇到的問題是EnumDesktopWindows API調用只返回在本地系統上下文中運行的進程。
現在,這對我來說最主要的是爲什麼這樣做了,等等(我想 - 雖然會感激進一步的解釋)。
然而,如何通過服務完成此功能?
這是我使用的代碼的基礎:
public static IntPtr[] EnumDesktopWindows()
{
WinAPI._desktopWindowHandles = new List<IntPtr>();
WinAPI.EnumDelegate enumfunc = new WinAPI.EnumDelegate(EnumWindowsCallBack);
IntPtr hDesktop = IntPtr.Zero; // current desktop
bool success = WinAPI.EnumDesktopWindows(hDesktop, enumfunc, IntPtr.Zero);
if (success)
{
IntPtr[] handles = new IntPtr[_desktopWindowHandles.Count];
_desktopWindowHandles.CopyTo(handles);
return handles;
}
else
{
int errorCode = Marshal.GetLastWin32Error();
string errorMessage = String.Format("EnumDesktopWindows failed with code {0}.", errorCode);
throw new Exception(errorMessage);
}
}
難道是因爲我有這一切錯誤的,問題是在該行?:
IntPtr hDesktop = IntPtr.Zero;
我很肯定你*可以*從服務訪問任何桌面如果你足夠努力,但過程枚舉絕對是一個更簡單的方法。 – 2011-03-14 14:43:58