C # и Win32 API. Переключение между двумя рабочими столами. Как вернуться на оригинальный рабочий стол? - PullRequest
2 голосов
/ 16 ноября 2011

Я пишу небольшую программу, которая создает новый рабочий стол Windows, переключается на него и ждет пару секунд, а затем переключается обратно на исходный рабочий стол. Мне удалось создать новый рабочий стол и переключиться на него, но я не вернулся к исходному. Я использую Win32 API в C # и импортирую библиотеки 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);
    }

1 Ответ

4 голосов
/ 16 ноября 2011

Окно рабочего стола - это окно, которое выделяет фон рабочего стола. Это не то же самое, что сам рабочий стол. Вам нужно изменить getCurrentDesktop() для получения дескриптора самого рабочего стола, а не окна на рабочем столе (хотя это специальное окно).

Я думаю, что вы можете использовать GetThreadDesktop(), чтобы получить текущий рабочий стол перед переключением на новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...