我正在编写一个小程序,它创建一个新的 Windows 桌面,切换到它并等待几秒钟,然后切换回原始桌面。我已成功创建并切换到新桌面,但无法再次返回到原始桌面。我在 C# 中使用 win32 API 并导入 DLL。我以为 GetDesktopWindow() 会给我原始桌面的句柄,但它对我不起作用。
这是我想要开始工作的代码片段。
public IntPtr createDesktop(string name)
{
return CreateDesktop(name, IntPtr.Zero, IntPtr.Zero, 0, (long)DESKTOP_ACCESS_MASK.GENERIC_ALL, IntPtr.Zero);
}
public IntPtr getCurrentDesktop()
{
return GetDesktopWindow();
}
public void switchDesktop(IntPtr desktop)
{
SwitchDesktop(desktop);
}
main()
{
IntPtr newDesktop = createDesktop("Test");
IntPtr oldDesktop = getCurrentDesktop();
switchDesktop(newDesktop);
switchDesktop(oldDesktop);
}
最佳答案
桌面窗口是显示桌面背景的窗口。它与桌面本身不同。您需要更改 getCurrentDesktop()
以获取桌面本身的句柄,而不是桌面上的窗口(尽管是一个特殊的窗口)。
我认为你可以使用GetThreadDesktop()
在切换到新桌面之前获取当前桌面。
关于C# 和 win32 API。在两个桌面之间切换。如何回到原来的桌面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152207/