반응형

안녕하세요

 

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

 

저번 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#으로 파워포인트 슬라이드 실행하기와 이어서 같이 사용하시면

 

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

반응형
반응형

안녕하세요

 

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

 

오늘 벌써 4번째 글을 쓰고 있는거 같습니다ㅎㅎㅎ

 

요즘 회사 일이 많아 1일1포스팅을 지킬려고 힘들게 노력하다가

 

1일 1포스팅은 무조껀 지키고 시간이 있을때 많이 포스팅 하자 맘 먹고 하루 벌써 4개의 포스팅을 하고 있습니다ㅎㅎㅎ

 

제가 블로그를 운영해서 미비한 수준의 실력이지만 그래도 같은 개발자분들에게 조금이나마 서로 도와주고

 

정보 공유 할 수 있는 계기가 되길 원합니다ㅎㅎ

 

이번 주제는 C#으로 파워포인트 슬라이드를 구현해볼려고 합니다

 

이걸 만들게 된 계기는 공유폴더에 파워포인트 문서를 특정 조건에 의해 자동 슬라이드를 보여 주는 방식의 

 

프로그램을 만들기 위해서 입니다

 

예를 들면 제조회사에서 공정에 작업표준을 띄운다든지 아니면 손님별 가이드 내용을 보여준다던지

 

이러한 특수 조건에 의해 파워포인트 문서를 자동으로 슬라이드로 실행시키는거죠

 

어떻게 보면 간단한 프로그램이지만 어디에 어떻게 사용하는냐에 따라 많이 응용 될수 있을거 같습니다

 

다시 본론으로 돌아와서 기본 빈 C# 프로젝트를 하나 생성합니다

 

저는 Project라는 이름으로 프로젝트를 생성했습니다

 

그다음 비쥬얼베이직에 오피스 프로그램을 불러올수 있다록 참조 설정을 진행 합니다

 

 

 

참조 관리자에서 COM탭에서 형식 라이브러리 항목중에 다음 리스트들을 참조 추가 해줍니다

 

이렇게 추가 해준뒤 이제 소스 코드를 작성해 볼께요

 

[Source Code]

using PowerPoint = Microsoft.Office.Interop.PowerPoint;

파워 포인트 슬라이드 옵션을 사용하기 위해 using문을 통해 파워포인트를 프로젝트에 삽입 시킵니다

 

 

다름 코드분을 통해 해당 위치의 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();

 

이렇게 실행 하게 되면 PPT파일이 실행되고 자동으로 슬라이드 옵션이 시작되면서

 

바로 슬라이드 표현이 가능해 집니다

 

이렇게 간단한 코드 몇줄로 C#으로 파워포인트 슬라이드를 제어 할 수 있습니다

 

해당 Source Code 중에

 

pptapp.Presentations.Open(FileName, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoCTrue);

 

해당 구문에서 FileName의 경우 네트워크 공유 폴더의 파일 명을 가져와 자동 입력되도록 구현 했습니다

 

C#으로 네트워크 공유 폴더 접속 하는 방법은 다음번 블로그에 기재 하도록 하겠습니다

 

해당 구문을 복사하여 FileName를 Fix 고정으로 구현하면 바로 테스트가 가능합니다

 

한번 적용해 보시고 궁금한 사항이나 문제점은 댓글로 남겨 주시면 답변 드리도록 하겠습니다

 

감사합니다~

반응형

+ Recent posts