2011-11-16 95 views
2

我正在写一个小程序,创建一个新的Windows桌面,切换到它并等待几秒钟,然后切换回原始桌面。我已经设法创建并切换到新的桌面,但不能再回到原来的位置。我在C#中使用win32 API并导入这些DLL。我认为GetDesktopWindow()会让我处理原始桌面,但它不适用于我。C#和win32 API。在两个桌面之间切换。如何恢复到原始桌面?

这是我想要工作的代码片段。

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); 
    } 

回答

4

“桌面窗口”是生成桌面背景的窗口。它与桌面本身不一样。您需要更改getCurrentDesktop()以获取桌面本身的句柄,而不是桌面上的窗口(虽然是特殊窗口)。

我认为你可以在切换到新的桌面之前使用GetThreadDesktop()来获取当前的桌面。

+0

谢谢,解决了它。 :) – user1049697