# process.desktop 库模块帮助文档

[私有桌面运行进程](https://www.aardio.com/zh-cn/docs/library/process/desktop/)

## process 成员列表 <a id="process" href="#process">&#x23;</a>

### process.desktop <a id="process.desktop" href="#process.desktop">&#x23;</a>
私有 Win32 桌面：后台启动进程、枚举和等待窗口。  
不切换前台桌面，不是任务视图虚拟桌面或安全沙箱。

### process.desktop() <a id="process.desktop" href="#process.desktop">&#x23;</a>
创建自动命名的私有桌面。  
失败返回 null,错误信息,Win32错误码。  

[返回对象:processDesktopObject](#processDesktopObject)

## processDesktopObject 成员列表 <a id="processDesktopObject" href="#processDesktopObject">&#x23;</a>

### processDesktopObject.close() <a id="processDesktopObject.close" href="#processDesktopObject.close">&#x23;</a>
关闭桌面句柄并释放内部跟踪句柄，不终止任何进程；可重复调用。  
成功返回 true，失败返回 null,错误信息,Win32错误码。  
调用后不能再 dispose 清理此前的进程。GC 只调用 close，不会强杀进程。

### processDesktopObject.dispose(timeout=2000) <a id="processDesktopObject.dispose" href="#processDesktopObject.dispose">&#x23;</a>
强制终止本对象 start 直接启动的进程，限时等待后调用 close；可重复调用。  
不终止孙进程、不终止经 path 从外部启动的进程。  
timeout 是总等待毫秒数；成功返回 true，失败返回 null,错误信息,错误码。  
失败保留内部句柄，可重试。返回给调用方的 process 对象不被 free。

### processDesktopObject.each(cls,title,processOrPid) <a id="processDesktopObject.each" href="#processDesktopObject.each">&#x23;</a>
创建顶层窗口快照迭代器，返回 hwnd,title,threadId,processId。  
参数可省略；cls、title 支持 aardio 模式匹配；title 为空字符串时仅匹配空标题。  
processOrPid 可以是 process 对象或数值 PID。  
失败返回 null,错误信息[,Win32错误码]；需要检查错误时先取得迭代器。

### processDesktopObject.find(cls,title,processOrPid) <a id="processDesktopObject.find" href="#processDesktopObject.find">&#x23;</a>
查找首个匹配的顶层窗口，返回 hwnd,threadId,processId。  
参数与 each 相同；未找到返回 null，出错返回 null,错误信息[,Win32错误码]。

### processDesktopObject.handle <a id="processDesktopObject.handle" href="#processDesktopObject.handle">&#x23;</a>
HDESK 指针，只读使用；由 close 或 dispose 释放。  
不要用 raw.closeHandle 关闭桌面句柄。

### processDesktopObject.list() <a id="processDesktopObject.list" href="#processDesktopObject.list">&#x23;</a>
返回本桌面的顶层 HWND 快照数组（包含隐藏窗口和有所有者的窗口，不含子控件）。  
正常空结果为 []，失败返回 null,错误信息[,Win32错误码]。

### processDesktopObject.name <a id="processDesktopObject.name" href="#processDesktopObject.name">&#x23;</a>
自动生成的桌面名称，只读使用。

### processDesktopObject.path <a id="processDesktopObject.path" href="#processDesktopObject.path">&#x23;</a>
窗口站名\桌面名，可用于 STARTUPINFO.desktop，只读使用。

### processDesktopObject.start() <a id="processDesktopObject.start" href="#processDesktopObject.start">&#x23;</a>
[返回对象:processObject](https://www.aardio.com/zh-cn/docs/library-reference/process/_.html#processObject)

### processDesktopObject.start(exe,args,startInfo) <a id="processDesktopObject.start" href="#processDesktopObject.start">&#x23;</a>
在本桌面启动程序，返回 process 对象；失败返回 null,错误信息。  
参数同 process，自动覆盖 startInfo.desktop。  
waitInputTimeout 默认为 0，showWindow 默认为 1，调用方的参数表不被修改。  
返回的 process 对象仍由调用方管理；库另持独立句柄供 dispose 使用。

### processDesktopObject.wait(cls,title,processOrPid,timeout=8000) <a id="processDesktopObject.wait" href="#processDesktopObject.wait">&#x23;</a>
有限时等待匹配窗口，返回 hwnd,threadId,processId。  
参数与 find 相同；传入 process 对象时进程退出可提前结束等待。  
timeout 单位毫秒；0 或负数只检查一次。  
失败返回 null,错误信息[,Win32错误码]，超时错误码为 258。  
同步阻塞调用线程，GUI 程序建议在工作线程创建和使用本对象。
