C# 和 win32 API。在两个桌面之间切换。如何回到原来的桌面?

标签 c# winapi

我正在编写一个小程序,它创建一个新的 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/

相关文章:

c++ - 使用箭头键 C++?

c# - 如何获取搜索引擎有效 URL 的数据库?

c# - 当应用程序在 WP 8.1 商店应用程序中恢复时,应用程序恢复事件不会触发

c++ - 显示 MessageBox 后子窗口失去焦点

c++ - 删除 ListView 中特定项目的复选框

winapi - Windows 函数调用中的堆栈是如何设置的?

c# - OpenPop.net 获取实际消息文本

c# - 为什么 int 和 string 的连接在编译时没有报错

c# - LINQ,仅选择子项的第一个元素

c - 使用 GCC 和 MSVC 编译时的不同行为