2011-03-30 2 views
2

현재 CreateDesktop 네이티브 C 함수를 사용하여 C# 코드에서 데스크톱을 만들고 전환합니다. Process 클래스 또는 C#/.Net 클래스를 사용하여이 작업을 수행 할 수있는 방법이 있습니까?C# /. 넷에서 데스크톱 생성/전환

이것은 데스크탑 전환을 위해 현재 수업에서 사용하고있는 샘플 코드입니다.

[Flags] 
    public enum AccessRight : uint 
    { 
     DESKTOP_READOBJECTS = 0x00000001, 
     DESKTOP_CREATEWINDOW = 0x00000002, 
     DESKTOP_CREATEMENU = 0x00000004, 
     DESKTOP_HOOKCONTROL = 0x00000008, 
     DESKTOP_JOURNALRECORD = 0x00000010, 
     DESKTOP_JOURNALPLAYBACK = 0x00000020, 
     DESKTOP_ENUMERATE = 0x00000040, 
     DESKTOP_WRITEOBJECTS = 0x00000080, 
     DESKTOP_SWITCHDESKTOP = 0x00000100, 

     GENERIC_ALL = (DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU | 
      DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK | 
      DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS | DESKTOP_SWITCHDESKTOP) 
    }; 

    [Flags] 
    public enum AccountHook 
    { 
     Allow = 1, 
     Disallow = 0 
    }; 

    public enum HandleInheritance 
    { 
     Inherit, 
     None 
    }; 

    [StructLayout(LayoutKind.Sequential)] 
    public struct SecAttrib 
    { 
     public int nLength; 
     public IntPtr lpSecurityDescriptor; 
     public int bInheritHandle; 
    } 

    [DllImport("user32.dll")] 
    public static extern IntPtr OpenDesktop(string lpszDesktop, 
     uint dwFlags, 
     bool fInherit, 
     uint dwDesiredAccess); 

    [DllImport("user32.dll")] 
    public static extern bool SwitchDesktop(IntPtr hDesktop); 

    [DllImport("user32.dll")] 
    public static extern IntPtr CreateDesktop(string lpszDesktop, 
     IntPtr lpszDevice, 
     IntPtr pDevmode, 
     int dwFlags, 
     uint dwDesiredAccess, 
     IntPtr lpsa); 

    [DllImport("user32.dll", SetLastError = true)] 
    public static extern IntPtr OpenInputDesktop(uint dwFlags, bool fInherit, 
     uint dwDesiredAccess); 



    [DllImport("user32.dll", EntryPoint = "CloseDesktop", CharSet = CharSet.Unicode, SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    public static extern bool CloseDesktop(IntPtr handle); 
+1

Nitpick : 기본 Windows API가 (이 중 CreateDesktop가의 일부)는 C API가 아니라 C++입니다. –

답변

2

.net 프레임 워크에는 기본 제공되는 데스크탑 전환 클래스/메소드가 없습니다.

여기 네이티브 windows API를 사용하는 Desktop Switching 예제입니다.

데스크탑 전환을위한 .net 프레임 워크 클래스/메소드가있는 경우 언급 한 codeproject의 예제 또는 예제와 동일한 API를 사용/감쌀 것입니다.

여기에 약간 다른 접근 방법과 또 하나의 예는 다음과 같습니다 Multiple desktop support in Windows

관련 문제