CloseWindowStation()
函数的文档中,它说:
函数返回的句柄。GetProcessWindowStation()
SetProcessWindowStation()
设置一个新的窗口站句柄,您该怎么办?您应该关闭检索到的那个手柄,还是两个手柄都应该保持打开状态?
HWINSTA oldWinSta = GetProcessWindowStation();
HWINSTA newWinSta = CreateWindowStation(...);
SetProcessWindowStation(newWinSta);
// should you do this?
// sins now GetProcessWindowStation would return newWinSta instead of oldWinSta
// or should both stay open?
CloseWindowStation(oldWinSta);
不,你不能关闭
GetProcessWindowStation
函数返回的句柄,这是直接说明的。该 API 不会创建“新”句柄,而是返回一个“现有”句柄(我们可以通过调用 API 2 次来简单地检查这一点 - 将返回相同的句柄值)。因此,您不需要关闭该句柄,系统会自行管理它。如果您为进程设置另一个窗口站 - 系统将自行关闭旧窗口站。成功调用 SetProcessWindowStation(newWinSta)
后,您的 oldWinSta
已关闭。当您再次尝试调用CloseWindowStation(oldWinSta)
时,它将返回STATUS_INVALID_HANDLE
,直到该句柄被其他窗口站重新占用;在这种情况下,它将被关闭。