我枚举了系统上的桌面(我正在使用 SysInternalsDesktops
,所以我知道我有额外的)使用:
EnumDesktops(Nothing, AddressOf EnumDesktopsProc, Nothing)
有了这些声明:
Private Declare Auto Function EnumDesktops Lib "User32" (ByVal hWinSta As IntPtr, ByVal edp As EnumDesktopProc, ByVal lParam As IntPtr) As Boolean
Private Declare Auto Function OpenDesktop Lib "User32" (<MarshalAs(UnmanagedType.LPTStr)> ByVal DesktopName As String, ByVal dwFlags As Integer, <MarshalAs(UnmanagedType.Bool)>ByVal fInherit As Boolean, ByVal dwDesiredAccess As AccessMask) As DesktopHandle
Private desktopNames As New List(Of String)
Private Delegate Function EnumDesktopProc(<MarshalAs(UnmanagedType.LPTStr)>ByVal DesktopName As String, ByVal lParam As IntPtr) As Boolean
Private Function EnumDesktopsProc(
ByVal DesktopName As String,
ByVal lParam As IntPtr
) As Boolean
desktopNames.Add(DesktopName)
Return True
End Function
我检索到:
"WinSta0"
"Service-0x0-3e7$"
"Service-0x0-3e4$"
"Service-0x0-3e5$"
"SAWinSta"
"__X78B95_89_IW"
"Service-0x0-119d1e$"
"Service-0x0-4e05f$"
当我尝试用以下命令打开它们时:
OpenDesktop(DesktopName, 0, False, AccessMask.DESKTOP_ENUMERATE)
(where AccessMask
是一个大Enum
复制数据here and here, and DesktopHandle
is a SafeHandle
)
他们都回来了NULL
(Nothing
) and GetLastWin32Error
回报2 "The system cannot find the file specified."
. Why?
我检查了替代声明OpenDesktop
和不同的AccessMask
没有任何影响的值(除非声明实际上是错误的)。我注意到在添加“路径”时可能会出现不同的错误DesktopName
, 具体来说161 "The specified path is invalid."