私は自分のシステムのデスクトップを列挙しました(私はSysInternalsを使用しているDesktops
ので、余分なものがあることを知っていました)。
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)
(こことここでデータを複製AccessMask
する大きなものはどこにあり、はです)Enum
DesktopHandle
SafeHandle
それらはすべてNULL
(Nothing
)をGetLastWin32Error
返し、。を返します2 "The system cannot find the file specified."
。なんで?
代替宣言OpenDesktop
と異なるAccessMask
値をチェックしましたが、効果はありませんでした(宣言が実際に間違っていた場合を除く)。DesktopName
特に、に「パス」を追加すると、別のエラーが発生する可能性があることに注意してください。161 "The specified path is invalid."