ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] 네트워크 공유 폴더에 있는 파일 실행하기
    취미생활/C# 2019. 12. 13. 15:17
    반응형

    안녕하세요

     

    코딩하는남자 코딩연습생입니다

     

    저번 PPT 슬라이드 실행과 연계해서 네트워크 공유 폴더의 파일을 C#에서 Soket으로 접속하여 실행되도록

     

    구현하는 방법을 이번에 설명을 해볼까 합니다

     

    C#으로 PPT슬라이드로 파일 실행하기는 아래 링크로 확인하시면 됩니다

     

    https://codingman.tistory.com/37

     

    [C#]파워포인트 슬라이드 구현하기

    안녕하세요 코딩하는남자 코딩연습생입니다 오늘 벌써 4번째 글을 쓰고 있는거 같습니다ㅎㅎㅎ 요즘 회사 일이 많아 1일1포스팅을 지킬려고 힘들게 노력하다가 1일 1포스팅은 무조껀 지키고 시간이 있을때 많이 포..

    codingman.tistory.com

    그럼 다시 본론으로 돌아와서 당연히 네트워크 공유 폴더에 접근 할려면 Soket부터 구현을 해야 겠죠?

     

     

    [Source Code]

    using System.Net;
    using System.Net.Sockets;
    using System.Runtime.InteropServices;

     

    다음 3개의 using문을 선언해 줍니다.

     

    다음은 네트워크 접속시 인증과 윈도우 인증을 위한 구문 입니다

     

       [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public struct NETRESOURCE
            {
                public uint dwScope;
                public uint dwType;
                public uint dwDisplayType;
                public uint dwUsage;
                public string lpLocalName;
                public string lpRemoteName;
                public string lpComment;
                public string lpProvider;
            }
    
            // API 함수 선언
            [DllImport("mpr.dll", CharSet = CharSet.Auto)]
            public static extern int WNetUseConnection(
                        IntPtr hwndOwner,
                        [MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource,
                        string lpPassword,
                        string lpUserID,
                        uint dwFlags,
                        StringBuilder lpAccessName,
                        ref int lpBufferSize,
                        out uint lpResult);
    
            // API 함수 선언 (공유해제)
            [DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = CharSet.Auto)]
            public static extern int WNetCancelConnection2A(string lpName, int dwFlags, int fForce);
    
            //PPT 함수 선언
            [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
            static extern IntPtr FindWindow(IntPtr ZeroOnly, string lpWindowName);
            //PPT 함수 선언
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
            //PPT 함수 선언
            [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            public static extern bool SetWindowText(IntPtr hwnd, String lpString);
    
            [DllImport("user32")]
            private static extern bool SetForegroundWindow(IntPtr handle);
    
            [DllImport("User32")]
            private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
    
            private string FileName = "";

     

    이렇게 구조체와 Dll파일을 Import 시켜줍니다

     

    이제 준비가 되었으면 공유 폴더에 접속을 해야겠죠?

     

    public int ConnectRemoteServer(string server)
            {
                int capacity = 64;
                uint resultFlags = 0;
                uint flags = 0;
                System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity);
                NETRESOURCE ns = new NETRESOURCE();
                ns.dwType = 1;              // 공유 디스크
                ns.lpLocalName = null;   // 로컬 드라이브 지정하지 않음
                ns.lpRemoteName = server;
                ns.lpProvider = null;
                int result = 0;
                if (server == @"\\아이피주소\폴더명$")
                {
                    result = WNetUseConnection(IntPtr.Zero, ref ns, "공유폴더접속암호", "폴더이름", flags,
                                                sb, ref capacity, out resultFlags);
                }
                else
                {
                    result = WNetUseConnection(IntPtr.Zero, ref ns, "공유폴더접속암호", "폴더이름", flags, sb, ref capacity, out resultFlags);
                }
                return result;
            }

     

    이제는 반대로 접속을 했다면 반대로 해제도 해야겠죠?

     

    public void CencelRemoteServer(string server)
            {
                WNetCancelConnection2A(server, 1, 0);
            }

     

    이제 버튼을 통해 공유 폴더에 접근하는 구문입니다

     

    ConnectRemoteServer(@"\\아이피주소\폴더이름");

     

    그 다음 저의 경우 공유폴더에 있는 ppt파일을 실행 시키도록 구현했는데요

     

    위의 ppt만들기 링크와 이어져 있습니다

     

    FileName = @"\\아이피번호\폴더이름\파일이름.PPT";
    PowerPoint.Application pptapp = new PowerPoint.Application();
    pptapp.Visible = MsoTriState.msoCTrue;
    PowerPoint.Presentation pptPres = pptapp.Presentations.Open(FileName, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoCTrue);
    PowerPoint.SlideShowWindow slideWindow = pptPres.SlideShowSettings.Run();

     

    이렇게 하시면 공유폴더에 있는 특정 파일을 바로 파워포인트 슬라이드 모드로 실행이 됩니다

     

    전에 글쓴 C#으로 파워포인트 슬라이드 실행하기와 이어서 같이 사용하시면

     

    공유폴더에 있는 파일을 바로 파워포인트 슬라이드로 실행하는게 완성됩니다

    반응형
Designed by Tistory.