Mar*_*urd 3 windows winapi desktop
我使用以下方法枚举了系统上的桌面(我正在使用 SysInternals Desktops
,所以我知道我有额外的桌面):
EnumDesktops(Nothing, AddressOf EnumDesktopsProc, Nothing)
Run Code Online (Sandbox Code Playgroud)
有了这些声明:
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
Run Code Online (Sandbox Code Playgroud)
我检索到:
"WinSta0"
"Service-0x0-3e7$"
"Service-0x0-3e4$"
"Service-0x0-3e5$"
"SAWinSta"
"__X78B95_89_IW"
"Service-0x0-119d1e$"
"Service-0x0-4e05f$"
Run Code Online (Sandbox Code Playgroud)
当我尝试用以下命令打开它们时:
OpenDesktop(DesktopName, 0, False, AccessMask.DESKTOP_ENUMERATE)
Run Code Online (Sandbox Code Playgroud)
(这里和这里的数据AccessMask
是大重复的,并且是a )Enum
DesktopHandle
SafeHandle
它们都返回NULL
( Nothing
) 并GetLastWin32Error
返回2 "The system cannot find the file specified."
。为什么?
我检查了替代声明OpenDesktop
和不同的AccessMask
值,但没有任何效果(除非声明实际上是错误的)。我注意到,在添加“路径”时,我可能会遇到不同的错误DesktopName
,特别是161 "The specified path is invalid."
的文档EnumDesktops
即使没有错误,至少也具有误导性。传递NULL
( Nothing
) 作为第一个参数将返回“Session 0”窗口站的桌面。您需要使用 的结果GetProcessWindowStation()
。即将上面的第一行更改为:
Private Declare Auto Function GetProcessWindowStation Lib "User32" () As IntPtr
EnumDesktops(GetProcessWindowStation(), AddressOf EnumDesktopsProc, Nothing)
Run Code Online (Sandbox Code Playgroud)
EnumDesktops
(文档中添加了一条用户评论,但我错过了它,所以我认为其他人也可能如此。)
请注意,文档GetProcessWindowStation
明确表示它不需要关闭,因此不需要将其包装在SafeHandle
.
归档时间: |
|
查看次数: |
2050 次 |
最近记录: |